如何在目录中执行所有pl / sql文件(install_db脚本)

时间:2014-06-13 15:58:48

标签: oracle plsql install

我正在尝试实施本文所述的内容:http://www.rwijk.nl/AboutOracle/psdua.pdf

(简而言之,我的sql文件在目录'myApp / tables /','myApp / priviledges /','myApp / sequences /'中创建数据库对象,如表,权限,序列,索引等) ...我想执行这些文件来安装我的数据库。)

有一个示例应该看起来像install_db.sql脚本p11-12,但sql文件的执行是硬编码的:

@@&tables_path.SCA_OPNAMES.sql 
@@&tables_path.SCA_METERSTANDEN.sql
@@&sequences_path.SCA_MSD_SEQ1.sql
@@&sequences_path.SCA_ONE_SEQ1.sql
@@&indexes_path.MSD_ONE_FK1_I.sql
@@&privs_path.privileges.sql &SCHEMAPREFIX

我更愿意执行给定目录中的所有文件,但这似乎很棘手。

有一个很好的帖子可以获取目录中的文件列表:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:439619916584它运行良好。

所以在这一点上,我有一个临时表中的文件列表,现在我想执行这些文件。

令人惊讶的是,我坚持这一步。 我想做这样的事情:

for tab in (select filename from dir_list) loop
    @tab.filename;
end loop;

但由于我不在pl / sql程序中,所以它不起作用。我可以从pl / sql程序执行文件吗?答案对我来说不是很清楚,我读了这个问题的相反答案。

感谢您的帮助,

1 个答案:

答案 0 :(得分:0)

您可以尝试使用动态PL / SQL 例如,编写一个PL / SQL过程   - 将文件的内容读入变量然后   - 使用EXECUTE IMMEDIATE动态SQL构造执行PL / SQL。