当你运行你的问题的匿名PL/SQL块的块编译和执行OK,但动态查询isn't actually being executed:
如果dynamic_sql_statement是一个SELECT语句,你省略这两个into_clause和bulk_collect_into_clause,然后execute_immediate_statement从不执行。
如果你很高兴刚才看到的结果在脚本输出窗口,你可以使用variable
和print
SQL Developer的客户端命令,让你的块打开一个REF CURSOR作为绑定变量:
var rc refcursor
declare
MyStatement varchar(300) := 'SELECT * FROM MYTABLE';
begin
open :rc for MyStatement;
end;
/
print rc
绑定光标方法可以从其他客户端使用,例如来自使用JDBC的Java应用程序。和12c adds a mechanism to simplify that a bit,但只能从存储过程 - 不是匿名块。尽管(尽管您的SQL Developer版本支持这种机制),但脚本输出窗口中仍然只有see the results。
我不认为有什么办法可以从SQL Developer查询结果窗口中的匿名块中运行动态查询得到结果,因为SQL Developer没有运行查询 - 它发生在PL/SQL内部上下文在服务器上。
您可能会使用函数来代替返回流水线集合,然后查询该函数 - 但事先必须知道集合类型,这会限制查询的真实动态方式,因为列名称和选择列表中的数据类型必须与对象类型匹配。
很难说出什么建议,因为您的示例不需要是动态的。现实世界的情景可能会提出其他方法。它仍然不是你想要的查询结果窗口,但是如果你确实有这样的功能;
drop function myfunc;
create function myfunc return sys_refcursor
as
MyStatement varchar(300) := 'SELECT * FROM MYTABLE';
MyRefCursor sys_refcursor;
begin
open MyRefCursor for MyStatement;
return MyRefCursor;
end;
/
然后你可以从对象浏览器(在连接下,在左边的窗格中)打开函数。从那里你可以点击绿色的triange(或点击control-F10)来运行该功能。这就给了你一个预填充匿名块窗口调用的函数:
当您单击确定动态查询结果将显示在“输出变量”部分结束了(使用针对该查询在这种情况下,员工表):
,虽然不能导出,或对其进行排序,例如输出还不如查询结果窗口灵活。但它在一个很好的网格中...
PL/SQL块在服务器上执行,无法直接输出到客户端的查询结果窗口。在脚本输出中是否有你不想要的原因(顺便说一句,这可以比答案更容易完成)?您需要跳过更多的箍环才能将其加入查询结果中。 –