以下作品:
define schemaName = '&schema'
select
table_name,
column_name
from all_tab_columns
where lower(atc.owner) = '&schemaname'
如何降低schema
的输入参数?我尝试添加第二行define schemalow = lower(&schemaName)
,但最终为lower(sys)
,假设用户已输入sys
。
答案 0 :(得分:1)
您可以使用lower('&schemaname')
:
define schemaName = '&schema'
select
table_name,
column_name
from all_tab_columns
where lower(owner) = lower('&schemaname')
或将您的第二个定义更改为:
define schemalow = lower('&schemaname')
select
atc.table_name,
atc.column_name
from all_tab_columns atc
where lower(atc.owner) = &schemalow;
在第二个版本中,新的定义仍然有引号,在适当的位置 - 它们必须围绕一个必须被视为字符串文字的替换变量引用。但请注意,第二个替换变量的使用然后 not 有自己的引号。
稍微简单的测试,用sys
响应提示:
define schemalow = lower('&schemaname')
select count(*) from all_tab_columns atc
where lower(owner) = &schemalow;
COUNT(*)
----------
58842
在这种情况下我个人可能会使用upper()
;但如果您不得不担心所有者名称的情况意味着您有引用标识符 - 这意味着使用大写/小写将隐藏由"MYUSER"
和{{1所拥有的对象之间的任何区别}}。当然,无论如何都应该避免带引号的标识符。而你真正的查询可能是针对其他更有意义的表,而你刚刚使用ATC作为一个例子,在这种情况下,这一点无关......