ORACLE 11g의 테이블 값 함수 ? (파라미터화된 보기)
저는 과거에 여기와 같이 이것에 대한 논의를 본 적이 있습니다.하지만 Oracle은 모든 종류의 사용자 정의 유형 및/또는 커서 정의 또는 sys_context 변수를 데이터베이스에 모두 배치할 필요 없이 "파라미터화된 보기"를 더 잘 지원하는지 궁금합니다.
저는 T-SQL의 다음 예시와 같이 단순히 "그냥 작동하는" 것에 대한 오라클의 추가 지원이 있기를 바랍니다.
CREATE FUNCTION [dbo].[getSomeData] (@PRODID ROWID)
RETURNS TABLE AS
RETURN SELECT PRODID, A, B, C, D, E
FROM MY_TABLE
WHERE PRODID = @PRODID
다음과 같이 선택합니다.
SELECT * FROM dbo.getSomeData(23)
SYS_CONTEXT 또는 커서 정의가 필요하지 않습니다.SQL을 구문 분석할 때 반환할 열을 결정할 수 있도록 유형이 필요합니다.즉, user_tab_columns의 데이터를 기반으로 하나 이상의 테이블에 대한 유형 및 컬렉션 유형 정의를 생성하는 스크립트를 쉽게 작성할 수 있습니다.
가장 가까운 것은
create table my_table
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1));
create type my_tab_type is object
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1))
.
/
create type my_tab_type_coll is table of my_tab_type;
/
create or replace function get_some_data (p_val in number)
return my_tab_type_coll pipelined is
begin
FOR i in (select * from my_table where prodid=p_val) loop
pipe row(my_tab_type(i.prodid,i.a,i.b,i.c,i.d,i.e));
end loop;
return;
end;
/
SELECT * FROM table(get_Some_Data(3));
Oracle에서 일종의 "매개 변수화된" 보기를 정의할 수 있습니다.단계는 다음과 같습니다.
- 실제로 필요한 매개변수인 공개 구성원을 포함하는 패키지를 정의합니다(해당 패키지의 기능이나 절차가 필요하지 않음).
- 해당 패키지 구성원을 기반으로 하는 보기를 정의합니다.
이 메커니즘을 사용하려면 한 명의 사용자가 다음을 수행해야 합니다.
- 세션 열기,
- 패키지 구성원에게 원하는 값을 할당합니다.
SELECT
뷰의 데이터,- 다른 작업을 수행하거나 세션을 닫습니다.
비고: 패키지 구성원 범위는 정확히 세션이므로 사용자는 한 세션에서만 세 단계를 모두 수행해야 합니다.
SQL SERVER에는 두 가지 유형의 테이블 값 함수가 있습니다.
인라인 테이블 값 함수:인라인 테이블 값 함수의 경우 함수 본문이 없습니다. 테이블은 단일의 결과 집합입니다.
SELECT
진술.이 유형은 '매개 변수화된 보기'로 명명할 수 있으며 ORACLE에는 해당되지 않는 것으로 알고 있습니다.다중 문 테이블 값 함수:다중 문 테이블 값 함수의 경우, 함수 본체는 다음과 같이 정의됩니다.
BEGIN...END
block - 테이블에 행을 빌드하고 삽입하는 일련의 Transact-SQL 문을 포함합니다.
위의 샘플(Gary Myers 기준)은 두 번째 유형의 테이블 함수를 생성하며 '매개 변수화된 뷰'가 아닙니다.
언급URL : https://stackoverflow.com/questions/2059299/table-valued-functions-in-oracle-11g-parameterized-views
'programing' 카테고리의 다른 글
하위 쿼리가 있는 HAVING 절에 사용된 비그룹화 필드 (0) | 2023.07.30 |
---|---|
Spring 통합 테스트는 많은 메모리를 소비하고 GradleWorkerMain에서 많은 수의 중복 스레드를 사용합니다. (0) | 2023.07.30 |
조각에 빈 생성자가 정말 필요합니까? (0) | 2023.07.30 |
c#을 사용하여 asp.net 의 쿼리 문자열에서 항목을 제거하려면 어떻게 해야 합니까? (0) | 2023.07.30 |
JQuery의 파일 입력에서 데이터 가져오기 (0) | 2023.07.30 |