0

我已经构建了以下过程来将数据读入 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 对我来说至关重要。

4

0 回答 0