Oracle - обновить BLOB с помощью PL / SQL - PullRequest
0 голосов
/ 24 апреля 2018

Мне нужно обновить существующее значение BLOB в таблице, используя PL / SQL.
Я имею дело с плохим дизайном таблицы, столбец должен быть CLOB, и это не изменится.

Шаги, которые я хочу выполнить: 1) выбрать BLOB 2) преобразовать BLOB в CLOB 3) изменить CLOB 3) преобразовать CLOB в BLOB 4) обновить столбец BLOB с новым значением

4-й шаг, я не знаю, как это сделать.Я надеялся, что BLOB можно будет обновить напрямую, но единственные примеры, которые я нахожу, - это чтение файла в столбец BLOB-объектов или использование другого языка программирования.

1 Ответ

0 голосов
/ 25 апреля 2018

Я понимаю ваш вопрос, но я думаю, что должна быть другая проблема.

Решение

Просто обновите его ..

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;
...