[SQL] 어떻게 오라클에서 값 목록에서 선택할 수 있습니다
SQL어떻게 오라클에서 값 목록에서 선택할 수 있습니다
나는이 유래 대답을 언급하고있다 :
어떻게 SQL Server의 값 목록에서 선택할 수 있습니다
어떻게 비슷한 오라클에서 할 수 있을까?
나는 UNION을 사용하고이 방법은 기술적으로 작동하지만, 그것이 내가 내 경우에는 사용하고자하는 게 아니에요이 페이지의 다른 답변을 보았다.
내가 구문 그와 함께 머물 싶습니다 그래서 값의 쉼표로 구분 된 목록과 같은 더 많거나 적은 외모.
(가) 형 테이블 답을 생성에 대한 UPDATE :
나는 테이블을 가지고 :
CREATE TABLE "BOOK"
( "BOOK_ID" NUMBER(38,0)
)
나는이 스크립트를 사용하지만 BOOK 테이블에 행을 삽입하지 않습니다
create type number_tab is table of number;
INSERT INTO BOOK (
BOOK_ID
)
SELECT A.NOTEBOOK_ID FROM
(select column_value AS NOTEBOOK_ID from table (number_tab(1,2,3,4,5,6))) A
;
스크립트 출력 :
TYPE number_tab compiled
Warning: execution completed with warning
나는이 스크립트를 사용한다면 그것은 BOOK 테이블에 새 행 삽입을 수행합니다
INSERT INTO BOOK (
BOOK_ID
)
SELECT A.NOTEBOOK_ID FROM
(SELECT (LEVEL-1)+1 AS NOTEBOOK_ID FROM DUAL CONNECT BY LEVEL<=6) A
;
해결법
-
==============================
1.당신은 당신이 오라클의 내장에서 수집 유형을 평가할 수있는 저장 유형을 만들 필요가 없습니다.
당신은 당신이 오라클의 내장에서 수집 유형을 평가할 수있는 저장 유형을 만들 필요가 없습니다.
select distinct column_value from table(sys.odcinumberlist(1,1,2,3,3,4,4,5))
-
==============================
2.당신이 변환하고자하는 경우 쉼표는 값 목록을 구분 :
당신이 변환하고자하는 경우 쉼표는 값 목록을 구분 :
select column_value from table(sys.dbms_debug_vc2coll('One', 'Two', 'Three', 'Four')); -- Or select column_value from table(sys.dbms_debug_vc2coll(1,2,3,4));
당신이 쉼표로 구분 된 값의 문자열을 변환 할 경우, 나는 저스틴 동굴의 정규 표현식 SQL 솔루션을 추천 할 것입니다.
-
==============================
3.쉼표로 구분 된 목록을 데이터의 여러 행으로 구문 분석하는 방법은 다양하다. 에서 SQL
쉼표로 구분 된 목록을 데이터의 여러 행으로 구문 분석하는 방법은 다양하다. 에서 SQL
SQL> ed Wrote file afiedt.buf 1 with x as ( 2 select '1,2,3,a,b,c,d' str from dual 3 ) 4 select regexp_substr(str,'[^,]+',1,level) element 5 from x 6* connect by level <= length(regexp_replace(str,'[^,]+')) + 1 SQL> / ELEMENT ---------------------------------------------------- 1 2 3 a b c d 7 rows selected.
또는 PL / SQL
SQL> create type str_tbl is table of varchar2(100); 2 / Type created. SQL> create or replace function parse_list( p_list in varchar2 ) 2 return str_tbl 3 pipelined 4 is 5 begin 6 for x in (select regexp_substr( p_list, '[^,]', 1, level ) element 7 from dual 8 connect by level <= length( regexp_replace( p_list, '[^,]+')) + 1) 9 loop 10 pipe row( x.element ); 11 end loop 12 return; 13 end; 14 15 / Function created. SQL> select * 2 from table( parse_list( 'a,b,c,1,2,3,d,e,foo' )); COLUMN_VALUE -------------------------------------------------------------------------------- a b c 1 2 3 d e f 9 rows selected.
-
==============================
4.이 작업을 수행 할 수 있습니다 :
이 작업을 수행 할 수 있습니다 :
create type number_tab is table of number; select * from table (number_tab(1,2,3,4,5,6));
이 작품도 그래서 열은 오라클 이름 COLUMN_VALUE 주어집니다 :
select column_value from table (number_tab(1,2,3,4,5,6));
-
==============================
5.안녕은 XML-표와 문자열에 대한도 가능
안녕은 XML-표와 문자열에 대한도 가능
SELECT trim(COLUMN_VALUE) str FROM xmltable(('"'||REPLACE('a1, b2, a2, c1', ',', '","')||'"'));
-
==============================
6.오라클 12.2에서 시작, 당신은 TABLE 기능이 필요하지 않습니다, 당신은 직접 내장 모음을 선택할 수 있습니다.
오라클 12.2에서 시작, 당신은 TABLE 기능이 필요하지 않습니다, 당신은 직접 내장 모음을 선택할 수 있습니다.
SQL> select * FROM sys.odcinumberlist(5,2,6,3,78); COLUMN_VALUE ------------ 5 2 6 3 78 SQL> select * FROM sys.odcivarchar2list('A','B','C','D'); COLUMN_VALUE ------------ A B C D
from https://stackoverflow.com/questions/10353969/how-can-i-select-from-list-of-values-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 자바 - 외부 파일에 보관 SQL 문이 [마감] (0) | 2020.04.28 |
---|---|
[SQL] 행의 PostgreSQL에있는 경우 빠른 검사 (0) | 2020.04.28 |
[SQL] 가장 최근의 날짜를 기준으로 SQL 선택 행 (0) | 2020.04.28 |
[SQL] 파티션 기능 COUNT () OVER 가능 DISTINCT 사용 (0) | 2020.04.28 |
[SQL] SQL은 : 레코드가 존재하는 경우 어떻게 제대로 확인 (0) | 2020.04.28 |