在DB中搜索列

时间:2015-12-08 14:47:30

标签: oracle sqlplus

我收到有关此查询的help from a very great person (@TonyAndrews) yesterday ...

ACCEPT column_name CHAR PROMPT 'Please insert column name' 

SELECT DISTINCT owner, table_name 
FROM all_tab_columns 
WHERE column_name IN ('&column_name'); 

ACCEPT response CHAR PROMPT 'Would you like to search for another column? '

SELECT CASE LOWER('&response.') WHEN 'yes' THEN 'table_search' ELSE 'stop' END AS script
FROM DUAL;

SET TERM ON

@&script.

我创建了两个脚本(table_search& stop)。它只是运行不正常。他给了我正确的信息,我只是愚蠢地想出来。

我使用Oracle Developer并使用运行脚本按钮运行脚本。当我运行它时,它立即出现"你想要搜索另一列"。在脚本输出窗口中显示" old:SELECT DISTINCT owner,table name"我输入"是'"在脚本输出窗口中,它似乎显示初始搜索请求的结果。它确实显示请求窗口要求输入另一列

1 个答案:

答案 0 :(得分:0)

您没有使用我们可用于准确诊断问题的任何信息来“运行不正确”。如果你这样做,那么有人可以提供帮助。

与此同时,查看您的脚本,似乎如果有人以小写字母输入列名,那么您的搜索将无法找到它,因为默认情况下Oracle数据字典会以大写形式保存值。因此,您应将('&column_name')包裹在UPPER

此外,您可能应该修改输入中的任何空格,以防万一有人复制并粘贴一些空格。

最后,您使用IN而不是=,这是故意的吗?如果您正在搜索列并提供之后再次搜索的选项,我假设您一次只能搜索一列:

ACCEPT column_name CHAR PROMPT 'Please insert column name' 

SELECT DISTINCT owner, table_name 
FROM all_tab_columns 
WHERE column_name = TRIM(UPPER('&column_name')); 

希望它有所帮助!

编辑:我一直在看@Tony_Andrews的答案,对我而言似乎相当全面。您是否创建了两个单独的文件“myscript.sql”和“stop.sql”?

在尝试运行SQL * Plus或SQL Developer安装时,您是否也将这些文件存储在默认目录中?

Tony的回答很好,请详细说明您遇到的问题。

EDIT2:好的,继续提供您提供的信息之后,似乎您的初始变量已经设置,尝试在{{1}之前将UNDEFINE column_name response添加到您的myscript.sql文件中行。我还会添加一些ACCEPT column_name CHAR PROMPT ...命令来将屏幕输出减少到你想要的范围。

您的SET文件应如下所示(注意我在运行myscript.sql时也添加了一个双“@”,因为我假设它与stop.sql位于同一目录中文件):

myscript.sql

这适合我。

希望有所帮助