VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

支持type自带构造器使用及new构造器语法

功能描述

Vastbase支持使用Oracle中的type类型自带的构造器函数创建和使用,以及通过使用new构造器函数来创建新的集合对象。

注意事项

该功能仅在数据库兼容模式为Oracle时能够使用(即创建DB时DBCOMPATIBILITY='A'),在其他数据库兼容模式下不能使用该特性。

语法格式

collection_name collection_type [:=collection_type(...)];
collection_name collection_type [:=new collection_type(...)];

参数说明

  • collection_name

    集合变量的名字。

  • collection_type

    有两层含义,一层它代表着一个先前以及声明的集合类型的名字,另一层它代表和该类型同名的构造函数。

示例

示例1: 用type自带构造器和new构造器初始化并赋值变量:

1、创建Oracle兼容模式下的数据库并创建type。

create database db1 dbcompatibility 'A';
\c db1
create type type1 as (i int, j varchar(20));

2、用type自带构造器和new构造器初始化并赋值变量。

declare
        n1 type1 := type1();
        n2 type1 := type1(1,'n1');
        n3 type1 := new type1();
        n4 type1 := new type1(1, 'n1');
begin
        raise notice '%' ,n1;
        raise notice '%' ,n2;
        raise notice '%' ,n3;
        raise notice '%' ,n4;
end;
/

执行结果:

NOTICE:  (,)
NOTICE:  (1,n1)
NOTICE:  (,)
NOTICE:  (1,n1)
ANONYMOUS BLOCK EXECUTE

示例2: 在声明类型时直接初始化并赋值变量 。

1、创建Oracle兼容模式下的数据库。

create database db1 dbcompatibility 'A';
\c db1

2、设置serveroutput 为on(允许将dbms_output.put_line的输出信息输出至vsql的命令界面的屏幕上)。

set serveroutput =on;

3、在声明类型时直接用type自带构造器初始化并赋值变量。

DECLARE 
TYPE nest_loc_type IS TABLE OF VARCHAR2( 13 ) NOT NULL;
nest_loc_tab nest_loc_type := nest_loc_type( 'NEW YORK', 'DALLAS', 'CHICAGO' );  -->在声明时直接初始化并赋值:
BEGIN 
FOR i IN 1 .. nest_loc_tab.COUNT 
LOOP 
DBMS_OUTPUT.put_line( 'nest_loc_tab(' || i || ') value is ' || nest_loc_tab( i ) ); 
END LOOP; 
END;
/

结果展示为:

nest_loc_tab(1) value is NEW YORK
nest_loc_tab(2) value is DALLAS
nest_loc_tab(3) value is CHICAGO
ANONYMOUS BLOCK EXECUTE

4、在声明类型时直接用new构造器初始化并赋值变量。

DECLARE
TYPE nest_loc_type IS TABLE OF VARCHAR2( 13 ) NOT NULL;
nest_loc_tab nest_loc_type :=new  nest_loc_type( 'NEW YORK', 'DALLAS', 'CHICAGO' ); -->在声明时使用new直接初始化并赋值
BEGIN
FOR i IN 1 .. nest_loc_tab.COUNT 
LOOP
DBMS_OUTPUT.put_line( 'nest_loc_tab(' || i || ') value is ' || nest_loc_tab( i ) );
END LOOP;
END;
/

结果展示为:

nest_loc_tab(1) value is NEW YORK
nest_loc_tab(2) value is DALLAS
nest_loc_tab(3) value is CHICAGO
ANONYMOUS BLOCK EXECUTE