2012-02-20 2 views
0

오라클이 이러한 유형의 삽입을 지원하지 않는다는 바보 같은 종류가 있습니다. 오라클에서 어떻게 처리합니까? 이 아마도처럼오라클 멀티 행 삽입문

INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE) VALUES("BPA", "AL"), ("BPA", "AK"), ("BPA", "AS"), ("BPA", "AZ"), ("BPA", "AR"), ("BPA", "AF"), 
("BPA", "AA"), ("BPA", "AC"), ("BPA", "AE"), ("BPA", "AM"), ("BPA", "AP"), ("BPA", "CA"), ("BPA", "CO"), ("BPA", "CT"), ("BPA", "DE"), ("BPA", "DC"), 
("BPA", "FM"), ("BPA", "FL"), ("BPA", "GA"), ("BPA", "GU"), ("BPA", "HI"), ("BPA", "ID"), ("BPA", "IL"), ("BPA", "IN"), ("BPA", "IA"), ("BPA", "KS"), 
("BPA", "KY"), ("BPA", "LA"), ("BPA", "ME"), ("BPA", "MH"), ("BPA", "MD"), ("BPA", "MA"), ("BPA", "MI"), ("BPA", "MN"), ("BPA", "MS"), ("BPA", "MO"), 
("BPA", "MT"), ("BPA", "NE"), ("BPA", "NV"), ("BPA", "NH"), ("BPA", "NJ"), ("BPA", "NM"), ("BPA", "NY"), ("BPA", "NC"), ("BPA", "ND"), ("BPA", "MP"), 
("BPA", "OH"), ("BPA", "OK"), ("BPA", "OR"), ("BPA", "PW"), ("BPA", "PA"), ("BPA", "PR"), ("BPA", "RI"), ("BPA", "SC"), ("BPA", "SD"), ("BPA", "TN"), 
("BPA", "TX"), ("BPA", "UT"), ("BPA", "VT"), ("BPA", "VI"), ("BPA", "VA"), ("BPA", "WA"), ("BPA", "WV"), ("BPA", "WI"), ("BPA", "WY"); 
+1

아마도 : http://www.techonthenet.com/oracle/questions/insert_rows.php –

+0

당신이 답변으로 게시되지 않은 이유 ? 그것은 당신이 1로 배치하는 경우에 응답으로 선정 할 것이다 그래서 일했다. – MB34

+2

복제본 : http://stackoverflow.com/q/4152037. 여기 PL/SQL에는 특별한 것이 없습니다. PL/SQL 컨텍스트에서도 실행할 수있는 Oracle SQL입니다. – user272735

답변

3
+0

여러 INSERT 문 (각 행에 하나씩)을 작성하는 것보다 이점은 무엇입니까? –

+1

오버 헤드가 적습니다. 커서 공유는 바인드 변수가없는 SQL에서는 제대로 작동하지 않으므로 한 줄 삽입 문과 같은 항목을 반복 할 때마다 다시 구문 분석이 필요합니다. 실제로, OP가 수행하지 않는 것처럼 보이는 많은 수의 행을로드하지 않는 한 그렇게 큰 거래가 아닙니다. –

+2

그 예제에서 하드 구문 분석은 전혀 중요하지 않습니다. 많은 수의 행을로드해야하는 경우 준비된 명령문 또는 SQL * Loader가 ** 많이 선택 ** 더 우수함 –

3

나는 "바보"중 하나의 정의에 따라 달라집니다 같아요. 이 일은 가끔씩해야하는 일종의 데이터로드입니다. 따라서 cut'n'paste를 사용하여 사용 가능한 구문에 맞는 스크립트를 만드는 것이 큰 어려움이 아닙니다.

또는 grep. 편집기에서 정규 표현식을 사용하여 코드를 실행 가능한 PL/SQL 코드로 변환했습니다. 그것을 체크 아웃 :

declare 
    strs dbms_debug_vc2coll; 
begin 
    strs := dbms_debug_vc2coll ('AL', 'AK', 'AS', 'AZ', 'AR', 'AF', 
     'AA', 'AC', 'AE', 'AM', 'AP', 'CA', 'CO', 'CT', 'DE', 'DC', 
     'FM', 'FL', 'GA', 'GU', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS', 
     'KY', 'LA', 'ME', 'MH', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 
     'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'MP', 
     'OH', 'OK', 'OR', 'PW', 'PA', 'PR', 'RI', 'SC', 'SD', 'TN', 
     'TX', 'UT', 'VT', 'VI', 'VA', 'WA', 'WV', 'WI', 'WY'); 


    INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE) 
    select 'PA', column_value 
    from table (select * from strs); 

end; 
/ 
0

를이 방법으로

DECLARE 

var_sql clob; 
var_bpa varchar2(3):='BPA'; 

BEGIN 

var_sql := 'insert all '; 
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state) 
values('''||var_bpa||''', ''AL'')'; 
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state) 
values('''||var_bpa||''', ''AF'')'; 
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state) 
values('''||var_bpa||''', ''AM'')'; 
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state) 
values('''||var_bpa||''', ''AP'')'; 
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state) 
values('''||var_bpa||''', ''DC'')'; 
var_sql :=var_sql||' select 1 from dual '; 

EXECUTE IMMEDIATE var_sql; 

END; 
0

를 대신 모든 새로운 문을 작성하는 런타임에 값을 입력 & VARIABLE_NAME을 사용할 수 있습니다.

For example - 
INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE) 
VALUES(&PRG_CODE, &STATE); 
0
INSERT ALL 
    INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) 
    INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) 
    INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) 
SELECT * FROM dual; 

또는이처럼 ...

insert into mytable (column1, column2, .. columnn) 
      select value1, value2 ... valuen from dual 
union all select value1, value2 ... valuen from dual