Oracle

需要一個可以執行 oracle 查詢並以 .csv 格式生成輸出的 shell 腳本

  • September 5, 2019

你能幫忙嗎?需要一個shell腳本,裡面有一個oracle查詢,並在特定位置產生一個.csv格式的輸出,這個腳本應該安排在一個執行的cron作業中,cron作業應該每天執行。

  1. 您需要編寫腳本並使用 spool 將輸出文件保存在 csv 中所需的路徑中。
#!/bin/bash

sqlplus -silent $USER_PASS <<EOF
   SET SERVEROUTPUT ON
   SET FEEDBACK OFF
   DECLARE
      lvQuery Varchar2(32000);
   BEGIN
       select 'set heading off;' || chr(10) ||
               'spool "TABLE_NAME.csv"' || chr(10) ||
                       'select * From TABLE_NAME;' || chr(10) ||
                       'spool off'
           Into lvQuery
           from dual;
           dbms_output.put_line(lvQuery);
   /
   EXIT
EOF
  1. 之後創建您的腳本,配置一個 cron 來觸發您想要觸發的日期來創建您的文件。

`nano /etc/crontab

    • 1 * 1-5 root /path_to_your_file/your_shell.sh`

替代 Miguel 提供的腳本,如果 termout off 有效,您可以刪除空設備/dev/null,否則註釋掉。 SET TERMOUT OFF在 Windows 子系統 Ubuntu 上測試,將時間戳附加到文件名。

#!/bin/bash
FILE_NAME="/home/****/employees"
TIME_STAMP=$(date "+%Y.%m.%d-%H.%M.%S")

sqlplus.exe -s $CONN_STR <<EOF >/dev/null

-- SET TERMOUT OFF
SET PAGESIZE 3000
SET COLSEP ","
SET LINESIZE 180
SET FEEDBACK OFF
SPOOL $FILE_NAME$TIME_STAMP.csv
SELECT * FROM EMPLOYEES

SPOOL OFF
EXIT
EOF

引用自:https://dba.stackexchange.com/questions/246821