2013-01-08 55 views
0

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

回答

-1

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

+0

不正确。我已经使用CLOB工作。我只是将插入语句从“EXECUTE IMMEDIATE”更改为“INSERT INTO ...” – Lock