0

我有 6 个测试环境和 1 个生产环境。我创建了很多不同的报表作为 Oracle 视图,并且需要一种在环境之间同步这些报表的方法。

我正在尝试制作一个可以运行的脚本,它基本上会输出一个命令列表,我可以将这些命令复制并粘贴到我的不同环境中,以创建必要的视图/公共同义词和权限。

我必须将生成的文本放入数据库表中,因为dbms_output.put_line它可以显示多少个字符有一定的限制。

我有以下内容,但如果我尝试插入数据,我会得到ORA-06502: PL/SQL: numeric or value error. 我猜这可能与没有被转义的字符文字有关。

CREATE OR REPLACE PROCEDURE EXPORT_REPORTS AS
  statements CLOB;
  tmp_statement CLOB;


  CURSOR all_views IS
     SELECT
      OWNER,
      VIEW_NAME,
      TEXT
    FROM
      ALL_VIEWS
    WHERE
      OWNER = 'PAS'
  ;
BEGIN
  FOR v IN all_views LOOP
    tmp_statement := 'CREATE OR REPLACE FORCE VIEW "' || v.OWNER || '"."' || v.VIEW_NAME || '" AS ' || CHR(13) || CHR(10) || v.TEXT;
    statements := statements || tmp_statement;
  END LOOP;
  EXECUTE IMMEDIATE 'INSERT INTO VIEW_EXPORTS VALUES ('''|| statements || ''')';
END EXPORT_REPORTS;

知道我能做些什么来尝试解决这个问题吗?如果是因为statements变量中的某些文本包含单引号,那么在将数据插入表之前如何进行转义?

4

2 回答 2

0

这听起来像是 Data Pump 的工作。

Oracle 数据泵技术支持将数据和元数据从一个数据库高速移动到另一个数据库。

http://docs.oracle.com/cd/B28359_01/server.111/b28319/dp_overview.htm

为了获取数据库对象 DDL,我建议使用 DBMS_METADATA 包。

http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_metada.htm#BGBDJAHH

于 2013-01-08T20:49:18.830 回答
-1

您不能将 CLOB 用作局部变量的数据类型。改用 VARCHAR

于 2013-01-08T02:54:36.547 回答