반응형
Oracle SQL 문 내에서 컬렉션을 사용하는 방법
몇 가지 데이터를 여러 단계로 수집하는 Oracle 함수를 수집 변수에 작성하고 다음과 같이 SELECT 쿼리 내에서 해당 수집 데이터를 사용하고자 합니다.
CREATE OR REPLACE FUNCTION TESTFUNC01 RETURN VARCHAR2 AS
-- INT_LIST is declared globally as "TYPE INT_LIST IS TABLE OF INTEGER"
MyList INT_LIST := INT_LIST();
MyName VARCHAR2(512);
BEGIN
MyList.Extend(3);
MyList(0) := 1;
MyList(1) := 2;
MyList(2) := 3;
SELECT Name INTO MyName
FROM Item WHERE ItemId NOT IN MyList;
RETURN MyName;
END TESTFUNC01;
유감스럽게도 "내 목록에 없음" 부분은 유효한 SQL이 아닙니다.이것을 달성할 수 있는 방법이 있습니까?
당신이 찾고 있는 것은table
함수:
CREATE OR REPLACE FUNCTION TESTFUNC01 RETURN VARCHAR2 AS
-- INT_LIST is declared globally as "TYPE INT_LIST IS TABLE OF INTEGER"
MyList INT_LIST := INT_LIST();
MyName VARCHAR2(512);
BEGIN
MyList.Extend(3);
MyList(1) := 1;
MyList(2) := 2;
MyList(3) := 3;
SELECT Name INTO MyName
FROM Item WHERE ItemId NOT IN (select * from table(MyList));
RETURN MyName;
END TESTFUNC01;
오라클 10을 사용하는 경우 컬렉션 확장을 사용할 수 있습니다.
CREATE OR REPLACE FUNCTION TESTFUNC01 RETURN VARCHAR2 AS
-- INT_LIST is declared globally as "TYPE INT_LIST IS TABLE OF INTEGER"
MyList INT_LIST := INT_LIST();
MyName VARCHAR2(512);
BEGIN
MyList.Extend(3);
MyList(1) := 1;
MyList(2) := 2;
MyList(3) := 3;
SELECT Name INTO MyName
FROM Item WHERE ItemId MEMBER OF MyList;
RETURN MyName;
END TESTFUNC01;
자세한 내용은 이 게시물을 참조하십시오.
다음과 같이 할 수 있습니다.
CREATE OR REPLACE FUNCTION TESTFUNC01 RETURN VARCHAR2 AS
-- INT_LIST is declared globally as "TYPE INT_LIST IS TABLE OF INTEGER"
MyList INT_LIST := INT_LIST();
MyName VARCHAR2(512);
BEGIN
MyList.Extend(3);
MyList(1) := 1;
MyList(2) := 2;
MyList(3) := 3;
SELECT Name INTO MyName
FROM Item WHERE ItemId NOT IN (SELECT COLUMN_VALUE FROM TABLE(MyList));
RETURN MyName;
END TESTFUNC01;
목록 인덱스도 변경했습니다.0이 아닌 1로 시작합니다.
INT_LIST는 전체적으로 "TYPE INT_LIST는 정수의 테이블"로 선언됩니다.
PL/SQL 선언처럼 보입니다.SELECT 문은 SQL 엔진을 사용합니다.즉, SQL에서 TYPE을 선언해야 합니다.
CREATE TYPE INT_LIST AS TABLE OF NUMBER(38,0);
/
그런 다음 SELECT 문에서 사용할 수 있습니다.
SELECT Name INTO MyName
FROM Item WHERE ItemId NOT IN (select * from table(MyList));
물론 쿼리에서 하나의 행만 반환하거나 프로그램에서 TOO_MANY_ROWS 예외를 처리해야 합니다.
언급URL : https://stackoverflow.com/questions/7569918/how-can-i-use-a-collection-within-an-oracle-sql-statement
반응형
'programing' 카테고리의 다른 글
<< 고객명 >>님과 !=님의 차이 (0) | 2023.07.20 |
---|---|
워드프레스의 기본 게시물을 프로그래밍 방식으로 변경하는 방법은? (0) | 2023.07.20 |
메일 수신 클라이언트 없이 Mandrill 사용자 지정 발송 도메인을 확인하려면 어떻게 해야 합니까? (0) | 2023.07.20 |
오라클에서 각 그룹에 대한 최신 행 선택 (0) | 2023.07.20 |
Python의 현재 연도 및 월 날짜 (0) | 2023.07.15 |