【问题标题】:Revert scan state when prompting for variable values提示输入变量值时恢复扫描状态
【发布时间】:2010-03-11 20:53:57
【问题描述】:

如何检测当前SCAN 状态并在更改后恢复?

相关脚本的摘录:

SET SCAN OFF
SET ECHO ON
SET SQLBLANKLINES ON

SET SCAN ON
UPDATE TABLE_NAME SET CREATED_BY = &&created_by;
SET SCAN OFF

问题是如果脚本没有第一行(SET SCAN OFF),那么提示用户的代码不应该在之后关闭SCAN 状态。伪代码解决方案:

-- The next line might not exist, or be "SET SCAN ON".
SET SCAN OFF
SET ECHO ON
SET SQLBLANKLINES ON

-- Remember if the scanning was on or off.
PUSH SCAN STATE
SET SCAN ON
UPDATE TABLE_NAME SET CREATED_BY = &&created_by;

-- Revert scanning to its former state.
POP SCAN STATE

PUSH SCAN STATE 行会记住状态,因此如果通过删除第一行来更改代码,由于对应的POP SCAN STATE,脚本的其余部分仍可按预期工作。

【问题讨论】:

  • 您可以在顶部SHOW SCAN 并在必要时手动重置它。
  • @Jeffrey:我正在寻找自动化解决方案。
  • 我收集到了,这就是我发表评论但没有回答的原因 - 我怀疑可能没有解决方案。

标签: sql oracle installation sql-update


【解决方案1】:

sqlplus STORE 命令应该这样做,不幸的是它似乎没有保存SCAN 状态(SQLPlus 9.2.0.1.0)。我将用另一种设置进行演示(TIMING):

SQL> show timing
timing OFF
SQL> -- save parameters into an os file
SQL> store set param.sql create
Created file param.sql
SQL> -- run script
SQL> SET TIMING ON
SQL> show timing
timing ON
SQL> -- reset state
SQL> @param.sql
SQL> show timing
timing OFF

【讨论】:

  • 谢谢。好主意,并为我提供了一个探索的领域。太糟糕了,它实际上并没有解决问题。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多