오라클에 여러 개의 select 문을 포함하는 간단한 저장 프로 시저를 작성하고 싶습니다. 내가 당신이 목적을 위해 커서를 사용할 수 있습니다오라클의 다중 select 문
답변
선택 * TAB1에서
선택 *
당신은 할 수 없습니다 PL/SQL
에 select
검색어 만 있으면됩니다. 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>
12c에서 실제로 여러 가지 결과를 가질 수 있습니다 (예 : https : //). docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA230 –
감사 인사는 매력처럼 작동했습니다. –
여러분을 환영합니다! –
또는 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
어떤 오라클 버전을 사용하고 있습니까? 이것은 12c에서 가능합니다. https://docs.oracle.com/database/121/DRDAA/migr_tools_feat.htm#DRDAA230 –