我需要使用PL / SQL更新表中预先存在的BLOB值 我正在处理糟糕的表设计,列应该是CLOB而且不会改变。
我想要执行的步骤: 1)选择BLOB 2)将BLOB转换为CLOB 3)修改CLOB 3)将CLOB转换为BLOB 4)用新值
更新BLOB列第四步我不知道该怎么做。我希望BLOB可以直接更新,但我发现的唯一例子是将文件读入blob列或使用其他编程语言。
答案 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';