我有6个测试环境和1个生产环境。我创建了许多与Oracle视图不同的报告,并且需要一种方法来在不同环境之间同步这些报告。将select语句插入表中 - ORA-06502
我想制作一个脚本,我可以运行,它将基本上输出一个命令列表,我可以将其复制并粘贴到我的不同环境中以创建必要的视图/公共同义词和特权。
我必须把结果文本放到数据库表中,因为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
变量中的某些文本包含单引号,那么在将数据插入表之前,如何转义该引号?
不正确。我已经使用CLOB工作。我只是将插入语句从“EXECUTE IMMEDIATE”更改为“INSERT INTO ...” – Lock