假设您有一个Oracle 10g(10.2.0.3)数据库方案,该方案无法修改(因为它不在您的控制之下),并且想要将大字符串(100k +个字符)插入某些CLOB字段中,以便使用PL / SQL进行测试(更精确地说:可以通过sqlplus通过批处理文件执行的SQL脚本)。是否有可能?
我发现了几种使用.NET,oci等或创建存储过程的解决方案,但是我需要一个可以在SQL Developer中运行的解决方案,例如,无需对DB方案做任何修改(例如添加存储过程等)。
我已经尝试了几种方法,例如
-- Disclaimer: I typed this by heart just for SO, there might be syntax errors
DECLARE
v_test CLOB;
v_clob_to_update CLOB;
BEGIN
-- Note: rpad only works up to 32755 or something
v_test := to_clob( rpad( 'This is a very long string', 30000, '.' ) );
v_test := v_test || to_clob( rpad( '.', 30000, '.' ) );
SELECT my_clob_field INTO v_clob_to_update FROM my_table WHERE my_id = 1234 FOR UPDATE;
DBMS_LOB.WRITE( v_clob_to_update, LENGTH( v_test ), 1, v_test );
END;
但我总是最终收到“字符串文字太长”或“数字或值错误”消息。
在遵守我所给予的限制的同时,是否可以这样做?
如果您使用该dbms_lob
包写入v_test
,则应该克服所得到的错误。字符串串联运算符||
尚未重载以处理LOB
数据。
换句话说,而不是
v_test := v_test || to_clob( rpad( '.', 30000, '.' ) );
你可能想要
dbms_lob.writeAppend( v_test, 30000, rpad( '.', 30000, '.' ) );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句