最好自己去找資料,不同的版本的對動態SQL語句的支持不一樣的。這是我寫的一個例子,ORACLE817 SQL_TEXT:='UPDATE CM_PART_ST_MATERIAL_COST SET ASSIGN_REFER_VALUE= A' CUR_ID:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(CUR_ID,SQL_TEXT,DBMS_SQL.NATIVE); STAT:=DBMS_SQL.EXECUTE(CUR_ID); DBMS_SQL.CLOSE_CURSOR(CUR_ID);
一个动态sql的例子,参考: --oracle 817create or replace function test return varchar2 as v_cursor number; v_string varchar2(200); v_row number; begin v_cursor:=dbms_sql.open_cursor; v_string:='create table testdb (text varchar2(200))'; dbms_sql.parse(v_cursor,v_string,dbms_sql.native); v_row:=dbms_sql.execute(v_cursor); dbms_sql.close_cursor(v_cursor); return ('成功执行'||v_row||'行!'); exception when others then dbms_sql.close_cursor(v_cursor); return ('执行失败!'||sqlcode||sqlerrm); raise; end;
SQL_TEXT:='UPDATE CM_PART_ST_MATERIAL_COST SET ASSIGN_REFER_VALUE= A'
CUR_ID:=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(CUR_ID,SQL_TEXT,DBMS_SQL.NATIVE);
STAT:=DBMS_SQL.EXECUTE(CUR_ID);
DBMS_SQL.CLOSE_CURSOR(CUR_ID);
--oracle 817create or replace function test return varchar2 as
v_cursor number;
v_string varchar2(200);
v_row number;
begin
v_cursor:=dbms_sql.open_cursor;
v_string:='create table testdb (text varchar2(200))';
dbms_sql.parse(v_cursor,v_string,dbms_sql.native);
v_row:=dbms_sql.execute(v_cursor);
dbms_sql.close_cursor(v_cursor);
return ('成功执行'||v_row||'行!');
exception
when others then
dbms_sql.close_cursor(v_cursor);
return ('执行失败!'||sqlcode||sqlerrm);
raise;
end;