Plsql PL/SQL块-简单地查看输出?[我相信这是一个非常简单的问题!]

Plsql PL/SQL块-简单地查看输出?[我相信这是一个非常简单的问题!],plsql,oracle10g,sqlplus,Plsql,Oracle10g,Sqlplus,我确信我想要的很简单,但我不知道怎么做 我想: 声明一些变量并将它们初始化为某些值 要执行由上述变量值预测的许多选择,并查看结果,就好像我在sqlplus命令行上直接执行了结果一样 我认为有必要使用块结构,以便在查询的谓词中声明和使用变量。虽然这里显示的示例在实际案例中非常简单,但有许多更复杂的SELECT 我试着暂时忘记谓词 DECLARE EMP_EMPLOYEE_ID_IN VARCHAR2(12); BEGIN EXECUTE IMMEDIATE 'SELECT * F

我确信我想要的很简单,但我不知道怎么做

我想:

声明一些变量并将它们初始化为某些值 要执行由上述变量值预测的许多选择,并查看结果,就好像我在sqlplus命令行上直接执行了结果一样 我认为有必要使用块结构,以便在查询的谓词中声明和使用变量。虽然这里显示的示例在实际案例中非常简单,但有许多更复杂的SELECT

我试着暂时忘记谓词

DECLARE
    EMP_EMPLOYEE_ID_IN  VARCHAR2(12);
BEGIN
    EXECUTE IMMEDIATE 'SELECT * FROM DEPT WHERE DEPNO';
END;
/
。。。但是当我这样做的时候,我可以执行select而不看到输出

我也试过这个

DECLARE
    EMP_EMPLOYEE_ID_IN  VARCHAR2(12);
BEGIN
    SELECT * FROM DEPT;
END;
/
。。。但是后来我

PLS-00428:此SELECT语句中应包含INTO子句

。。。我真的不想为输出中出现的每一列都声明一个变量

有人能告诉我如何执行SELECTs,但要像在sqlplus命令行上一样简单方便地查看输出,也就是说,要像这样查看相同的输出吗

SQL> SELECT * FROM DEPT;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
谢谢

我现在已经测试了Shannon Severance下面给出的答案,发现它可以满足我的要求

为了以后的读者,我认为在这里展示完整的脚本可能会有用

set line 32000;
set trimspool on;
var V_CURSOR1 REFCURSOR;
var V_CURSOR2 REFCURSOR;
var V_CURSOR3 REFCURSOR;
DECLARE
    DEPT_NUM_IN     VARCHAR2(12);
BEGIN
    DEPT_NUM_IN :=  '10';
    OPEN :V_CURSOR1 FOR SELECT * FROM DEPT;
    OPEN :V_CURSOR2 FOR SELECT * FROM DEPT ORDER BY LOC;
    OPEN :V_CURSOR3 FOR SELECT * FROM DEPT WHERE DEPTNO = DEPT_NUM_IN ORDER BY LOC;
END;
/
print V_CURSOR1
print V_CURSOR2
print V_CURSOR3

与sqlplus相比,其他工具可能有所不同

首先声明一个sqlplus refcursor变量

SQL> var l_cursor refcursor
然后在PL/SQL块中打开该游标,在该块中可以访问已声明的变量和所有内容:

SQL> edit
Wrote file afiedt.buf

  1  declare
  2      l_number number;
  3  begin
  4      open :l_cursor for select table_name from all_tables where rownum < 10;
  5* end;
SQL> /

PL/SQL procedure successfully completed.

看到结果就好像。。。不是PL/SQL块的工作方式。。。绝对不清楚你想达到什么目的…@Yahia-谢谢你的评论,我将编辑问题以使其更清楚-正如我所说的PL/SQL块是完全不同的-你为什么不在没有PL/SQL块的情况下执行选择呢?@Yahia-谢谢你的评论。我会再次编辑这个问题,让它更清楚。谢谢Shannon。我已经在问题中添加了我编写的代码,以在我自己的上下文中测试您的答案,以便以后的读者能够看到完整的解决方案谢谢您的回答。我确实尝试过这个,但是使用SELECT*进入EMP;的v_结果。。。甲骨文说。。。PL/SQL:ORA-00947:值不够。@格劳孔,您必须将v_结果定义为emp%记录类型的记录,然后dbms_输出各个字段。@格劳孔定义v_结果,一切都会正常。见香农的评论Severance@Shannon遣散费:谢谢你的建议。事实上,我脑海中的查询来自非常大的视图和许多列,其形式为“选择c1、c2、c3。。。cn来自v1',因此使用v1%记录类型是不切实际的。我很感激我的例子没有反映出这种复杂程度,但我一直在努力使事情简单化!无论如何,我认为就我的目的而言,使用refcursors的Shannon分离方法效果最好。再次感谢。@Tvitmsvleli:出于某种奇怪的原因,StackOverflow不允许我在前面的评论中提及你和Shannon Severnance。所以我在这篇评论中提到你,这样如果你打开了电子邮件通知,你就可以阅读上面的评论,它是为你准备的,就像是为香农离职准备的一样。希望这有点道理!
SQL> edit
Wrote file afiedt.buf

  1  declare
  2      l_number number;
  3  begin
  4      open :l_cursor for select table_name from all_tables where rownum < 10;
  5* end;
SQL> /

PL/SQL procedure successfully completed.
SQL> print l_cursor

TABLE_NAME
------------------------------
ICOL$
CON$
UNDO$
PROXY_ROLE_DATA$
FILE$
UET$
IND$
SEG$
COL$

9 rows selected.