怎么在shell腳本中執行sql?
怎么把sql編程shell腳本放在服務器上自動跑數?
請看正文~
1.Oracle的常用set命令
Oracle的常用set命令:
set pagesize 0 #輸出每頁行數,缺省為24,為了避免分頁,可設定為0。
set linesize 2000 #輸出一行字符個數,缺省為80
set head off #數據庫查詢結果中不顯示列標題,而是以空白行代替,也就是不顯示字段名了
set termout off #去除標准輸出每行的拖尾空格,缺省為off
set trims on #去掉空字符
set trim on #查詢結果既顯示於假脫機文件中,又在SQLPLUS中顯示;
set feed off # 同set feedback off,顯示數量 當查詢選擇至少n條記錄時,查詢返回的記錄。
set newpage 0;#設置頁與頁之間的分隔。0時,會在每頁的開頭有一個小的黑方框;n時,會在頁版和頁之間隔着n個空行
set space 0; #設置各列間的空格數,默認不用設置、不用寫此參數
set line 1000; #設置行的長度
set echo off; #顯示start啟動的腳本中的每個sql命令,缺省為on
set feedback off; #默認的當一條sql發出的時候,oracle會給一個反饋,比如說創建表的時候,如果成功命令行會返回類似:Table created的反饋,off后不顯示反饋
set feedback on; #設置顯示“已選擇XX行”
set heading off; #輸出域標題,缺省為on;不顯示表頭信息
set term off; #查詢結果僅僅顯示於假脫機文件中
set termout off; #不在屏幕上顯示結果
set trimout on; #每一顯示行的末端去掉空格
set trimspool on; #去除重定向(spool)輸出每行的拖尾空格,缺省為off
set timing off; #顯示每條sql命令的耗時,缺省為off
set timing on; #設置顯示“已用時間:XXXX”
set time on; #設置顯示當前時間
set trimout on; #去除標准輸出每行的拖尾空格,缺省為off
set autotrace on; #設置允許對執行的sql進行分析
set colsep' '; #設置分隔符為空格
set numwidth 12; #輸出number類型域長度,缺省為10
set serveroutput on; #設置允許顯示輸出類似dbms_output
set verify off; #可以關閉和打開提示確認信息old 1和new 1的顯示.
spool 路徑+文件名 #記錄數據到路徑+文件名
select ... from tablename; #導出數據SQL語句
spool off #收集完畢
2. 一個例子
例子:
#設置執行編碼格式,防止導出中文時出現亂碼
export ORACLE_HOME=/oracle/product/10.2.0/db_1
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
a=`date +%Y%m%d%H%M%S`
b=`date +%Y%m%d`
filename1=lp_0304_$b.xls
echo "begin time:"`date +%Y%m%d%H%M%S` >> /服務器上的log目錄路徑/lp_0304_$a.log
SQL1=`sqlplus -s 用戶名/口令@數據庫>/dev/null << END
set pagesize 0
set linesize 2000
set head off
set termout off
set trims on
set trim on
set feed off
......sql
spool $filename1
select '序號'||chr(9)||'號碼'' from dual
union all
select /*+ parallel(a,12)*/
a.id||chr(9)||
a.serial_number
from lp_0304_4 a;
spool off
/
exit;
END`
echo "end time:"`date +%Y%m%d%H%M%S` >> /服務器日志目錄/lp0304_$a.log
mv $filename1 /服務器文件目錄/file/
可以用下面語句代替上面的某些部分,輸出的文件顯示不太一樣,上面的語句生成的文件字段之間只有一個空格,且會有表頭的字段名;下面的語句生成的文件字段之間會有很多空格,且沒有字段名:
SET NEWPAGE 0; #設置頁與頁之間的分隔。
SET SPACE 0; #設置各列間的空格數
SET LINESIZE 2000; #輸出一行字符個數,缺省為80
SET PAGESIZE 0; #輸出每頁行數,缺省為24,為了避免分頁,可設定為0。
SET ECHO OFF; #顯示start啟動的腳本中的每個sql命令,缺省為on
SET FEEDBACK OFF;#默認的當一條sql發出的時候,oracle會給一個反饋,比如說創建表的時候,如果成功命令行會返回類似:Table created的反饋,off后不顯示反饋
SET HEADING OFF; #輸出域標題,缺省為on;不顯示表頭信息
SET TERM OFF; #查詢結果僅僅顯示於假脫機文件中
SET TRIMSPOOL ON; #去除重定向(spool)輸出每行的拖尾空格,缺省為off
SET TIMING OFF; #顯示每條sql命令的耗時,缺省為off
spool /目錄/文件名.txt
......SQL語句......
spool off;
