[SQL] 특정 컬럼이 SQL에서 호출 SYS_REFCURSOR 함수 반환
SQL특정 컬럼이 SQL에서 호출 SYS_REFCURSOR 함수 반환
이것은 약간 바보 찾을 수 있습니다,하지만 난이 가능한지 알고 싶습니다.
나는 SYS_REFCURSOR를 반환하는 기능을 가지고
CREATE OR REPLACE FUNCTION get_employee_details(p_emp_no IN EMP.EMPNO%TYPE)
RETURN SYS_REFCURSOR
AS
o_cursor SYS_REFCURSOR;
BEGIN
OPEN o_cursor FOR
SELECT EMPNO,
ENAME,
JOB,
MGR,
HIREDATE,
SAL,
COMM,
DEPTNO
FROM emp
WHERE EMPNO = p_emp_no;
RETURN o_cursor;
-- exception part
END;
/
내가 사용하여 결과를 얻을 수
select get_employee_details('7369') from dual;
그것은 열 이름을 지정하여 위의 함수에서 결과를 얻을 수 있습니까? 예를 들면 내가 ENAME 또는 급여를 얻고 싶은 것, 어떻게 내가 PLSQL 블록을 사용하지 않고 SQL 문에 지정할 수 있습니다? 같은 뭔가
select get_employee_details('7369') <specific column> from dual;
해결법
-
==============================
1.아니,이 예와 같이,로 수익을 캐스팅 SQL 유형을 생성하지 않고 심판 전혀 커서, 그렇지 않으면하지와 : http://dbaspot.com/oracle-server/9308-select-ref-cursor.html :
아니,이 예와 같이,로 수익을 캐스팅 SQL 유형을 생성하지 않고 심판 전혀 커서, 그렇지 않으면하지와 : http://dbaspot.com/oracle-server/9308-select-ref-cursor.html :
create or replace type myType as object ( a int, b varchar2(10) ) / create or replace type myTable as table of myType; / create or replace function f1 return myTable as l_data myTable := myTable(); begin for i in 1 .. 5 loop l_data.extend; l_data(i) := myType(i, 'Row #'||i ); end loop; return l_data; end; / select * from TABLE ( cast( f1() as myTable ) ); ---------- ---------- 1 Row #1 2 Row #2 3 Row #3 4 Row #4 5 Row #5
해당 스레드의 마지막 게시물에서 :
-
==============================
2.이를 위해, 당신은 파이프 라인 기능을 살펴 할 수 있습니다. 당신은하지만 PL / SQL 수준에서 명시 적 유형을 선언해야합니다. 그 부분은 출력 열 이름을 설정한다 :
이를 위해, 당신은 파이프 라인 기능을 살펴 할 수 있습니다. 당신은하지만 PL / SQL 수준에서 명시 적 유형을 선언해야합니다. 그 부분은 출력 열 이름을 설정한다 :
CREATE OR REPLACE TYPE my_rec AS OBJECT ( c CHAR, n NUMBER(1) ); CREATE OR REPLACE TYPE my_tbl AS TABLE OF my_rec;
이제 큰 장점은 단지 "이름 바꾸기"를 열하지만 너무 즉시 커서에서 레코드를 수정할 수 없습니다입니다. 예를 들어 :
CREATE OR REPLACE FUNCTION my_fct RETURN my_tbl PIPELINED AS -- dummy data - use your own cursor here CURSOR data IS SELECT 'a' as A, 1 AS B FROM DUAL UNION SELECT 'b', 2 FROM DUAL UNION SELECT 'c', 3 FROM DUAL UNION SELECT 'd', 4 FROM DUAL; BEGIN FOR the_row IN data LOOP PIPE ROW(my_rec(the_row.a, the_row.b*2)); -- ^^ -- Change data on the fly END LOOP; END
용법:
SELECT * FROM TABLE(my_fct()) -- ^^^^^^^^^^^^^^^ -- Use this "virtual" table like any -- other table. Supporting `WHERE` clause -- or any other SELECT clause you want
생산 :
C N a 2 b 4 c 6 d 8
from https://stackoverflow.com/questions/13690110/function-return-sys-refcursor-call-from-sql-with-specific-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server의 글로벌 임시 테이블 (0) | 2020.07.17 |
---|---|
[SQL] 어떻게 특정 노드에 그 리드를 SQL에서 계층 구조의 경로를 생성 할 수 있습니까? (0) | 2020.07.17 |
[SQL] 어떻게 where 절에 삽입 (0) | 2020.07.17 |
[SQL] 오류로 실패 업데이트 쿼리 : 1175 (0) | 2020.07.17 |
[SQL] 고유 식별자에 VARCHAR에서 SQL 변환이보기에 실패 (0) | 2020.07.17 |