Oracle - хранить большие строки в CLOB - PullRequest
0 голосов
/ 11 октября 2018

Мне нужно сохранить тело процедуры в столбце Clob с использованием переменной.Длина строки превышает 4000 символов, поэтому я не могу использовать VarChar2, но с переменной CLOB я получаю сообщение об ошибке " ORA-01422: точное извлечение возвращает больше, чем запрошенное количество строк ".Такая же ошибка появляется с Varchar2.Мой блок PL / SQL:

DECLARE
txt_procedure CLOB;

BEGIN

SELECT text INTO txt_procedure
FROM all_source
WHERE name = 'My_procedure'
ORDER BY line;

INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);

END;
/ 

Как мне вставить тело процедуры в столбец clob?

1 Ответ

0 голосов
/ 11 октября 2018

Поскольку вы получите несколько строк в запросе для каждой строки вашего источника, может помочь следующее:

DECLARE
    txt_procedure CLOB;
BEGIN
    FOR source_r IN ( SELECT text 
                        FROM all_source
                       WHERE name = 'My_procedure'
                       ORDER BY line
                    )
    LOOP
        txt_procedure := txt_procedure || chr(10) || source_r.text;
    END LOOP;

    INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
    VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/ 

ОБНОВЛЕНИЕ

В качестве альтернативы,Вы также можете использовать пакет DBMS_METADATA для этого:

DECLARE
    txt_procedure CLOB;
BEGIN
    txt_procedure := DBMS_METADATA.get_ddl(
                         object_type => 'PROCEDURE',
                         name        => 'My_procedure',
                         owner       => 'YOUR_SCHEMA'
                     );

    INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
    VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...