Oracle - 使用 PL/SQL 更新 BLOB

elu*_*ive 3 oracle plsql blob sql-update

我需要使用 PL/SQL 更新表中预先存在的 BLOB 值。
我正在处理糟糕的表设计,该列应该是 CLOB 并且这一点不会改变。

我想要执行的步骤:

  1. 选择BLOB
  2. 将 BLOB 转换为 CLOB
  3. 修改CLOB
  4. 将 CLOB 转换为 BLOB
  5. 使用新值更新 BLOB 列

第四步我不知道该怎么做。我希望 BLOB 可以直接更新,但我找到的唯一示例是将文件读入 blob 列或使用其他编程语言。

kar*_*ara 5

我理解你的问题,但我认为肯定还有另一个问题。

解决方案

就更新一下吧..

UPDATE myTable SET myBlobColumn = myBlob WHERE myCondition = 1;
Run Code Online (Sandbox Code Playgroud)

完整示例

DECLARE
    myVarcharVar   VARCHAR2(1000);
    myClobVar   CLOB;
    myBlobVar   BLOB;
BEGIN
    EXECUTE IMMEDIATE 'TRUNCATE TABLE TTEST'; -- ensure out testdata will be correct.
    INSERT INTO TTEST (myBlob, myClob, myVarchar) VALUES(utl_raw.cast_to_raw('1111'), '2222', '3333'); -- insert our data

    -- Attention: ONLY ONE ROW => NO WHERE-CONDITIONS to simplify the code!

    SELECT myVarchar INTO myVarcharVar FROM TTEST;

    UPDATE TTEST SET myClob = myVarcharVar;

    SELECT myClob INTO myClobVar FROM TTEST;

    UPDATE TTest SET myBlob = utl_raw.cast_to_raw(myClobVar);

    SELECT myBlob, myClob, myVarchar INTO myBlobVar, myClobVar, myVarcharVar FROM TTest;

    dbms_output.put_line('Blob:   ' || utl_raw.cast_to_varchar2(myBlobVar)); 
    dbms_output.put_line('Clob:   ' || myClobVar); 
    dbms_output.put_line('Varchar:' || myVarcharVar); 
END;
Run Code Online (Sandbox Code Playgroud)