Oracle - 使用PL / SQL更新BLOB

时间:2018-04-24 17:04:27

标签: oracle plsql sql-update blob

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

我想要执行的步骤:     1)选择BLOB     2)将BLOB转换为CLOB     3)修改CLOB     3)将CLOB转换为BLOB     4)用新值

更新BLOB列

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

2 个答案:

答案 0 :(得分:0)

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

解决方案

只需更新它..

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;

答案 1 :(得分:0)

update table_name  set column_name = utl_raw.cast_to_raw ('value')  where id = 'your_id';