SQL 프로시저에서 테이블을 반환할 수 있습니까?
Oracle SQL 프로시저에서 테이블을 반환할 수 있습니까?현재 사용 중입니다.dbms_output
루프에 있는 두 커서의 출력을 출력합니다. 대신 두 개의 열을 반환하는 것이 더 보기 좋습니다.그것이 절차 내에서 가능할까요?
PL/SQL 함수는 중첩된 테이블을 반환할 수 있습니다.중첩된 테이블을 SQL 유형으로 선언하면 TABLE() 함수를 사용하여 쿼리의 원본으로 사용할 수 있습니다.
다음은 유형과 이를 기반으로 작성된 중첩 테이블입니다.
SQL> create or replace type emp_dets as object (
2 empno number,
3 ename varchar2(30),
4 job varchar2(20));
5 /
Type created.
SQL> create or replace type emp_dets_nt as table of emp_dets;
2 /
Type created.
SQL>
다음은 중첩된 테이블을 반환하는 함수입니다...
create or replace function get_emp_dets (p_dno in emp.deptno%type)
return emp_dets_nt
is
return_value emp_dets_nt;
begin
select emp_dets(empno, ename, job)
bulk collect into return_value
from emp
where deptno = p_dno;
return return_value;
end;
/
다음과 같은 방식으로 작동합니다.
SQL> select *
2 from table(get_emp_dets(10))
3 /
EMPNO ENAME JOB
---------- ------------------------------ --------------------
7782 CLARK MANAGER
7839 KING PRESIDENT
7934 MILLER CLERK
SQL>
SQL Types는 PL/SQL에서 매우 정교한 API를 구축할 수 있도록 많은 기능을 제공합니다. 자세한 내용은 여기를 참조하십시오.
Oracle Cursor를 사용하여 다음 작업을 수행할 수 있습니다(Oracle 버전에서 지원하는 경우).
PROCEDURE myprocedure(
mycursor OUT SYS_REFCURSOR )
AS
BEGIN
OPEN mycursor FOR SELECT * FROM mytable;
END;
END;
이는 다음에도 도움이 될 수 있습니다.
DECLARE
TYPE t_emptbl IS TABLE OF scott.emp%rowtype;
v_emptbl t_emptbl;
ret_val t_emptbl;
--
Function getEmployeeList Return t_emptbl
IS
BEGIN
SELECT * bulk collect INTO v_emptbl FROM scott.emp;
-- Print nested table of records:
FOR i IN 1 .. v_emptbl.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (v_emptbl(i).empno);
END LOOP;
RETURN v_emptbl;
END;
--
BEGIN
ret_val:= getEmployeeList;
END;
/
언급URL : https://stackoverflow.com/questions/13673502/can-an-sql-procedure-return-a-table
'programing' 카테고리의 다른 글
Docker-Compose가 Docker Daemon에 연결할 수 없습니다. (0) | 2023.08.08 |
---|---|
모서리가 둥근 이미지 보기를 만드는 방법은 무엇입니까? (0) | 2023.08.08 |
그리스몽키에서 jQuery를 사용하려면 어떻게 해야 합니까? (0) | 2023.08.08 |
스위프트에서 GIF 이미지를 로드하는 방법은 무엇입니까? (0) | 2023.08.08 |
둘 이상의 iPhone 응용 프로그램 간에 데이터 공유 (0) | 2023.08.08 |