求助,请帮忙看看这个存储过程如何调用这个为了在执行insert的时候返回rowidCREATE or REPLACE procedure getRowidAfterInsert(
 v_sql varchar2,
 v_rid out varchar2
 )
 as
 v_newsql varchar(8000);
 rid varchar2(30);
 begin
 v_newsql:=v_sql||' return rowid into :rid';
 EXECUTE IMMEDIATE v_newsql returning INTO rid;
 v_rid:=rid;
 end getRowidAfterInsert;
/我这样执行会出错
exec getRowidAfterInsert('insert into scott.emp(empno) values(1)',:rid);SP2-0552: 未说明结合变量"RID"请问改如何解决啊

解决方案 »

  1.   

    set serveroutput on;
    declare 
    rid varchar2(200);
    begin
      getRowidAfterInsert('insert into scott.emp(empno) values(1)',rid);
      dbms_output.put_line(rid);
    end
      

  2.   

    在oracle的命令窗口,依次执行:
    VAR rid varchar2(30);
    exec getRowidAfterInsert('insert into scott.emp(empno) values(1)',:rid); 
    print rid;
      

  3.   


    这个会报错declare
    *
    ERROR 位于第 1 行:
    ORA-01008: 并非所有变量都已关联
    ORA-06512: 在"SCOTT.GETROWIDAFTERINSERT", line 10
    ORA-06512: 在line 4之后又反复试了几次,还是会报错,但是错误变了。。
    end
      *
    ERROR 位于第 6 行:
    ORA-06550: 第 6 行, 第 3 列:
    PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
    ; <an identifier>
    <a double-quoted delimited-identifier>
    符号 ";" 被替换为 "end-of-file" 后继续。感谢回帖。
      

  4.   

    SQL> ed
    Wrote file afiedt.buf  1  CREATE or REPLACE procedure getRowidAfterInsert(
      2  v_sql varchar2,
      3  v_rid out varchar2
      4  )
      5  as
      6  v_newsql varchar(8000);
      7  rid varchar2(30);
      8  begin
      9  v_newsql:=v_sql||' return rowid into :rid';
     10  EXECUTE IMMEDIATE v_newsql returning INTO rid;
     11  v_rid:=rid;
     12* end getRowidAfterInsert;
    SQL> /Procedure created.SQL> set serveroutput on;
    SQL> ed
    Wrote file afiedt.buf  1  declare
      2  rid varchar2(200);
      3  begin
      4    getRowidAfterInsert('insert into scott.emp(empno) values(1)',rid);
      5    dbms_output.put_line(rid);
      6* end;
    SQL> /
    AAAMfPAAEAAAAAfAAAPL/SQL procedure successfully completed.仅仅是丢掉了;而已,