我有一个很奇怪的问题,我希望你的眼睛可以帮助解决它。管道破损?
我有一个定义的函数,它通过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