暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB支持PLPGSQL subtype

原创 MogDB 2024-08-06
171

可获得性

本特性自MogDB 5.0.0版本开始引入。

特性简介

subtype是Oracle PL/SQL中,用户根据已有的类型来自定义的子类型。本特性在PLPGSQL支持该语法和用法,在已有类型的基础上自定义的类型。

客户价值

增强MogDB与Oracle的兼容性,减少应用程序的迁移代价。

特性约束

当前不支持RANGE low_value .. high_value语法

语法描述

SUBTYPE subtype_name IS base_type   { precision [, scale ] } [ NOT NULL ]

base_type可以为任何已有类型或者用户自定义的类型,例如CHAR、DATE 等。PG语法的数组和series类型当前暂不支持。

当前暂不支持subtype,只支持非subtype类型。

示例

-- 场景1:匿名块内部定义subtype并使用 DECLARE subtype varchar2_10 IS varchar2(10); xx varchar2_10; BEGIN xx:='10'; raise notice '%',xx; END; NOTICE: 10 ANONYMOUS BLOCK EXECUTE DECLARE subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; xx tyt_varchar2_10; BEGIN xx(1):='10'; xx(2):='x'; raise notice '%',xx; END; NOTICE: {10,x} ANONYMOUS BLOCK EXECUTE -- 场景2:存储过程内部定义subtype并使用 CREATE PROCEDURE test_subtype_proc IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; xx tyt_varchar2_10; aa varchar2_10; BEGIN xx(1):='10'; xx(2):='x'; aa:='abc'; raise notice '%-%',xx,aa; END; BEGIN test_subtype_proc; END; NOTICE: {10,x}-abc ANONYMOUS BLOCK EXECUTE -- 场景3:函数内部定义subtype并使用 CREATE FUNCTION test_subtype_func RETURN varchar2 IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; xx tyt_varchar2_10; aa varchar2_10; BEGIN xx(1):='10'; xx(2):='x'; aa:='abc'; RETURN xx(1)||'-'||xx(2)||'-'||aa; END; SELECT test_subtype_func; test_subtype_func ------------------- 10-x-abc (1 row) -- 场景4:package内部定义subtype CREATE PACKAGE test_subtype_pkg IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; END test_subtype_pkg; -- 场景5:package内部定义subtype,并在package内部的存储过程作为参数类型使用 CREATE PACKAGE test_subtype_pkg1 IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; PROCEDURE test_proc(a varchar2_10); END test_subtype_pkg1; CREATE PACKAGE test_subtype_pkg2 IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; PROCEDURE test_proc(a test_subtype_pkg2.varchar2_10); END test_subtype_pkg2; CREATE PACKAGE test_subtype_pkg3 IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; PROCEDURE test_proc; END test_subtype_pkg3; CREATE PACKAGE body test_subtype_pkg3 IS PROCEDURE test_proc IS xx varchar2_10; BEGIN xx:=3; END; END test_subtype_pkg3; -- 场景6:在package中定义subtype,在外部存储过程中调用 CREATE PACKAGE test_subtype_pkg4 IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; END test_subtype_pkg4; DECLARE xx test_subtype_pkg4.varchar2_10; BEGIN xx:='10'; raise notice '%',xx; END; DECLARE xx test_subtype_pkg4.tyt_varchar2_10; BEGIN xx(1):='10'; xx(2):='x'; raise notice '%',xx; END; -- 场景7:subtype默认值 DECLARE SUBTYPE empno IS VARCHAR2(10); verb empno := 'run'; BEGIN null; END; -- 场景8:在package的proc参数中使用subtype CREATE OR REPLACE package test_subtype_pkg5 IS subtype varchar2_10 IS varchar2(10); type tyt_varchar2_10 IS TABLE of varchar2_10; END test_subtype_pkg5; CREATE OR REPLACE package tst_pro IS PROCEDURE tst_pro(a test_subtype_pkg5.varchar2_10); END tst_pro; CREATE OR REPLACE package body tst_pro IS PROCEDURE tst_pro(a test_subtype_pkg5.varchar2_10) IS  BEGIN  null; END; END tst_pro; -- 场景9:subtype作为record的元素 CREATE OR REPLACE package pki_type as subtype tstr IS varchar(60); subtype tstatus IS varchar(3); type t_data IS record( cust_no tstr, cust_flag tstatus); type t_data_array IS TABLE of t_data INDEX BY binary_integer; END pki_type;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论