2015-01-09 2 views
0

오라클에 여러 개의 select 문을 포함하는 간단한 저장 프로 시저를 작성하고 싶습니다. 내가 당신이 목적을 위해 커서를 사용할 수 있습니다오라클의 다중 select 문

+0

어떤 오라클 버전을 사용하고 있습니까? 이것은 12c에서 가능합니다. https://docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA230 –

답변

2

선택 * TAB1에서

선택 *

당신은 할 수 없습니다 PL/SQLselect 검색어 만 있으면됩니다. 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 가질 수 있습니다. 당신이 당신의 여러 SELECT 문의 결과 집합을 결합하려는 경우 예를 들어

,

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> 

, 당신은 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> 
+0

12c에서 실제로 여러 가지 결과를 가질 수 있습니다 (예 : https : //). docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA230 –

+0

감사 인사는 매력처럼 작동했습니다. –

+0

여러분을 환영합니다! –

0

또는 SQL 서버에서 수행 한 오라클에서 같은 해당 저장 프로 시저를 작성하는 방법을 알고 싶어

Create proc spc_name 
as 
begin 
select * from tab1 

Select * from tab2 
...... 
end 

같은 SQL 서버에서 같은 작업을 수행 할 수 있습니다 . 샘플 예의 경우 this 또는 this을 확인하십시오.

저장 프로 시저에서 여러 개의 커서를 선언 할 수 있습니다. 당신은 아마 당신이 this URL을 참조 할 수 있습니다 자바 오라클 Stroed PROC 결과 가져 오기하려면

또는 TAB2에서이 Stack Overflow answer