我收到有关此查询的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"我输入"是'"在脚本输出窗口中,它似乎显示初始搜索请求的结果。它确实显示请求窗口要求输入另一列
答案 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
这适合我。
希望有所帮助