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