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