有没有办法在没有用户输入的情况下在 sqlplus 脚本中设置参数的默认值?
例如,我有一个 SQL 脚本 session.sql:
设置验证关闭
设置 TERMOUT 关闭
定义 uname = '&1'
列 search_uname new_value search_uname
SELECT CASE WHEN '&uname' = '' THEN '%' ELSE UPPER('&uname') END AS search_uname
从双;
设置 TERMOUT ON
SELECT sid, serial, username FROM v$session WHERE username LIKE '&search_uname';
我想像这样从 sqlplus 调用它:
SQL> @会话
输入 1 的值:
SID 序列号# 用户名
---------- ---------- ------------------
56 20577 上下文
......
选择了 236 行。
SQL> @会话“”
SID 序列号# 用户名
---------- ---------- ------------------
56 20577 上下文
......
选择了 236 行。
SQL> @sessions SDE
SID 序列号# 用户名
---------- ---------- ------------------
113 56675 SDE
165 64881 SDE
......
选择了 43 行。
SQL>
当我被要求输入参数时,我只能为参数传递一个空值,或者我可以通过“”在脚本名称后传递一个空参数。但这种行为非常烦人。某种 IF DEFINED "&1" 将非常有用。
您是否有任何提示或技巧应该如何在没有不必要的用户交互的情况下在 sqlplus 脚本中应用 WHERE 条件,无论是否定义了参数?
解决方案
根据 Martin 链接的文章,我修改了以前的脚本以在不要求参数值的情况下工作:
设置验证关闭
设置 TERMOUT 关闭
第 1 列新值 1
SELECT '' "1" FROM dual WHERE ROWNUM = 0;
定义 uname = '&1'
设置 TERMOUT ON
从 v$session 中选择 sid、序列号、用户名
WHERE username LIKE UPPER(DECODE('&uname', '', '%', '&uname'));
取消定义 1