功能描述:创建一个过程,通过动态SQL语句实现动态查询
代码:
CREATE OR REPLACE PROCEDURE PRO_EMP(E_ID NUMBER)
AS
BEGIN
  DECLARE
   V_NAME EMP.EMPNO%TYPE;
   V_SAL EMP.SAL%TYPE;
  BEGIN
  EXECUTE IMMEDIATE 'SELECT ENAME,SAL FROM EMP WHERE EMPNO=:1' USING E_ID RETURNING INTO V_NAME,V_SAL; 
   DBMS_OUTPUT.PUT_LINE(V_NAME||'的薪水为'||V_SAL);
  END;
END;
/
问题描述:过程创建成功,但执行报错。
执行代码:EXECUTE PRO_EMP(7499);
错误提示:
ORA-06547: INSERT,UPDATE,或 DELETE  语句必须使用 RETURNING 子句
ORA-06512: 在"SCOTT.PRO_EMP", line 8
ORA-06512: 在line 1
********************************************
所以为问题全部描述,望大家帮忙找错,谢谢!

解决方案 »

  1.   

    returning   是在update ,delete ,insert 语句中的....
      

  2.   

    1)感谢你的帮助。。谢谢
    2)我所知道是(有关书籍也介绍过) returning into 语句作用于DML。
       而DML语句是包含SELECT语句的,错误提示我明白,可我想知道是,实践和书籍上说的是不是相同·!如果两者没有冲突,那么我的这个问题是什么原因!?
    3)继续期待ING  谢谢大家!
      

  3.   

    CREATE OR REPLACE PROCEDURE PRO_EMP(E_ID NUMBER)
    AS
    BEGIN
      DECLARE
       V_NAME EMP.EMPNO%TYPE;
       V_SAL EMP.SAL%TYPE;
      BEGIN
      EXECUTE IMMEDIATE 'SELECT ENAME,SAL FROM EMP WHERE EMPNO=:1'  INTO V_NAME,V_SAL USING E_ID;  
       DBMS_OUTPUT.PUT_LINE(V_NAME||'的薪水为'||V_SAL);
      END;
    END;
    /
      

  4.   

    应该用into, 而不是returning
      

  5.   

    TO :waterfirer(水清) sozdream() 
    1)感谢两位的帮助
    2)按照waterfirer(水清) 的修改后运行已久有错误但错误以改变
    错误提示:
    ORA-01722: 无效数字
    ORA-06512: 在"SCOTT.PRO_EMP", line 8
    ORA-06512: 在line 1
    3)into 与returning into  有什么区别么?
      

  6.   

    问题已经解决
    1)应该用 into 而不是 returning into 因为returning子句作用于insert,update,delete,上而select则不行!
    2)产生无效数字错误是 变类型定义错误 为手误!
    谢谢大家!