如何在Oracle中对变量运行lower()?

时间:2017-01-19 18:03:51

标签: oracle

以下作品:

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

1 个答案:

答案 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作为一个例子,在这种情况下,这一点无关......