U0100080:无法确定列类型。检查表字段类型,若为 BLOB/CLOB 需在 DBE_LOB.LOB_WRITE 后手动添加 UPDATE 语句。
描述
当在 Oracle 中使用 SELECT INTO FOR UPDATE 方式调用 DBE_LOB 高级包中的 append、writeappend、write、copy 等存储过程对于 BLOB/CLOB 数据类型进行写操作时,Oracle 会自动更新数据表中的 BLOB/CLOB 对象。而 GaussDB 不支持自动更新至表,需显式执行 UPDATE 语句。当 UGO 无法验证列是否为 BLOB/CLOB 数据类型时无法自动添加 UPDATE 语句,需要人工确认数据类型,当确认为 BLOB/CLOB 数据类型时,手动修改补充 UPDATE 语句。
数据库类型与版本
- 源库类型与版本:UGO 支持的 Oracle 版本。
- 目标库类型与版本:UGO 支持的 GaussDB 版本。
语法示例
CREATE OR REPLACE PACKAGE BODY "PICCPROD"."PKG_TRANSFER_FORMAT_TP" is PROCEDURE p_create_dsic_10301_0004( i_organ_id IN VARCHAR, i_bank_code IN VARCHAR, i_send_id IN NUMBER, o_scce_flag OUT NUMBER )AS p_clob1 CLOB; p_offset INTEGER:=0; p_info1 VARCHAR2(200); BEGIN SELECT send_text INTO p_clob1 FROM t_bank_text WHERE send_id = i_send_id FOR UPDATE; DBMS_LOB.WRITE(p_clob1,LENGTH(p_info1),p_offset+1,p_info1); p_offset := p_offset + length(p_info1); RETURN; END; end PKG_TRANSFER_FORMAT_TP; /
改造建议
对于上述示例,若确认 t_bank_text 表中的 send_text 列为 BLOB/CLOB 数据类型时,则需要在其下方补充 UPDATE 语句:
DBMS_LOB.WRITE(p_clob1,LENGTH(p_info1),p_offset+1,p_info1);
转换为
DBE_LOB.LOB_WRITE(p_clob1,LENGTH(p_info1),p_offset+1,p_info1); UPDATE t_bank_text SET send_text = p_clob1 WHERE send_id = i_send_id;