目前需要创建一个存储过程
用来更新指定数据表的指定字段值,在开发里急需用到
想法差不多是如下:CREATE OR REPLACE procedure CURSOR_TRAN(P_TABLE_NAME VARCHAR2,P_KEY VARCHAR2,P_KEY_VALUE VARCHAR2,P_ROW VARCHAR2,P_ROW_VALUE VARCHAR2) is
BEGIN
EXEC('UPDATE '||P_TABLE_NAME||' SET '||P_ROW||' = '''||P_ROW_VALUE''' WHERE P_KEY = '''||P_KEY_VALUE||'''');
END;或者在程序就构造好SQL语句存在变量 P_SQL然后执行,就不用存储过程了
可是EXEC()在PL/SQL怎么好像用不到,是不是SQL SERVER2000才能用的?PL/SQL有没类似的函数?
谢谢

解决方案 »

  1.   

    例如create or replace procedure emp_proc(
      p_tableName in varchar2,
      p_key in varchar2,
      p_value in varchar2)
    as
      l_sqlstr varchar2(100);
    begin
      l_sqlstr := 'update ' || p_tableName || ' set ' || p_key || ' = ''' || p_value || '''';
      dbms_output.put_line(l_sqlstr);
      execute immediate l_sqlstr;
    end;
      

  2.   


    执行时报错,请问是不是版本用不了execute?我这边ORACLE版本是9.0
      

  3.   

    具体报什么错呢?不清楚9i支持不支持execute immediate,不过这个确实是某个版本之后新加的功能。
    那试试dbms_sql吧。create or replace procedure emp_proc(
      p_tableName in varchar2,
      p_key in varchar2,
      p_value in varchar2)
    as
      l_cursor number;
      l_result number;
      l_sqlstr varchar2(100);
    begin
      l_sqlstr := 'update ' || p_tableName || ' set ' || p_key || ' = ''' || p_value || '''';
      dbms_output.put_line(l_sqlstr);
      --execute immediate l_sqlstr;
      l_cursor := dbms_sql.open_cursor;
      dbms_sql.parse(l_cursor, l_sqlstr, dbms_sql.native);
      l_result := dbms_sql.execute(l_cursor);
      dbms_sql.close_cursor(l_cursor);
    end;
      

  4.   

    要定义SQL语句成变量,然后拼接吧,恩,后面要 execute immediate SQL变量。