Oracle SQL 开发人员 - 显示查询结果的脚本输出

Oracle SQL Developer - Script Output with Query result displayed

无法取回 PL/SQL 脚本的查询结果。它在下午早些时候运行良好,但可能出了点问题,现在结果已经从屏幕上消失了。我应该怎么办? 谢谢!

虚拟查询只是一个示例,即使我还应该将 DUMMY 作为列 header 并将 X 作为“查询结果”选项卡中的唯一记录。事实上,我的脚本如下所示并且有效但没有提供可见数据,因为“查询结果”已经消失。在重新安装 Oracle SQL Dev 之前,我想知道是否存在解决这一点的技巧,到目前为止我还没有发现任何有价值的修复。

declare
    v_tab varchar( 30 ):= 'MD_ALL_DETAIL_';
    v_date1 varchar( 30 ):= '0827D';
    v_date2 varchar( 30 ):= '0830';
    v_tab1 varchar( 30 );
    v_tab2 varchar( 30 );
    v_sql varchar( 2000 );
begin
    v_tab1 := v_tab || v_date1;
    v_tab2 := v_tab || v_date2;
    v_sql := '
with tab as(    
    select ' || v_date1 || ' flag, md1.*
    from ' || v_tab1 || ' md1
    union all
    select ' || v_date2 || ' flag, md2.*
    from ' || v_tab2 || ' md2
), tab2 as (    
select *    
from(   
    select tab.flag, tab.cat_mk_code, tab.cat_mk_iden, tab.b_entity_code, tab.b_entity_iden, tab.cat_be_code, tab.cat_be_iden, tab.bucket_code, tab.
    bucket_iden, tab.m_entity_code, tab.application_code, tab.indicator_code, tab.indicator_iden, tab.measure_value, tab.user_code, tab.lock_flag,
    tab.alter_date, tab.table_name
    from tab
)pivot( 
    sum( measure_value )
    for flag
    in( ' || v_date1 || ' as MEASURE_0, ' || v_date2 || ' as MEASURE_1 )
) ) 
select * from tab2 where MEASURE_0<>MEASURE_1';
    execute immediate v_sql;
end;'

此代码(在屏幕截图中)不执行任何操作,因此您收到的消息(“PL/SQL 程序已成功完成”)就是您所期望的。

运行 例如

select * from dual;

和SQL开发者会自动打开缺失“查询结果”选项卡。


如果你想“显示”动态 SQL 的结果,你必须 select 它 东西。一个简单的例子:

看到了吗?我 select 来自 DUAL (正如您最初的查询所做的那样)INTO 一个局部变量。结果显示在 脚本输出 选项卡中。

您的“新”代码使用更复杂的查询,可能返回多个 column/row,因此您不能 select 到标量变量中。我假设您必须创建一个 TYPE,声明一个局部变量(可能是一个集合),然后对结果执行 某事

https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/executeimmediate_statement.htm#LNPLS01317

如果 dynamic_sql_statement 是一个 SELECT 语句,并且您省略了 into_clause 和 bulk_collect_into_clause,那么 execute_immediate_statement 永远不会执行。 例如,此语句从不递增序列:

立即执行'SELECT S.NEXTVAL FROM DUAL'