我已经构建了以下过程来将数据读入 CLOB(请参见下面的代码示例)。 现在我想为 LONG 列提供相同的功能。
我知道 LONG 在 ORACLE 中已被弃用,但对于我的特殊情况,有必要继续使用 LONG(目前)。
CREATE OR REPLACE PROCEDURE my.p_update_proc (
p_table_name IN VARCHAR2,
p_column_name IN VARCHAR2,
p_pattern IN VARCHAR2
)
as
l_sql varchar2(4000);
l_bfile bfile := bfilename('MY_DIR',p_table_name||'.'||p_pattern||'.txt');
l_data clob;
l_soffset NUMBER := 1;
l_doffset NUMBER := 1;
l_lang NUMBER := 0;
l_warn NUMBER;
BEGIN
DBMS_LOB.createtemporary (lob_loc => l_data,cache => TRUE,
dur => DBMS_LOB.call);
dbms_lob.fileopen( l_bfile, DBMS_LOB.file_readonly );
DBMS_LOB.loadclobfromfile(l_data, l_bfile, DBMS_LOB.LOBMAXSIZE,
l_soffset, l_doffset, 0, l_lang, l_warn );
dbms_lob.fileclose(l_bfile);
dbms_output.put_line(l_sql); -- to debug/trace your dynamic statement
l_sql := 'update ' || p_table_name || ' set '|| p_column_name || '='
|| ':1' || ' where ' || p_column_name || ' like ' || '''' || p_pattern || ''
';
execute immediate l_sql using l_data;
END; --Procedure
/
我知道约束“像'模式'”不适用于 LONG,我可以接受修改,以便我测试表行中的不同字段以识别该行(并在以后丢弃它) .
将 CLOB 改回 LONG(通过 ALTER TABLE MODIFY COLUMN)也不起作用,因此找到一种方法将文件内容填充到已经存在的表中的 LONG 对我来说至关重要。