可能重复:
SQLplus 解码以执行脚本
我已经看遍了,似乎找不到我的问题的答案,但我对 oracle 比较陌生,但精通数据库/SQL,所以这可能是我的误解。我正在使用 Oracle .SQL 文件,在 Linux (ubuntu) 中混合使用 PL/SQL 和 SQL*Plus 来填写数据库中的基本表,并且我有许多从一个“主脚本”调用的脚本。
例如,我有一个主脚本,如下所示:
@folder1/script1.sql
@folder2/script2.sql
在每个脚本中,我都有 SQL 语句调用我的数据库中的一个包来填充一些字段。我想要做的是提示用户输入以确定环境,然后根据该输入运行某些脚本。我知道如何在我的脚本中获取一个变量,但是当我这样做时,我似乎无法调用外部脚本。
因此,例如,我知道如何使用这样的变量:
set define on
def &&env=env1
begin
if '&&env' = 'env1' then
.
.
.
.
END IF;
END;
这将提示用户输入我想要的变量,但我似乎无法像上面提到的那样在这个块内调用外部脚本。据我所知,这是因为在 Begin/End 块内它正在执行 PL/SQL,而在它之外是 SQL*Plus(我可能是错的,对于 oracle 来说还是比较新的)
在网上搜索,我发现人们建议在脚本中使用 EXECUTE IMMEDIATE 来调用外部脚本,虽然这被认为是不好的做法,但我似乎可以让它工作。我认为这是因为脚本需要在服务器上,因为 PL/SQL 是服务器端(在我的情况下不起作用)。
归根结底,我想要的是起到这种作用的东西,但这样做似乎不起作用。
set define on
def &&env=env1
begin
if '&&env' = 'env1' then
@folder1\script1.sql
@folder1\script2.sql
ELSEIF '&&env' = 'env2'
@folder2\script1.sql
@folder2\script2.sql
END IF;
END;
但是,上面的代码不起作用,尝试调用外部脚本时失败,而且我似乎在网上搜索中找不到任何东西来确定这是否可能。