ORA-06550: строка 1, столбец 7: PLS-00306: неверный номер или типы аргументов при вызове 'TEST' ORA-06550: строка 1, столбец 7: PL / SQL: оператор игнорируется - PullRequest
0 голосов
/ 26 февраля 2019
create or replace procedure test(supplierid in number,
                                 supplier   out varchar) is
begin
  select first_name
    into Supplier
    from lup_sup_master
   where sup_id = supplierid;
end;
/ 

execute test(2279, :supplierid); 

или

begin
execute test(2279, :supplierid); dbms_output.enable; dbms_output.put_line(supplier);
end;

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Ваша процедура test имеет 2 входных аргумента.Один имеет тип IN, который должен использоваться с процедурой, а другой параметр supplier имеет тип OUT, что означает, что этот параметр должен содержать значение, которое возвращает Procedure.

Как объяснено@Barbaros, если вы хотите выполнить процедуру через командную строку SQL, вы можете выполнить следующие шаги.

Однако второй способ, который вы показали, - это использование PLSQL Block.

begin

выполнить тест (2279,: supplierid);

dbms_output.enable;

dbms_output.put_line (поставщик);end;

В приведенном выше примере вызова вы должны заметить, что ключевое слово Execute используется только при использовании командной строки SQL.При использовании блока PLSQL вы можете напрямую вызывать процедуру по ее имени, как показано ниже.Также обратите внимание, что если у вас есть параметр OUT, вы должны иметь параметр OUT, передаваемый в Procedure, поскольку Procedure ожидает 2 аргумента.Смотри ниже демо.

declare
 var varchar2(100);
begin
 test( supplierid => 2279, supplier =>var); 
 dbms_output.enable; 
 dbms_output.put_line(var);
End;
0 голосов
/ 26 февраля 2019

Кажется, вы запутались между supplierid и supplier.Вам нужно определить переменную для supplier, чтобы напечатать выходную строку, и, скорее всего, вы определили переменную командной строки supplierid, которая имеет числовой тип.

Итак, используйте ниже:

SQL> set serveroutput on;
SQL> var supplier varchar2;
SQL> execute test(2279, :supplier);
supplier
---------
Afzal -- as an example name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...