plsql - Oracle - store large string in CLOB
问题描述
I need to save a procedure body into a Clob column with a use of variable. String is longer than 4000 characters, so I can't use VarChar2, but with CLOB variable I receive error "ORA-01422: exact fetch returns more than requested number of rows". Same error appears with Varchar2. My PL/SQL block:
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;
/
How could I insert procedure body into clob column ?
解决方案
As you will get multiple rows from your query for every line of your source, the following might help:
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;
/
UPDATE
As an alternative, you might also use the DBMS_METADATA package for this:
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;
/
推荐阅读
- apache-spark - 如何使用 sqoop 仅将两个表导入配置单元
- visual-studio-code - libxkbcommon.so.0:安装 VSCode 更新后没有可用的版本信息
- java - Sonar 和 findsecbugs 使用 Spring Expression 时的潜在代码注入
- r - 如何创建具有 Gamma 分布的 QQ 图?
- mysql - 同时使用 MongoDB 和 MySQL
- c# - 如何检查对象的任何子对象是否处于活动状态?
- react-native - 我很难在 react native 中滚动平面列表
- swift - 无法修复“编译器无法在合理时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式”
- python - Pandas:如何在不循环的情况下使用 applymap/apply 函数对数据框进行争论
- javascript - 没有表列时如何传递参数 (GeomFromText('Polygon (( ? ?,))) node-maria