【问题标题】:How to execute this Stored Procedure in oracle?如何在 oracle 中执行这个存储过程?
【发布时间】:2017-06-19 07:31:24
【问题描述】:
   EXEC USP_USER_INSERT (P_ID = '2', P_FIRST_NAME = 'A', P_LAST_NAME = 'BALAJI', P_SALARY = '50000', P_CITY = 'CHENNAI');

EXEC USP_USER_INSERT @P_ID = '2', @P_FIRST_NAME = 'A', @P_LAST_NAME = 'BALAJI', @P_SALARY = '50000', @P_CITY = 'CHENNAI';

Both are showing error, how to call this SP.








create or replace procedure USP_USER_INSERT 
    ( 
      P_FIRST_NAME in varchar default null,
      P_LAST_NAME  in varchar default null, 
      P_SALARY   in   number default null, 
      P_CITY      in  varchar default null, 
      P_EMAIL_ID  in  varchar default null, 
      P_EMP_ID   in   number default null, 
      P_ADDED_BY  in  number default null, 
      P_WINDOWS_ID in varchar2 default null, 
      P_USER_TYPE  in number default null, 
      P_PASSWORD  in  varchar2 default null, 
      P_ROLE     in   varchar2 default null,
      RES OUT SYS_REFCURSOR
    ) 
    as 
    P_ID NUMBER;
      begin 

      select NVL(max(ID),0)+1 into P_ID from USER_MASTER ;

          insert into USER_MASTER 
                      (
                        ID,FIRST_NAME, 
                        LAST_NAME, 
                        SALARY, 
                        CITY, 
                        EMAIL_ID, 
                        EMP_ID, 
                        ADDED_ON, 
                        ADDED_BY, 
                        WINDOWS_ID, 
                        IS_ACTIVE, 
                        USER_TYPE, 
                        PASSWORD, 
                        role
                       ) 
          values      ( 
                        P_ID,P_FIRST_NAME, 
                        P_LAST_NAME, 
                        P_SALARY, 
                        P_CITY, 
                        P_EMAIL_ID, 
                        P_EMP_ID, 
                        Systimestamp, 
                        P_ADDED_BY, 
                        P_WINDOWS_ID, 
                        1, 
                        P_USER_TYPE, 
                        P_PASSWORD, 
                        P_ROLE
                      );

      open RES for
      SELECT P_ID "P_ID" FROM DUAL;                    

      END;

【问题讨论】:

    标签: oracle stored-procedures exec calling-convention


    【解决方案1】:

    定义一个游标绑定变量,然后将过程调用包装在一个匿名 PL/SQL 块中:

    VARIABLE cur REFCURSOR;
    
    BEGIN
      USP_USER_INSERT (
        P_EMP_ID     => '2',      -- P_ID is not an argument to the procedure
        P_FIRST_NAME => 'A',
        P_LAST_NAME  => 'BALAJI',
        P_SALARY     => '50000',
        P_CITY       => 'CHENNAI',
        RES          => :cur
      );
    END;
    /
    
    PRINT cur;
    

    【讨论】:

    • 我的 sp 是否正确,我可以通过调用它来将新用户存储在表中吗??
    • @karan 我没有尝试编译它,但我看不到任何明显导致它无法编译的东西。最简单的检查方法是尝试编译它并让数据库使用SHOW ERRORS; 告诉您任何错误。
    • @karan 你的方式应该可行,但我会做一些稍微不同的事情,并使用一个序列来生成下一个 id 数字并且不会返回游标,而只是使用 OUT 参数返回 id .
    • 错误报告 - ORA-06550:第 8 行,第 9 列:PLS-00103:在预期以下情况之一时遇到符号“OUT”:. ( ) , * @ % & = - + at in is mod 余数 not rem => or != or ~= >= and or like2 like4 likec之间 || multiset member submultiset 符号“.”被替换为“OUT”继续。 06550. 00000 - “行 %s,列 %s:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:CUR ------
    • @karan 更新了 - 你试过自己调试吗?
    【解决方案2】:

    试试这个

    过程没有返回值,如果需要可以使用函数

    exec USP_USER_INSERT ( par1,par2,....)
    

    【讨论】:

    • 从第 2 行开始的错误命令 - EXEC USP_USER_INSERT (P_ID = '2', P_FIRST_NAME = 'AZHAKU', P_LAST_NAME = 'BALAJI', P_SALARY = '50000', P_CITY = 'CHENNAI')错误报告 - ORA-06550:第 1 行,第 24 列:PLS-00201:必须声明标识符 'P_ID' ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略 06550。00000 -“行 %s,列%s:\n%s" *原因:通常是 PL/SQL 编译错误。 *行动
    • p_id 不是您应该发送的参数。
    • 尝试不发送 p_id 也仍然得到同样的错误
    【解决方案3】:

    如果你在命令行上运行它,你应该在 sql 代码的末尾有 /。

    如果 2 是 varchar 则尝试使用单引号,否则保持原样, EXEC USP_USER_INSERT '2','A','BALAJI','50000','CHENNAI'

    【讨论】:

    • 我在询问如何调用或执行该过程。谢谢。
    • 已经试过了——得到 pl/sql 编译错误。我的 sp 正确吗?我可以通过调用它来将新用户存储在表中吗??
    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    相关资源
    最近更新 更多