Возврат состояния сканирования при запросе значений переменных - PullRequest
2 голосов
/ 11 марта 2010

Как определить текущее состояние 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.

1 Ответ

1 голос
/ 12 марта 2010

команда sql plus STORE должна делать это, к сожалению, она не сохраняет состояние SCAN (SQL Plus 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
...