哈哈,我这样用过,挺不错的。先写个存储过程,只有一句代码:
create or replace procedure exe_pl_sql (v_sql_block in varchar2);
begin
execute immediate v_sql_block;
end;
然后,在客户端拼出PL/SQL程序段,
strPl_Sql:=' BEGIN ';
strPl_Sql:=strPl_Sql+'INSERT .... ; '; //别忘了带个‘;’
strPl_Sql:=strPl_Sql+'UPDATE .... ; ';
strPl_Sql:=strPl_Sql+'DELETE .... ; ';
........
//最后一句
strPl_Sql:=strPl_Sql+' COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK;RAISE;END;';//OK,PL/SQL拼完了,用存储过程控件执行吧!
with StoredProc_pub do
begin
Params.Clear;
StoredProcName := ' exe_pl_sql';
Params.CreateParam(ftString, 'v_sql_block', ptInput);
Params[0].AsString :=strPl_Sql ;
StoredProc_pub.ExecProc;
end;这个办法不太地道,但很好使,控制事务也很简单!
create or replace procedure exe_pl_sql (v_sql_block in varchar2);
begin
execute immediate v_sql_block;
end;
然后,在客户端拼出PL/SQL程序段,
strPl_Sql:=' BEGIN ';
strPl_Sql:=strPl_Sql+'INSERT .... ; '; //别忘了带个‘;’
strPl_Sql:=strPl_Sql+'UPDATE .... ; ';
strPl_Sql:=strPl_Sql+'DELETE .... ; ';
........
//最后一句
strPl_Sql:=strPl_Sql+' COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK;RAISE;END;';//OK,PL/SQL拼完了,用存储过程控件执行吧!
with StoredProc_pub do
begin
Params.Clear;
StoredProcName := ' exe_pl_sql';
Params.CreateParam(ftString, 'v_sql_block', ptInput);
Params[0].AsString :=strPl_Sql ;
StoredProc_pub.ExecProc;
end;这个办法不太地道,但很好使,控制事务也很简单!
解决方案 »
- SQL行转列问题求解,实在是想不出解决办法了,请高手们帮忙!谢谢!
- ORA-01031: insufficient privileges
- Oracle的DMP文件导入后,原来的procedure什么的还会有吗?
- RAC配置过程中出现的问题!
- ORACLE,绝对有技术含量的问题。高手请进
- 急,高分悬赏(100分)数据同步问题!
- 数据库索引
- update HR_DEGREE set id = ( select SEQ_HR_DEGREE_ID.nextval from dual );的问题
- 请问:oracle8i中字符集和国家字符集有什么区别
- IT屌丝,到底有没有必要去考OCP?
- 请教从SQL SERVER复制一个表ORACLE,该怎么办呢?焦急的在线等待中
- !!!!!高分求解SQL文. 欢迎大家讨论,来者有分.
with StoredProc_pub do
begin
Params.Clear;
StoredProcName := ' exe_pl_sql';
Params.CreateParam(ftString, 'v_sql_block', ptInput);
Params[0].AsString :=Memo1.Text;
StoredProc_pub.ExecProc;
end;
为什么?
strPl_Sql :string; for i:=0 to memo1.Lines.Count -1 do
strPl_Sql :=strPl_Sql +memo1.Lines[i];
Memo1.text:=StringReplace(Memo1.Text,#$D,' ',[rfReplaceAll]);
Memo1.text:=StringReplace(Memo1.Text,#$A,' ',[rfReplaceAll]);
天哪!谁还有好办法!
begin
v_sql_block :=replace(v_sql_block ,chr(13)||chr(10),'');
execute immediate v_sql_block;
end;