выберите * из tab1
Select * от tab2
Вы не можете просто введите select
запрос в PL/SQL
. Он выдаст ошибку PLS-00428: an INTO clause is expected in this SELECT statement
.
Либо вы используете опцию SELECT..INTO
, либо используете CURSORS
. Предложение SELECT INTO используется для извлечения одной строки или набора столбцов. Он используется для хранения возвращенных данных в предопределенные переменные. Для нескольких SELECT вы можете иметь несколько предложений SELECT INTO
, каждое предложение будет хранить результат соответствующего SQL.
Например,
SQL> DECLARE
2 v_ename emp.ename%TYPE;
3 v_empno emp.empno%TYPE;
4 BEGIN
5 SELECT ename INTO v_ename FROM emp WHERE empno = 7369;
6 SELECT empno INTO v_empno FROM emp WHERE ename = 'SCOTT';
7 dbms_output.put_line('SELECT statement 1 returns name =: '||v_ename);
8 dbms_output.put_line('SELECT statement 2 returns emp number =: '||v_empno)
9 END;
10/
SELECT statement 1 returns name =: SMITH
SELECT statement 2 returns emp number =: 7788
PL/SQL procedure successfully completed.
SQL>
Чтобы вернуть несколько строк, вы можете использовать CURSOR
. В вашем случае, с несколькими заявлениями, вы можете иметь два REFCURSOR
.
Например,
SQL> variable v_ref1 refcursor
SQL> variable v_ref2 refcursor
SQL>
SQL> DECLARE
2 v_ref1 sys_refcursor;
3 v_ref2 sys_refcursor;
4 BEGIN
5 OPEN :v_ref1 FOR SELECT empno, ename
6 FROM emp ORDER BY empno
7 FETCH FIRST 5 ROWS ONLY;
8 OPEN :v_ref2 FOR SELECT empno, ename
9 FROM emp ORDER BY empno DESC
10 FETCH FIRST 5 ROWS ONLY;
11 END;
12/
PL/SQL procedure successfully completed.
SQL> print v_ref1
EMPNO ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
SQL> print v_ref2
EMPNO ENAME
---------- ----------
7934 MILLER
7902 FORD
7900 JAMES
7876 ADAMS
7844 TURNER
SQL>
Если вы хотите совместить ResultSet ваших многочисленных SELECT
заявлений, вы могли бы использовать UNION
оператора и иметь его в одном REFCURSOR
. Учитывая, что типы данных столбцов совпадают и находятся в правильном порядке. Это всего лишь пример,
SQL> variable v_ref refcursor
SQL>
SQL> DECLARE
2 v_ref sys_refcursor;
3 BEGIN
4 OPEN :v_ref FOR
5 SELECT empno, DEPTNO FROM emp WHERE ROWNUM <=5
6 UNION ALL
7 SELECT empno, DEPTNO FROM EMP WHERE ROWNUM <=5;
8 END;
9/
PL/SQL procedure successfully completed.
SQL> print v_ref
EMPNO DEPTNO
---------- ----------
7369 20
7499 30
7521 30
7566 20
7654 30
7369 20
7499 30
7521 30
7566 20
7654 30
10 rows selected.
SQL>
Какую версию Oracle вы используете? Это (более или менее) возможно с помощью 12c: https://docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA230 –