2012-06-16 3 views
2

셸 스크립트를 사용하여 Oracle sqlplus를 호출하고 쿼리 결과를 sql 파일로 내보내려고합니다.쿼리 요청의 결과로 Oracle SQL 파일 생성

이 요청은 나에게 값을 많이 제공 :

SELECT * FROM CUST_TABLE WHERE CUST_CITY = 'San Fran'; 

을 그리고 난 내 스크립트가이 같은 SQL 파일을 생성하려면 :

[email protected]$cat first_query_result.sql 

INSERT INTO CUST_TABLE (COLUMN_1, COLUMN_2, ....) 
VALUES (CUST1_COLUMN_1, CUST1_COLUMN_2, ...); 
INSERT INTO CUST_TABLE (COLUMN_1, COLUMN_2, ....) 
VALUES (CUST2_COLUMN_1, CUST2_COLUMN_2, ...); 
INSERT INTO CUST_TABLE (COLUMN_1, COLUMN_2, ....) 
VALUES (CUST3_COLUMN_1, CUST3_COLUMN_2, ...); 

어떤 생각 (I 오라클에 약간의 배경을 가지고 및 SQL) 내 스크립트에서 수행하는 방법에 대한? 아마도 이러한 라인을 따라

+0

@Mat : 감사합니다 :). – iPadDevloperJr

+0

WITH 절 (예제의 처음 두 줄)을 모두 제거한 다음 해보십시오. – DCookie

+0

여기에서 WITH 절 (일명 부질주 인수 분해)에 대해 읽으십시오. http://www.oracle-base.com/articles/misc/with-clause.php – DCookie

답변

3

뭔가 :

sqlplus -silent uid/[email protected] <<+EOF 
set heading off 
set feedback off 
set pagesize 0 
set linesize 32000 
set trimspool on 
set termout off 
set echo off 
set verify off 
set sqlblanklines off 
spool somefile.sql 
WITH cust_table AS 
(SELECT 1 id, 'San Francisco' city, 'C1V1' col1, 'C2V1' col2 FROM dual 
UNION ALL SELECT 2, 'Los Angeles', 'C1V2', 'C2V2' FROM dual 
UNION ALL SELECT 3, 'San Jose', 'C1V3', 'C2V3' FROM dual 
UNION ALL SELECT 4, 'San Francisco', 'C1V4', 'C2V4' FROM dual) 
SELECT 'INSERT INTO cust_table (id, city, col1, col2)'||CHR(10)||'VALUES ('|| 
     id||','''||city||''','''||col1||''','''||col2||''');' 
    FROM cust_table 
WHERE city = 'San Francisco'; 
quit; 
+EOF 

이 다음 내용을 파일 somefile.sql 결과 :

INSERT INTO cust_table (id, city, col1, col2) 
VALUES (1,'San Francisco','C1V1','C2V1'); 
INSERT INTO cust_table (id, city, col1, col2) 
VALUES (4,'San Francisco','C1V4','C2V4'); 
+0

고마워,하지만 왜이 모든 조합이 이해가 안 되니? 일반, 그래서 내 코드에서 모든 열 이름을 덤프 할 필요가 없습니다,이 이유는 내가 선택 * 내 질문에, 그래서 테이블의 모든 열을 덤프 싶습니다. – iPadDevloperJr

+0

스크립트를 실행하려고 할 때도이 오류가 발생합니다. ORA-00904 : col6 : 유효하지 않은 식별자 – iPadDevloperJr

+0

이것은 단지 일러스트레이션입니다. SELECT 문에 약간의 입력을 제공하여 작동하는지 보여주는 방법입니다. 실제 스크립트에서는 그 부분을 생략합니다. – DCookie