【问题标题】:Oracle - Update BLOB with PL/SQLOracle - 使用 PL/SQL 更新 BLOB
【发布时间】:2018-10-05 01:06:27
【问题描述】:
我需要使用 PL/SQL 更新表中预先存在的 BLOB 值。
我正在处理糟糕的表设计,列应该是 CLOB 并且不会改变。
我要执行的步骤:
1)选择BLOB
2) 将 BLOB 转换为 CLOB
3)修改CLOB
3) 将 CLOB 转换为 BLOB
4) 用新值更新 BLOB 列
第四步我不知道怎么做。我希望 BLOB 可以直接更新,但我发现的唯一示例是将文件读入 blob 列或使用另一种编程语言。
【问题讨论】:
标签:
oracle
plsql
sql-update
blob
【解决方案1】:
我理解你的问题,但我认为肯定有另一个问题。
解决方案
更新一下吧..
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;
【解决方案2】:
update table_name set column_name = utl_raw.cast_to_raw ('value') where id = 'your_id';