Это ваша процедура:
SQL> create or replace procedure retrieve_decrypt
2 (custid in number,
3 column_name in varchar2,
4 test_value out varchar2
5 )
6 as
7 begin
8 -- your code goes here
9 null;
10 end;
11 /
Procedure created.
SQL>
Вот как вы ее называете (и получаете сообщение об ошибке):
SQL> exec retrieve_decrypt(5, 'creditcardno');
BEGIN retrieve_decrypt(5, 'creditcardno'); END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'RETRIEVE_DECRYPT'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
SQL>
Причина ошибки:
- процедура содержит 3 параметры:
- 2 из них IN - вы предоставили их значения
- 1 из них OUT - вы не предоставилион получил ошибку
Вот что вы должны были сделать: поскольку третий параметр равен OUT, вам нужно ОБЪЯВИТЬ его:
SQL> declare
2 l_out varchar2(20);
3 begin
4 retrieve_decrypt(5, 'creditcardno', l_out);
5 end;
6 /
PL/SQL procedure successfully completed.
SQL>
EXEC
, которую вы использовали, является командой SQL * Plus, поэтому она может работать не везде;DECLARE-BEGIN-END
блок будет, поэтому я бы предложил вам его использовать.
В качестве альтернативы, в SQL * Plus его можно переписать как
SQL> var l_out varchar2
SQL>
SQL> exec retrieve_decrypt(5, 'creditcardno', :l_out);
PL/SQL procedure successfully completed.
SQL>
, но - еще раз - вам лучшеиспользуйте DECLARE-BEGIN-END
PL / SQL блок.