公司要将网站的数据库从sql server迁移到oracle中,但是在迁移存储过程时发现了问题
原sql server存储过程是:
CREATE OR REPLACE PROCEDURE usr_call_sellClient @sql1 varchar(3000) AS
begin tran
exec(@sql1)
commit tran但是迁移为oracle时不知道怎么弄了???
因为传入的sql语句可能是select语句,也可能是update语句。请问应该怎么改,谢谢!!!!!

解决方案 »

  1.   


    CREATE OR REPLACE PROCEDURE usr_call_sellClient(mysql IN NVARCHAR2) AS
    ...
    DBMS_SQL.EXECUTE(mysql);
    --或者
    execute immediate mysql;
    ...
      

  2.   


    CREATE OR REPLACE PROCEDURE TEST.YYQPRO(
    i_MYSQL IN NVARCHAR2,
    o_RTN   OUT NUMBER
    )
    IS  --
      VSQL VARCHAR2(500);
      TEST VARCHAR2(50);  CURSOR TESTCUR
      IS
        SELECT * FROM YYQTEST1; BEGIN
       VSQL := i_MYSQL;    execute immediate VSQL;
     END;/
    ------------------------------
    SQL> SET SERVEROUTPUT ON;
    SQL> DECLARE
      2  TSQL VARCHAR(50);
      3  OTN NUMBER;
      4  BEGIN
      5  TSQL := 'SELECT * FROM YYQTEST1';
      6  YYQPRO(TSQL,OTN);
      7  DBMS_OUTPUT.PUT_LINE('OK');
      8  END;
      9  /
    OKPL/SQLプロシージャが正常に完了しました。
      

  3.   


    create or replace package pac_sql
    as
    procedure p_update(sql varchar2);
    procedure p_select(sql varchar2,cur out sys_refcursor);
    end;create or replace package pac_sql
    as
    procedure p_update(sql varchar2)
    as
    begin
    execute immediate sql;
    end p_update;
    procedure p_select(sql varchar2,cur out sys_refcursor)
    as
    begin
    open cur for sql;
    end p_select;
    end;CREATE OR REPLACE PROCEDURE usr_call_sellClient (sql1 varchar2) 
    AS
    cur sys_refcursor;
    begin 
    if substr(sql1,1,6)='select' then
    pac_sql.p_select(sql1,cur);
    .....;
    elsif substr(sql1,1,6)='update' then
    pac_sql.p_update(sql1);
    commit;
    end if;
    end;