oracle设置默认值sql,oracle – 未传递SQLPlus脚本的参数的默认值

有没有办法在没有用户输入的情况下在sqlplus脚本中设置参数的默认值?

例如,我有一个sql脚本sessions.sql:

SET VERIFY OFF

SET TERMOUT OFF

DEFINE uname = '&1'

COLUMN search_uname new_value search_uname

SELECT CASE WHEN '&uname' = '' THEN '%' ELSE UPPER('&uname') END AS search_uname

FROM dual;

SET TERMOUT ON

SELECT sid,serial,username FROM v$session WHERE username LIKE '&search_uname';

我想从sqlplus中调用它,如下所示:

sql> @sessions

Enter value for 1:

SID SERIAL# USERNAME

---------- ---------- ------------------------------

56 20577 CONTEXT

.....

236 rows selected.

sql> @sessions ""

SID SERIAL# USERNAME

---------- ---------- ------------------------------

56 20577 CONTEXT

.....

236 rows selected.

sql> @sessions SDE

SID SERIAL# USERNAME

---------- ---------- ------------------------------

113 56675 SDE

165 64881 SDE

.....

43 rows selected.

sql>

当我被要求输入参数时,我只能为参数传递一个空值,或者我可以在脚本名称之后通过“”传递一个空参数.但这种行为非常烦人.某种IF定义的“& 1”将非常有用.

你是否有任何提示或技巧如何在sqlplus脚本中应用WHERE条件来定义或不使用不必要的用户交互?

根据马丁链接的文章,我修改了以前的脚本,无需参数值即可工作:

SET VERIFY OFF

SET TERMOUT OFF

column 1 new_value 1

SELECT '' "1" FROM dual WHERE ROWNUM = 0;

define uname = '&1'

SET TERMOUT ON

SELECT sid,serial#,username FROM v$session

WHERE username LIKE UPPER(DECODE('&uname','','%','&uname'));

undefine 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值