Что не так с этим хранимым вызовом Oracle? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть сохраненный процесс с подписью:

PROCEDURE contract_boq_import(i_project_id IN RAW, i_master_list_version IN NUMBER,
                             i_force_update_if_exists IN BOOLEAN, i_user_id IN NUMBER)

И когда я пытаюсь вызвать его, в SQL Developer происходит следующее:

exec PA_PRJ_IMP.contract_boq_import('B3F4C5933008B348B753F95AA99B3678', 3, 1, 3920)

Я получаю следующую ошибку:

wrong number or types of arguments in call to 'CONTRACT_BOQ_IMPORT'

Что я могу делать не так?

Ответы [ 2 ]

2 голосов
/ 09 мая 2019

Ошибка в том, что вы передаете число 1, когда оно ожидает значение BOOLEAN; и нет неявного преобразования между этими типами данных:

exec PA_PRJ_IMP.contract_boq_import('B3F4C5933008B348B753F95AA99B3678', 3, 1, 3920);

PLS-00306: wrong number or types of arguments in call to 'CONTRACT_BOQ_IMPORT'

Изменение значения на TRUE (или FALSE) работает:

exec PA_PRJ_IMP.contract_boq_import('B3F4C5933008B348B753F95AA99B3678', 3, TRUE, 3920);

PL/SQL procedure successfully completed.

Но вы, вероятно, также хотите явно преобразовать первый аргумент в RAW; он будет неявно преобразован, но лучше быть явным:

exec PA_PRJ_IMP.contract_boq_import(hextoraw('B3F4C5933008B348B753F95AA99B3678'), 3, TRUE, 3920);

PL/SQL procedure successfully completed.

Quick db <> fiddle , включая показ того, что произошло неявное преобразование (во втором вызове).

2 голосов
/ 09 мая 2019

Это потому, что 'B3F4C5933008B348B753F95AA99B3678' - это значение varchar, а не RAW.

Вам нужно преобразовать его в RAW при вызове. Кроме того, вам нужно передать логическое значение для третьего параметра - 1 - это число.

exec PA_PRJ_IMP.contract_boq_import(hextoraw('B3F4C5933008B348B753F95AA99B3678'), 3, true, 3920);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...