变量不会在PL-SQL语句中解析

时间:2014-01-14 16:21:10

标签: shell unix scripting ksh

我正在尝试在我的KornShell(ksh)脚本中将SQL命令传递给SQL * Plus命令行程序(Oracle),但我的$MY_VAR变量似乎无法解决。 $MY_VAR是一个字符串值。

sqlplus -s << EOF >> $LOG_FILE
  $MY_SCHEMA
  UPDATE my_table SET run_flag = 'I', start_time = to_char(sysdate, 'DD-Mon-YYYY HH24:MI:SS') WHERE (process_id = '$MY_VAR' AND run_flag != 'F');
  COMMIT;
EOF

我可以成功echo $MY_VAR变量,因此我可以看到变量已填充,但在将变量插入SQL命令时似乎无法解析提供SQL * Plus程序的参数。脚本的日志文件只输出:

  

更新了0行。提交完成。

SQL似乎是有效的,因为我们可以在SQL Developer中成功执行该命令(尽管$MY_VAR具有硬编码值)。

关于我在这里缺少的任何想法?

谢谢

1 个答案:

答案 0 :(得分:1)

试试这个:

sql="$MY_SCHEMA
  UPDATE my_table SET run_flag = 'I', start_time = to_char(sysdate, 'DD-Mon-YYYY HH24:MI:SS') WHERE (process_id = '$MY_VAR' AND run_flag != 'F');
  COMMIT;"
print "$sql"
sqlplus -s <<<"$sql" >> $LOG_FILE

sql看起来是否正确?如果是,并且更新了零行,则where子句必须选择零行。

您的ksh版本可能没有<<< here-string语法。在那种情况下:

print "$sql" | sqlplus -s >> $LOG_FILE