注意:以下代码中的数据表来自TPC-H生成的数据表
--1.CE_COLUMN_TABLE 这个函数使用一个已经存在的列存储表格作为数据源,选取其全部或者部分列,返回相应内容绑定到一个表变量上。
-- 注意:TT_CUSTOMER 为创建的表类型
create type TT_CUSTOMER as table(
C_CUSTKEY integer,
C_NAME varchar(25),
C_ADDRESS varchar(40)
);
DROP PROCEDURE ProcWith_CE_COLUMN_TABLE;
CREATE PROCEDURE ProcWith_CE_COLUMN_TABLE(OUT o1 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView AS
BEGIN
o1 = CE_COLUMN_TABLE("CUSTOMER",["C_CUSTKEY","C_NAME","C_ADDRESS"]);
--相当于o1 = SELECT C_CUSTKEY,C_NAME,C_ADDRESS FROM CUSTOMER;
END;
CALL ProcWith_CE_COLUMN_TABLE(NULL);
--2.CE_PROJECTION 这个函数选取表变量中的一列或者多列,可以对每列进行重命名,计算表达式或者使用过滤条件。
DROP PROCEDURE ProcWith_CE_PROJECTION;
CREATE PROCEDURE ProcWith_CE_PROJECTION(OUT o1 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView1 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o1 = CE_PROJECTION(:product,["C_CUSTKEY","C_NAME","C_ADDRESS" AS "C_ADDRESS"]);
--相当于o1 = SELECT C_CUSTKEY,C_NAME,C_ADDRESS AS C_ADDRESS FROM CUSTOMER;
END;
CALL ProcWith_CE_PROJECTION(NULL)
--3.CE_JOIN 这个函数可以得出给出的两个表变量通过某些属性相关联的内连接的结果集。对于相关联的两个属性,结果中只包含一个,因此要求必须有相同的属性名,否则提前进行重命名。
DROP PROCEDURE ProcWith_CE_JOIN;
CREATE PROCEDURE ProcWith_CE_JOIN(OUT o3 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView2 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o1 = CE_PROJECTION(:product,["C_CUSTKEY","C_NAME","C_ADDRESS"]);
o2 = CE_COLUMN_TABLE("CUSTOMER",["C_CUSTKEY"]);
o3 = CE_JOIN(:o1,:o2,["C_CUSTKEY"],["C_CUSTKEY","C_NAME","C_ADDRESS"]);
--相当于o3 = SELECT C_CUSTKEY,C_NAME,C_ADDRESS FROM o1 INNER JOIN o2 ON o1.C_CUSTKEY=o2.C_CUSTKEY
END;
CALL ProcWith_CE_JOIN(NULL)
--4.CE_JOIN_VIEW 这个函数使用一个已经存在的连接视图(即Attribute View,属性视图)作为数据源,选取其全部或者部分列,返回相应内容绑定到一个表变量上。
DROP PROCEDURE ProcWith_CE_JOIN_VIEW;
CREATE PROCEDURE ProcWith_CE_JOIN_VIEW(OUT product2 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView3 AS
BEGIN
product2 = CE_JOIN_VIEW("_SYS_BIC"."demo/CUSTOMER",["C_CUSTKEY","C_NAME","C_ADDRESS"]);
END;
CALL ProcWith_CE_JOIN_VIEW(NULL)
--5.CE_OLAP_VIEW 这个函数使用一个已经存在的OLAP视图(即Analytical View,分析视图)作为数据源,选取一些关键值或者维度作为参数,按这些维度分度并求对应的聚合值,返回相应内容绑定到一个表变量上。
DROP PROCEDURE ProcWith_CE_OLAP_VIEW;
CREATE PROCEDURE ProcWith_CE_OLAP_VIEW(OUT product2 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView4 AS
BEGIN
product2 = CE_OLAP_VIEW("_SYS_BIC"."demo/CUSTOMER_ORDER",["C_CUSTKEY","C_NAME","C_ADDRESS"]);
END;
CALL ProcWith_CE_OLAP_VIEW(NULL)
--6.CE_CALC_VIEW 这个函数使用一个已经存在的计算视图(即Calculation View视图)作为数据源,选取其全部或部分属性,返回相应内容绑定到一个表变量上。
--创建输出表类型
create type TT_CA_DEMO as table(
P_NAME VARCHAR(55),
P_RETAILPRICE DECIMAL(15,2),
P_SIZE INTEGER
);
DROP PROCEDURE ProcWith_CE_CALC_VIEW;
CREATE PROCEDURE ProcWith_CE_CALC_VIEW(OUT product2 TT_CA_DEMO)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView5 AS
BEGIN
product2 = CE_CALC_VIEW("_SYS_BIC"."demo/CA_DEMO",["P_NAME","P_RETAILPRICE","P_SIZE"]);
END;
CALL ProcWith_CE_CALC_VIEW(NULL)
--7.CE_LEFT_OUTER_JOIN 使用方式与CE_JOIN相同,实现左外连接的功能。
DROP PROCEDURE ProcWith_CE_LEFT_OUTER_JOIN;
CREATE PROCEDURE ProcWith_CE_LEFT_OUTER_JOIN(OUT o3 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView6 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o1 = CE_PROJECTION(:product,["C_CUSTKEY","C_NAME","C_ADDRESS"]);
o2 = CE_COLUMN_TABLE("CUSTOMER",["C_CUSTKEY"]);
o3 = CE_LEFT_OUTER_JOIN(:o1,:o2,["C_CUSTKEY"],["C_CUSTKEY","C_NAME","C_ADDRESS"]);
END;
CALL ProcWith_CE_LEFT_OUTER_JOIN(NULL)
--8.CE_RIGHT_OUTER_JOIN 使用方式与CE_JOIN相同,实现右外连接的功能。
DROP PROCEDURE ProcWith_CE_RIGHT_OUTER_JOIN;
CREATE PROCEDURE ProcWith_CE_RIGHT_OUTER_JOIN(OUT o3 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView7 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o1 = CE_PROJECTION(:product,["C_CUSTKEY","C_NAME","C_ADDRESS"]);
o2 = CE_COLUMN_TABLE("CUSTOMER",["C_CUSTKEY"]);
o3 = CE_RIGHT_OUTER_JOIN(:o1,:o2,["C_CUSTKEY"],["C_CUSTKEY","C_NAME","C_ADDRESS"]);
END;
CALL ProcWith_CE_RIGHT_OUTER_JOIN(NULL)
--9.CE_CALC 这个函数用于其它关系操作的函数内部,通常是计算一个表达式的值并且绑定为一个新列,比较常用于CE_PROJECTION函数中。
--他一般有两个参数,分别为计算的表达式和结果的数据类型。计算的表达式中还可以使用一些函数,包括转换函数、字符串函数、数学函数、日期函数以及一些其它函数。
DROP TYPE TT_CE_CALC_RES
CREATE TYPE TT_CE_CALC_RES AS TABLE(
C_NAME VARCHAR(25),
C_ACCTBAL DECIMAL(15,2),
C_ACCTBAL_VAT DECIMAL(15,2)
)
DROP PROCEDURE ProcWith_CE_CALC;
CREATE PROCEDURE ProcWith_CE_CALC(IN vat_rate INTEGER, OUT o3 TT_CE_CALC_RES)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView9 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o3 = CE_PROJECTION(:product, ["C_NAME","C_ACCTBAL",CE_CALC('"C_ACCTBAL" * :vat_rate',decimal(15,2)) AS "C_ACCTBAL_VAT"]);
--相当于 o3 SELECT C_NAME,C_ACCTBAL, C_ACCTBAL * :vat_rate as C_ACCTBAL_VAT FROM CUSTOMER;
END;
CALL ProcWith_CE_CALC(10,NULL)
--10.CE_AGGREGATION 这个函数对输入列分组并且计算每个分组的聚合结果,包含常用的COUNT 、 SUM 、 MIN 、 MAX聚合函数。
--创建表输出
DROP TYPE TT_RES
CREATE TYPE TT_RES AS TABLE(
CNT INTEGER,
C_NATIONKEY INTEGER
)
DROP PROCEDURE ProcWith_CE_AGGREGATION;
CREATE PROCEDURE ProcWith_CE_AGGREGATION(OUT o3 TT_RES)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView10 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o3 = CE_AGGREGATION (:product,[COUNT ("C_CUSTKEY") AS "CNT"], ["C_NATIONKEY"]);
--相当于 o3 = select C_NATIONKEY,COUNT(*) AS CNT from CUSTOMER GROUP BY C_NATIONKEY
END;
CALL ProcWith_CE_AGGREGATION(NULL)
--11.CE_UNION_ALL 这个函数计算两个具有相同列名和列顺序表变量UNION ALL的操作,即存在相同行均保留。
DROP PROCEDURE ProcWith_CE_UNION_ALL;
CREATE PROCEDURE ProcWith_CE_UNION_ALL(OUT o3 TT_CUSTOMER)
LANGUAGE SQLSCRIPT READS SQL DATA WITH RESULT VIEW ProcView11 AS
BEGIN
product = CE_COLUMN_TABLE("CUSTOMER");
o1 = CE_PROJECTION(:product,["C_CUSTKEY","C_NAME","C_ADDRESS"]);
o2 = CE_COLUMN_TABLE("CUSTOMER",["C_CUSTKEY","C_NAME","C_ADDRESS"]);
o3 = CE_UNION_ALL(:o1,:o2);
END;
CALL ProcWith_CE_UNION_ALL(NULL)