gpt4 book ai didi

plsql - PL/SQL block - 简单地查看输出? [一个非常简单的问题,我敢肯定!]

转载 作者:行者123 更新时间:2023-12-04 06:16:04 26 4
gpt4 key购买 nike

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

我想 :

  • 声明一些变量并将它们初始化为特定值
  • 要执行一些选择(由上述变量值预测)并查看结果,就好像我直接在 sqlplus 命令行上执行了结果

  • 我认为有必要使用 block 结构,以便我可以在查询的谓词中声明和使用变量。尽管此处显示的示例在实际情况中非常简单,但还有许多更复杂的 SELECT。

    我试过这样做(暂时忘记谓词)......
    DECLARE
    EMP_EMPLOYEE_ID_IN VARCHAR2(12);
    BEGIN
    EXECUTE IMMEDIATE 'SELECT * FROM DEPT WHERE DEPNO';
    END;
    /

    ...但是当我这样做时,我可以在没有看到输出的情况下执行选择。

    这个我也试过...
    DECLARE
    EMP_EMPLOYEE_ID_IN VARCHAR2(12);
    BEGIN
    SELECT * FROM DEPT;
    END;
    /

    ...但后来我得到...

    PLS-00428:此 SELECT 语句中应有一个 INTO 子句

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

    谁能告诉我如何执行 SELECT,但可以像在 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 block 中打开该游标,您可以在其中访问已声明的变量和所有内容:
    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.

    请注意上面的 refcursor 变量前面带有 : , 这是因为我们将一个 sqlplus 变量绑定(bind)到 PL/SQL 匿名 block 中

    接下来,使用 SQLPLUS 打印命令:
    SQL> print l_cursor

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

    9 rows selected.

    关于plsql - PL/SQL block - 简单地查看输出? [一个非常简单的问题,我敢肯定!],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7238280/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com