我有一個很奇怪的問題,我希望你的眼睛可以幫助解決它。管道破損?
我有一個定義的函數,它通過BASH連接到Oracle SQL數據庫。一旦連接,我使用HEREDOC傳遞一個簡單的select語句,該語句找到一個最大訂閱ID並遞增它,具體取決於該函數被調用的次數。下面是代碼:
#!/bin/bash
PASS=0
function NewUserSubID(){
PASS=$(($PASS+1))
sqlplus "${DB_USER}"/"${DB_PASS}" <<EOF
set echo on timing on lines 200 pages 100
select max(SUBSCRIPTION_ID)+${PASS} from ${DB_ENV}.USER_DATA;
EOF
}
上面的代碼的偉大工程,當函數被調用的命令行:
[[email protected]]> NewUserSubID SQL*Plus: Release 11.2 Production Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2 SQL> SQL> MAX(SUBSCRIPTION_ID)+1 ------------------------------------- 1082 Elapsed: 00:00:00.00 SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2 [[email protected]]> NewUserSubID SQL*Plus: Release 11.2 Production Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2 SQL> SQL> MAX(SUBSCRIPTION_ID)+2 ------------------------------------- 1083 Elapsed: 00:00:00.00 SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2 [[email protected]]> NewUserSubID SQL*Plus: Release 11.2 Production Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2 SQL> SQL> MAX(SUBSCRIPTION_ID)+3 ------------------------------------- 1084 Elapsed: 00:00:00.00 SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2 [[email protected]]> NewUserSubID SQL*Plus: Release 11.2 Production Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2 SQL> SQL> MAX(SUBSCRIPTION_ID)+4 ------------------------------------- 1085 Elapsed: 00:00:00.00 SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2
然而,當函數通過管道被輸送到一個AWK語句,函數不再旅行,這是沒有道理的!看到下面的輸出:
[[email protected]] > NewUserSubID | awk 'NR==9{print $1}' 1086 [[email protected]] > NewUserSubID | awk 'NR==9{print $1}' 1086 [[email protected]] > NewUserSubID | awk 'NR==9{print $1}' 1086 [[email protected]] > NewUserSubID | awk 'NR==9{print $1}' 1086 [[email protected]] > NewUserSubID | awk 'NR==9{print $1}' 1086
我不明白。大聲笑,我真的希望我只是俯視簡單的東西,但我沒有想法。任何幫助都是極好的!
我嘗試這樣做,雖然它確實允許itteration,它不切出只是新的ID,我還看到了整個SQL輸出,這正是我試圖用AWK過濾出來的東西。有沒有比AWK更好的方法? – misteralexander
我有一個固定的錯字。試試我更新的答案。 – anubhava
哇!那很完美。你能指點我一個wiki或一個鏈接,我可以閱讀更多關於這個?我正在閱讀[過程替代](http://tldp.org/LDP/abs/html/process-sub.html),但我沒有看到解釋第二個「>」需求的部分,以及爲什麼這使所有的工作?謝謝! – misteralexander