文档首页/ 数据库和应用迁移 UGO/ 用户指南/ 语法转换指南/ 转换错误码/ Oracle To GaussDB 转换错误码/ U0100053: GaussDB暂不支持PACKAGE中RECORD类型属性设置默认值或声明为NOT NULL
更新时间:2025-10-22 GMT+08:00
分享

U0100053: GaussDB暂不支持PACKAGE中RECORD类型属性设置默认值或声明为NOT NULL

描述

GaussDB暂不支持PACKAGE中RECORD类型属性设置默认值或声明为NOT NULL。

数据库类型与版本

  • 源库类型与版本:UGO 支持的 Oracle 版本。
  • 目标库类型与版本:UGO 支持的 GaussDB 版本。

语法示例

Oracle脚本:

CREATE OR REPLACE PACKAGE simple_record_pkg AS
    TYPE person_rec IS RECORD (
        id NUMBER := 0,
        name VARCHAR2(100) := '无名氏',
        age NUMBER := 18,
        is_active BOOLEAN := TRUE
    );
    FUNCTION create_default_person(v_age person_rec ) RETURN person_rec;  --参数的数据类型是record并且带默认值
END simple_record_pkg;
/
CREATE OR REPLACE PACKAGE BODY simple_record_pkg AS
    FUNCTION get_default_person RETURN person_rec ;
    FUNCTION get_default_person RETURN person_rec IS
        v_default person_rec; 
    BEGIN
        RETURN v_default;
    END;
    FUNCTION create_default_person(v_age in person_rec  ) RETURN person_rec IS
    v_person person_rec := v_age;
    BEGIN
        DBMS_OUTPUT.PUT_LINE('===== 人员信息 =====');
        DBMS_OUTPUT.PUT_LINE('ID: ' || v_person.id);
        DBMS_OUTPUT.PUT_LINE('姓名: ' || v_person.name);
        DBMS_OUTPUT.PUT_LINE('年龄: ' || v_person.age);
        DBMS_OUTPUT.PUT_LINE('活跃: ' || 
            CASE WHEN v_person.is_active THEN '是' ELSE '否' END);
        RETURN v_person;   
    END;
END simple_record_pkg;
/

改造建议

1、package声明record带默认值注释掉;

2、在使用record类型前面,显示的给record类型赋默认值。

GaussDB改写后的脚本:

CREATE OR REPLACE PACKAGE simple_record_pkg AS
    TYPE person_rec IS RECORD (
       id NUMBER /* := 0*/,
        name VARCHAR2(100) /*:= '无名氏'*/,
        age NUMBER /* := 18*/,
        is_active BOOLEAN /* := TRUE*/
    );
    FUNCTION create_default_person(v_age person_rec ) RETURN person_rec;
END simple_record_pkg;
/
CREATE OR REPLACE PACKAGE BODY simple_record_pkg AS
    FUNCTION get_default_person RETURN person_rec ;
    FUNCTION get_default_person RETURN person_rec IS
        v_default person_rec; 
    BEGIN
        RETURN v_default;
    END;
    
    FUNCTION create_default_person(v_age in person_rec  ) RETURN person_rec IS
    v_person person_rec := v_age;
    BEGIN
        ----显示的给record赋默认值
        v_person.id:=0;
        v_person.name:='无名氏';
        v_person.age:=18;
        v_person.is_active:=TRUE;           
        DBE_OUTPUT.PRINT_LINE('===== 人员信息 =====');
        DBE_OUTPUT.PRINT_LINE('ID: ' || v_person.id);
        DBE_OUTPUT.PRINT_LINE('姓名: ' || v_person.name);
        DBE_OUTPUT.PRINT_LINE('年龄: ' || v_person.age);
        DBE_OUTPUT.PRINT_LINE('活跃: ' || 
            CASE WHEN v_person.is_active THEN '是' ELSE '否' END);
        RETURN v_person;   
    END;
END simple_record_pkg;
/

相关文档