2017-03-02 3 views
0

나는 crontab을 사용하여 SQL 스크립트를 실행합니다. 다음은 내 스크립트입니다 :Crontab을 사용하여 출력 형식을 SQLplus로 변경

enter image description here

어떻게 바로 열 헤더와 쿼리의 결과를 내보내는 : 파일의

#!/bin/sh 
export ORACLE_HOME=/opt/xxx/oracle/client 
date=$(date +%d.%m.%y-%T) 
echo "select col1, col2 from table1;" |/opt/xxx/oracle/client/bin/sqlplus "abc/[email protected](DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=111.0.0.1)(Port=9999))(CONNECT_DATA=(SID=sidX)))" > /usr/users/tuser/temp/file.$date.txt 

형식과 같은 불필요한 데이터 오 LOF를 포함? (바람직한 것은 CSV 형식 임)

+0

그건 cron과 관련이 없습니다. 먼저 명령 행에서 동일한 작업을 수행 할 수 있습니다. SQL \ * Plus에서 실행하는 스크립트가 아닌 crontab 자체에 SQL을 넣을 이유가 있습니까? –

+0

'sqlplus '다음에'-S'ilent 명령을'sqplus -s user/password'로 사용할 수 있습니다. – JSapkota

+0

이유가 있습니다 - 스크립트는 한 번에 실행됩니다 – 4est

답변

1

에코 문자열에 SQL * Plus set 명령을 포함 할 수 있지만 새로운 행을 삽입해야합니다. echo에서 printf로 전환하면 간단하게/cleaer 할 수 있습니다.

그런 다음 CSV 출력을 얻을 수있는 쉼표로 열을 연결할 수 있습니다 :

printf "set pages 0 lines 200 trimout on tab off feedback off\nselect col1||','||col2 from table1;exit" | /opt/.... 

는 또한 귀하의 의견에 따라 라인 크기를 증가했습니다. You can read more about the settings availableformatting in general.

열에 쉼표가 포함될 수있는 문자열이 포함되어있는 경우 값을 큰 따옴표로 묶어두면 Excel이나 다른 도구로 추가 열로 잘못 이해할 수 있습니다.

당신은뿐만 아니라 CSV 헤더를 원하는 경우에 당신은 그들을 얻을, 또는 고정 텍스트 추가 프롬프트 명령을 사용하여 더미 쿼리를 가질 수 있습니다

printf "set pages 0 lines 200 trimout on tab off feedback off\nprompt COL1,COL2\nselect col1||','||col2 from table1;exit" | /opt/.... 

을 그리고 당신은 SQL을 만들기 위해 -s 플래그를 사용할 수 있습니다 * 플러스의 배너를 억제 :

... exit" | /opt/xxx/oracle/client/bin/sqlplus -s "abc/[email protected]" 

을 덧붙여, 당신은 이름을 서비스하는 SID를 사용하여 전환 할 수 있다면, 당신은 '쉽게 연결'구문을 단락 사용할 수 있습니다 전체 TNS는 기술자를 연결하는 대신.

간단한 쿼리가있는 빠른 데모; 내가 명령 줄에서이 작업을 수행 할 경우 (단지 스크롤 방지하기 위해 두 행으로 분할) :

printf "set pages 0 feedback off\nprompt Col1,Col2\nselect dummy||','||dummy from dual;" |\ 
    /path/to/sqlplus -s myuser/[email protected]//myhost:myport/myservicename 

내가 얻을 전체 출력은 다음과 같습니다

Col1,Col2 
X,X 

난 심각 적어도 SQL 명령을 넣어 고려할 것 .sql 스크립트 파일에 저장하고 SQL * Plus에서 실행합니다. 아마도 쉘 스크립트에 전체 명령 (sqlplus 전화 호출)을 넣어서 cron에서 쉘 스크립트를 호출 할 수 있습니다.

+0

거의 완벽 하긴하지만 왜 2 열 뒤에서 한 행을 나누는 지 모르겠다. (나는 12 열을 가지고있다) – 4est

+0

@ 4est - 당신은 아마 단지 줄을 늘릴 필요가있다; 'lines 200'을 추가하여 한 줄의 출력이 어느 정도 길어질지를 맞추기 위해 그 수를 조정합니다. 너무 높으면이 사실에 상처를주지는 않습니다. –

+0

많은 감사 알렉스, 그냥 테스트하고 awsome 작품! :) – 4est