如何让SQL*Plus脚本无传入参数时不提示定义参数,走默认逻辑
SQL*Plus脚本参数默认值设置方案
实现方法
方法一:兼容所有版本的通用写法
利用COLUMN命令预定义替换变量的默认值,无需依赖高版本特性,修改后的script.sql内容如下:
-- 预定义&1参数默认值为空 column 1 new_value 1 noprint select '' as "1" from dual where 1 = 2; -- 接收参数,未传参时自动使用上面设置的空值 define my_val = '&1' -- 你的业务逻辑,此处示例为打印参数 prompt &my_val
逻辑说明:
column 1 new_value 1:将后续查询结果中列名为1的取值,赋值给替换变量1where 1=2条件永远不成立,查询不会返回结果,只有当用户未传入&1参数时,空值才会生效;如果用户已经传入参数,传入值优先级更高,不会被覆盖- 如果需要设置非空默认值,只需把
select ''中的空字符串替换为你的目标默认值即可,比如select 'default_value' as "1" from dual where 1=2
方法二:12cR2及以上版本极简写法
高版本SQL*Plus支持DEFINE命令直接指定默认值,脚本可简化为:
define my_val = '&1' default '' prompt &my_val
执行效果验证
- 传参执行
sqlplus /nolog @script.sql foo时,正常输出foo - 不传参执行
sqlplus /nolog @script.sql时,不会弹出参数输入提示,my_val自动设为空字符串,可直接执行后续默认逻辑
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

