2

可能重复:
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;

但是,上面的代码不起作用,尝试调用外部脚本时失败,而且我似乎在网上搜索中找不到任何东西来确定这是否可能。

4

0 回答 0