我有 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
变量中的某些文本包含单引号,那么在将数据插入表之前如何进行转义?