0
我想在下面的代码中使用动态查询,但出现错误(00900. 00000 - “invalid SQL statement”)。请提出我在代码中错误的地方。00900. 00000 - “无效的SQL语句”EXECUTE IMMEDIATE
create or replace PROCEDURE CreateInsertTmpTable
AS
crttmp VARCHAR2(200);
intrtmp VARCHAR2(200);
printTableValues VARCHAR2(1000);
BEGIN
crttmp := 'CREATE GLOBAL TEMPORARY TABLE my_temp_table ON COMMIT PRESERVE ROWS AS SELECT * FROM VWBLKDATA WHERE 1=0';
EXECUTE IMMEDIATE crttmp;
intrtmp := 'INSERT INTO my_temp_table SELECT * FROM VWBLKDATA';
EXECUTE IMMEDIATE intrtmp;
printTableValues := ' for data in(SELECT * from my_temp_table)
loop
dbms_output.put_line(data.ID);
end loop';
EXECUTE IMMEDIATE printTableValues;
COMMIT;
END CreateInsertTmpTable;
非常感谢@patrick marchand的建议。我尝试了我的代码与开始和结束..它工作,但期望的O/P没有生成(即我想打印全局临时数据)。实际上,我的任务是在SP内部创建GTT,从而借助Dynamic SQL。我只想做一个测试,使用上面的FOR循环打印所有的表格数据,但是数据不会显示在操作中,但脚本成功运行。我请你建议如何使用执行立即打印表格数据。 – PS078
实际上,为了学习的目的,我正在做这个测试,其中我试图实现以下事情从SP 1)创建GTT 2)从现有的视图中插入数据到GTT 3)打印所有的GTT数据。 4)DROP GTT 由于我的SP将执行一个DLL,因此一切都将是动态....请建议ID仍然可以更好的方式在SP内运行DLL。谢谢 – PS078
甚至当我在下面的动态字符串中添加一些子句时,出现错误(PLS-00103),请提示代码中出现了什么问题。 printTableValues:'BEGIN (SELECT * from my_temp_table WHERE LOC ='I') loop dbms_output.put_line(data.ID); end loop; END;'; EXECUTE IMMEDIATE printTableValues; – PS078