복붙노트

[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. ==============================

    1.당신은 당신이 오라클의 내장에서 수집 유형을 평가할 수있는 저장 유형을 만들 필요가 없습니다.

    당신은 당신이 오라클의 내장에서 수집 유형을 평가할 수있는 저장 유형을 만들 필요가 없습니다.

    select distinct column_value from table(sys.odcinumberlist(1,1,2,3,3,4,4,5))
    
  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.안녕은 XML-표와 문자열에 대한도 가능

    안녕은 XML-표와 문자열에 대한도 가능

    SELECT trim(COLUMN_VALUE) str FROM xmltable(('"'||REPLACE('a1, b2, a2, c1', ',', '","')||'"'));
    
  6. ==============================

    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
    
  7. from https://stackoverflow.com/questions/10353969/how-can-i-select-from-list-of-values-in-oracle by cc-by-sa and MIT license