我确定我想要的很简单,但我无法弄明白。
我想:
我认为有必要使用块结构,以便我可以在查询的谓词中声明和使用变量。虽然这里显示的例子在实际情况下非常简单,但是有许多复杂的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
答案 0 :(得分:3)
从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.
请注意,refcursor变量前面加上:
,这是因为我们将sqlplus变量绑定到PL / SQL匿名块
接下来,使用SQLPLUS打印命令:
SQL> print l_cursor
TABLE_NAME
------------------------------
ICOL$
CON$
UNDO$
PROXY_ROLE_DATA$
FILE$
UET$
IND$
SEG$
COL$
9 rows selected.
答案 1 :(得分:0)
DECLARE
v_result VARCHAR2(400);
BEGIN
SELECT dummy
INTO v_result
FROM dual;
dbms_output.put_line(v_result);
END;