【问题标题】:Getting error while running a Stored Procedure运行存储过程时出错
【发布时间】:2013-10-12 07:34:32
【问题描述】:

表结构

Name     Null Type         
-------- ---- ------------ 
EMP_NO        NUMBER       
EMP_NAME      VARCHAR2(30) 
ADDRESS       VARCHAR2(15) 
PH_NO         NUMBER(10)   
DPT_NO        NUMBER       

程序

create or replace procedure procedure1 (nom in employees.emp_no%type,
                                      vemp_name out employees.emp_name%type)
is                               
begin
    select emp_name into vemp_name from employees where emp_no=nom; 
end;

致电

exec procedure1(1);

显示错误

错误

PLS-00306: wrong number or types of arguments in call to 'PROCEDURE1'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

我不知道为什么它会显示该错误。请给我建议。

【问题讨论】:

    标签: oracle stored-procedures plsql oracle11g


    【解决方案1】:

    错误信息很容易理解。这是简单的数学。您的程序有两个参数;你的电话只通过一个。

    要解决这个问题,您需要传递一个变量来接收 out 参数:

    var n varchar2(30)   
    
    exec procedure1(1, :n)
    
    print n
    

    注意我们在 SQL 或 PL/SQL 中引用 SQL*Plus 变量时需要使用的冒号。


    “执行你的代码后出现错误错误报告:”

    嗯,要么您没有执行我的代码,要么您的代码与您在问题中发布的内容不匹配。

    这是您的表格...

    SQL> create table employees ( 
      2    EMP_NO        NUMBER       
      3    ,EMP_NAME      VARCHAR2(30) 
      4    ,ADDRESS       VARCHAR2(15) 
      5    ,PH_NO         NUMBER(10)   
      6    ,DPT_NO        NUMBER )
      7    ;
    
    Table created.
    
    SQL> insert into employees values (1, 'MR KNOX', 'LONDON', 23, 10)
       2 /
    
    1 row created.
    
    
    SQL> insert into employees values (2, 'FOX IN SOX', 'BOSTON', 42, 20)
       2 /
    
    1 row created.
    
    SQL>
    

    这是您提出的程序......

    SQL> create or replace procedure procedure1 (nom in employees.emp_no%type,
       2                                      vemp_name out employees.emp_name%type)
       3 is                               
       4 begin
       5    select emp_name into vemp_name from employees where emp_no=nom; 
       6 end;  
       7  /
    
    Procedure created.
    
    SQL>
    

    这是我如何调用它的演示:

    SQL> var n varchar2(30)   
    
    SQL> exec procedure1(1, :n)
    
    PL/SQL procedure successfully completed.
    
    SQL>  print n
    N
    --------------------------------------------------------------------------------
    MR KNOX
    
    SQL> exec procedure1(2, :n)
    
    PL/SQL procedure successfully completed.
    
    SQL>  print n
    
    
    N
    --------------------------------------------------------------------------------
    FOX IN SOX
    
    SQL> 
    

    【讨论】:

    • 我在想如果给一个 emp_name 那么它会显示 emp_name。有没有可能。如果有可能那么请给出代码
    • 我不明白你的评论。如果我的解决方案不能按您希望的方式工作,请编辑您的问题并阐明您的实际要求,或许可以提供一些示例数据和所需的输出。
    • 在存储过程中如果给出 emp_no 那么在执行这些过程时它将显示 emp_name 要求 INPUT: emp_no(like 1,2,3...) Output:emp_name's(like Jim,Scott...)
    • 你明白我的要求了吗...?
    • 该要求是一个完全不同的程序。您应该将其作为一个新问题提出。
    猜你喜欢
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多