Plsql 使用变量时将PL/SQL查询结果输出为选项卡式结果集

Plsql 使用变量时将PL/SQL查询结果输出为选项卡式结果集,plsql,constants,resultset,plsqldeveloper,Plsql,Constants,Resultset,Plsqldeveloper,我正在尝试做一些在PL/SQL开发人员中看似简单但却无法实现的事情。如果我打开一个“SQL窗口”并运行一系列如下所示的SELECT语句,它将在同一窗口的底部显示为选项卡式结果集 SELECT * FROM t1 WHERE r1 = 'xyz'; SELECT * FROM t2 WHERE r1 = 'xyz'; 但是,如果我想将'xyz'声明为变量,我必须使用declare和BEGIN-END块,这意味着我现在必须将用于,否则它会发出呻吟。因此,我尝试了各种方法,得出了以下结论: DECL

我正在尝试做一些在PL/SQL开发人员中看似简单但却无法实现的事情。如果我打开一个“SQL窗口”并运行一系列如下所示的
SELECT
语句,它将在同一窗口的底部显示为选项卡式结果集

SELECT * FROM t1 WHERE r1 = 'xyz';
SELECT * FROM t2 WHERE r1 = 'xyz';
但是,如果我想将
'xyz'
声明为变量,我必须使用
declare
BEGIN-END
块,这意味着我现在必须将
用于
,否则它会发出呻吟。因此,我尝试了各种方法,得出了以下结论:

DECLARE
    val VARCHAR(10) := 'xyz';
    CURSOR c1 IS SELECT * FROM t1 WHERE r1 = val;
    CURSOR c2 IS SELECT * FROM t2 WHERE r1 = val;
    TYPE c1_type IS TABLE OF c1%ROWTYPE;
    TYPE c2_type IS TABLE OF c2%ROWTYPE;
    rec1 c1_type;
    rec2 c2_type;
BEGIN
    OPEN c1;
    FETCH c1 BULK COLLECT INTO rec1;

    FOR i IN 1..rec1.count LOOP
        dbms_output.put_line(rec1(i).col1||' 'rec1(i).col2);
    END LOOP;

    OPEN c2;
    FETCH c2 BULK COLLECT INTO rec2;

    FOR j IN 1..rec2.count LOOP
        dbms_output.put_line(rec2(j).col1||' 'rec2(j).col2);
    END LOOP;
END
然而,这意味着我必须知道t1和t2的所有列名,它以文本格式而不是窗口底部的尼斯输出表输出结果


有没有一种简单的方法可以使结果在SQL窗口的底部显示为带选项卡的结果集,并且仍然允许我声明在整个查询过程中使用的变量?

SQL窗口,您所指的编辑器,SQL*PLUS或..?抱歉,它在PL/SQL Developer中。不过,您的最终目标仍然很模糊。PL/SQL块不会产生类似查询的输出。这根本不是它的设计目的。如果需要对
r1='xyz'
谓词的右侧使用不同的值运行这两个查询,或者使用相同的值(以消除重复工作),请使用替换变量-
r1='&variable\u name'
。系统将提示您输入
变量名的实际值。不过,在SQL*PLUS中,要同时运行这两个查询,必须使用
define
命令显式定义替换变量。啊,好的,
&variable\u name
起作用,第一次输入的值将保留在同一会话中后续运行的查询中。但是,有没有办法在顶部对其进行编码,以便其他格式和上下文的用户能够清楚地看到,而不是得到“随机”提示?或者这就是我应该安装SQL*PLUS并使用
DEFINE
命令的一个很好的原因?