目前需要创建一个存储过程
用来更新指定数据表的指定字段值,在开发里急需用到
想法差不多是如下: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有没类似的函数?
谢谢
用来更新指定数据表的指定字段值,在开发里急需用到
想法差不多是如下: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有没类似的函数?
谢谢
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;
执行时报错,请问是不是版本用不了execute?我这边ORACLE版本是9.0
那试试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;