Oracle - 使用 PL/SQL 更新 BLOB

问题描述 投票:0回答:2

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

我要执行的步骤:

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

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

oracle plsql sql-update blob
2个回答
5
投票

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

解决方案

更新一下吧..

UPDATE myTable SET myBlobColumn = myBlob WHERE myCondition = 1;

完整示例

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;

4
投票
update table_name  set column_name = utl_raw.cast_to_raw ('value')  where id = 'your_id';
© www.soinside.com 2019 - 2024. All rights reserved.