Использование пакетных функций pl/sql в коде golang

Я пытаюсь запустить функцию в пакете в ручке моего API и получаю сообщение об ошибке: call register type before use user defined type (UDT)

Запустил саму функцию через SQL запрос и она сработала значит ошибка в самом хэндлере, SOS, мучаюсь уже несколько часов вот код

возможно я не правильно вызываю эту функцибю, для подключения к бд использую драйвер github.com/sijms/go-ora/v2. обычные процедуры запускаются без проблем, как вариант написать процедуру под ручку, но я ек хочу таким образом говнокодить, так что надежда пока на вас. вот сам код, в котором вызываю функцию:

    var responsibleID string
query := `
    BEGIN
        :1 := MYDB.RESPONSIBLE_BO.GetContractorIDByName(:2);
    END;
`
err = tx.QueryRow(query, sql.Out{Dest: &responsibleID}, req.ResponsibleName).Scan(&responsibleID)
if err != nil {
    log.Println("Failed to get ResponsibleID:", err)
    ctx.SetStatus(apieasy.InternalServerError, "Failed to get ResponsibleID, error: %v", err)
    return
}

Пробовал объявлять переменную, в которую записываю данные из бд:

query := `
        DECLARE
          v_contractor_id CHAR;
        BEGIN
            v_contractor_id := MYDB.RESPONSIBLE_BO.GetContractorIDByName(:1);
            :2 := contractor_id;
        END;
    `

не помогло.

вот сам код функции, если будет нужно:

  FUNCTION GetContractorIDByName (i_sNAME IN VARCHAR2)
RETURN CHAR
IS 
  v_res CONTRACTOR.CONTRACTORID % TYPE;
BEGIN 
  IF (i_sNAME IS NOT NULL)
  THEN
    BEGIN
      SELECT CONTRACTORID
        INTO v_res
        FROM CONTRACTOR
        WHERE NAME = i_sNAME;
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          CREATECONTRACTOR (i_sNAME, NULL, NULL, 'created by function GetContractorIDByName', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0);
          COMMIT;
          BEGIN
              SELECT CONTRACTORID
                INTO v_res
                FROM CONTRACTOR
                WHERE NAME = i_sNAME;
          EXCEPTION
              WHEN NO_DATA_FOUND THEN
                  RAISE_APPLICATION_ERROR(-20002, 'Failed to retrieve newly created contractor TRY AGAIN');
          END;
    END;
  ELSE 
            RAISE_APPLICATION_ERROR(-20001, 'Undefined nom name');
  END IF;
  RETURN v_res;
END GetContractorIDByName;

Ответы (0 шт):