在Oracle存储过程中CREATE OR REPLACE PROCEDURE prc_1
AS CURSOR c_1
IS
SELECT *
FROM a1;
v_1 c_1%rowtype;
v_exec_sql varchar2(3000);
BEGIN
open c_1;
LOOP
fetch c_1 into v_1;
Exit when c_1%NOTFOUND;
v_exec_sql := lv_corp_rqueue.CUSTOMER_SQL; --从a1表中读到一个动态sql
execute immediate v_exec_sql; 执行这个动态sql END LOOP; CLOSE c_1;
COMMIT;END;
/过程执行总是会出错,动态sql中肯定有单引号,譬如inert into xxx(xxx1,xxx2) values('1','2')
我怀疑是单引号出现的问题
请问这个问题该如何处理?
急等!
AS CURSOR c_1
IS
SELECT *
FROM a1;
v_1 c_1%rowtype;
v_exec_sql varchar2(3000);
BEGIN
open c_1;
LOOP
fetch c_1 into v_1;
Exit when c_1%NOTFOUND;
v_exec_sql := lv_corp_rqueue.CUSTOMER_SQL; --从a1表中读到一个动态sql
execute immediate v_exec_sql; 执行这个动态sql END LOOP; CLOSE c_1;
COMMIT;END;
/过程执行总是会出错,动态sql中肯定有单引号,譬如inert into xxx(xxx1,xxx2) values('1','2')
我怀疑是单引号出现的问题
请问这个问题该如何处理?
急等!
execute immediate v_exec_sql;
两个单引号转义成一个单引号。
看看到底是什么不就行了
或者把dbms_output.put_line(v_exec_sql);看看.....
...
fetch c_1 into v_1;
Exit when c_1%NOTFOUND;
v_exec_sql := replace(lv_corp_rqueue.CUSTOMER_SQL,'''',''''''); --从a1表中读到一个动态sql
...
请大家再帮忙看看:)
输出看看
是否是语句的问题
还有就是加上
exception when others then
dbms_output.put_line(sqlerrm);
把错误信息也输出看看。
数据类型应该是 v_1 a1%rowtype;
dbms_output.put_line(v_exec_sql);这个语句就出错了,提示ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line
用pl/sql developer单步调试一下看看
有解决办法吗?