0

我正在编写一个 Unix shell 脚本以使用日期作为输入参数来调用 Oracle 存储过程,但我收到以下错误。请帮助我如何将日期参数从 Unix 传递给 Oracle 存储过程。

我需要传递给程序的预期日期格式是:

Start Date:       2013-09-12 00:00
End Date  :       2013-09-04 00:00

我在执行 Unix 脚本时遇到的错误:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
     SQL> SP2-0552: Bind variable "00" not declared.
     SQL> SP2-0734: unknown command beginning "echo " C3 ..." - rest of line ignored.
     SQL> SP2-0734: unknown command beginning "echo "####..." - rest of line ignored.

我的 Unix shell 脚本源:

date1='date'
date1=$(/bin/date --date="$date1" -d "+0 day" +"%F")
date1+=" 00:00"
date2=$(/bin/date --date="$date1" -d "-8 day" +"%F")
date2+=" 00:00"
echo "Report Period"
echo "Start Date:       "$date1
echo "End Date  :       "$date2
sqlplus preprdsm/PREPRDSM@pssm <<EOF
execute C3_REPORT($date1,$date2)
echo " C3 REPORT Executed Successfully "

我的 Oracle 存储过程输入是:

create or replace
PROCEDURE C3_REPORT(
START_DATE IN date,
END_DATE IN date)
IS
emesg VARCHAR2(250); 
4

1 回答 1

2

您必须将日期值括在引号中,以便 Oracle 看到引号。

sqlplus preprdsm/PREPRDSM@pssm <<EOF
execute C3_REPORT('$date1', '$date2')
echo "C3 report Executed Successfully"
EOF

这假设您的 NLS 设置与日期格式匹配。

于 2013-09-12T04:52:35.563 回答