ORA-06550:第1行,第7列:PLS-00306:调用“ TEST”时参数的数量或类型错误ORA-06550:第1行,第7列:PL / SQL:语句被忽略

时间:2019-02-26 06:16:23

标签: oracle plsql

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 :(得分:0)

似乎您对supplieridsupplier感到困惑。您需要为supplier定义一个变量才能打印输出行,并且很可能已经定义了一个命令行变量supplierid,它是数字类型。

因此,请在下面使用:

SQL> set serveroutput on;
SQL> var supplier varchar2;
SQL> execute test(2279, :supplier);
supplier
---------
Afzal -- as an example name

答案 1 :(得分:0)

您的过程test有2个输入参数。一个具有应与该过程一起使用的IN类型,而另一个参数supplier具有OUT类型,这意味着该参数应该保存Procedure返回的值。

如@Barbaros所述,如果要通过SQL命令提示符执行过程,则可以按照以下步骤进行操作。

但是,您显示的第二种方式是使用PLSQL Block

  

开始

     

执行测试(2279,:supplierid);

     

dbms_output.enable;

     

dbms_output.put_line(供应商);结束;

在上面的调用示例中,必须注意,Execute关键字仅在使用SQL命令行提示符时才使用。在使用PLSQL块时,您可以按其名称直接调用Procedure,如下所示。还要注意,如果您有一个OUT参数,则必须将OUT参数传递给Procedure,因为Procedure需要两个参数。参见下面的演示。

declare
 var varchar2(100);
begin
 test( supplierid => 2279, supplier =>var); 
 dbms_output.enable; 
 dbms_output.put_line(var);
End;