Я уверен, что то, что я хочу, очень просто, но я не могу понять, как.
Я хочу:
- Чтобы объявить некоторые переменные и инициализировать их для определенных значений
- Чтобы выполнить несколько выборок (основанных на указанных выше значениях переменных) и увидеть результаты, как если бы я выполнил результаты прямо в командной строке sqlplus
Я считаю, что необходимо использоватьструктура блока для того, чтобы я мог объявлять и использовать переменные в предикатах запросов.Хотя примеры, показанные здесь, довольно просты в реальном случае, существует множество, гораздо более сложных 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;
/
... но потом яget ...
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
Спасибо
Я проверил ответ Шеннона Северанса ниже и обнаружил, что он будет делать то, что я хочу.
Ради более поздних читателей я подумал, что было бы полезно показать полный сценарий здесь.
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