下面的DB2查询应该与用户输入的日期一起运行。如何将用户输入日期传递给DB2查询中哪一个以粗体突出显示。
#/usr/bin/ksh
db2 connect to sunrise user edwprod using prodedw1
echo "enter the date (format should be 20140829)"
read $DATE # Read date here
result=`db2 "Select ORBDDT, count(*) as cnt_lines,
sum(ODAPRC * (cast(((coalesce(odsqty,1)/(case when odconv=0 then 1 else odconv end))) AS decimal (20,2)))) as sum_Sales,
sum(ODSQTY * ODAVCS) as sum_COGS
from SFBASLIB.SFORDD
JOIN SFBASLIB.SFORDR ON (ODORD# = ORORD# and ODLINK = ORLINK and ODSHP# = ORSHP#)
JOIN SFBASLIB.SFORDH ON (OHORD# = ORORD# and OHLINK = ORLINK and OHORD# = ODORD# and OHLINK = ODLINK)
where ORBDDT>='$DATE'
and ODSQTY <> 0
and ODSTAT not in ('SCR','CAN','BCN','KIL')
and ORPSTA not in ('SCR','CAN','BCN')
and ODITYP not in ('M','C')
and OHTYPE not in ('RE','QU','TRAN')
group by ORBDDT with UR"`
echo $result
答案 0 :(得分:1)
假设db2
的第二次调用被后引号包围(现在在重新格式化的问题中显示),则问题出在read
行。它应该是:
read DATE
您不必在$
声明中使用read
作为名称的前缀。这是将分配给$DATE
的值并尝试将其用作变量名称,但这并不起作用。
您应该优先使用$(db2 "SELECT …")
表示法优先于后引号。我假设你要做的不仅仅是回应结果;否则,你不应该捕获输出。即使你只是回应它,你应该使用:
echo "$result"
保留结果的内部间距。
我假设您能够使用第一个db2
命令创建连接,然后使用第二个db2
命令针对相同的连接运行查询。而且你最好没有披露生产密码。