示例
下面示例中用到的表定义如下:
postgres=# \d emp_rec
Table "public.emp_rec"
Column
|
Type| Modifiers
----------+--------------------------------+-----------
empno
| numeric(4,0)
| not null ename
| character varying(10)
|
job | character varying(9)
|
mgr
| numeric(4,0)
| hiredate | timestamp(0) without time zone | sal
| numeric(7,2)
|
comm
| numeric(7,2) |
deptno
| numeric(2,0)|
--演示在函数中对数组进行操作。
postgres=# CREATE OR REPLACE FUNCTION regress_record(p_w VARCHAR2)
RETURNS
VARCHAR2 AS $$ DECLARE
--声明一个record 类型.
type rec_type is record (name varchar2(100), epno int); employer rec_type;
--使用%type 声明record 类型
type rec_type1 is record (name emp_rec.ename%type, epno int not null :=10); employer1
rec_type1;
--声明带有默认值的record 类型type rec_type2 is record (
name varchar2 not null := 'SCOTT', epno int not null :=10);
employer2 rec_type2;
CURSOR C1 IS select ename,empno from emp_rec order by 1 limit 1;
BEGIN
--对一个record 类型的变量的成员赋值。employer.name
:=
'WARD';
employer.epno = 18;
raise info 'employer name: % , epno:%', employer.name, employer.epno;
--将一个record 类型的变量赋值给另一个变量。employer1 := employer;
raise info 'employer1 name: % , epno: %',employer1.name, employer1.epno;
GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
628
--将一个record 类型变量赋值为NULL。employer1 := NULL;
raise info 'employer1 name: % , epno: %',employer1.name, employer1.epno;
--获取record 变量的默认值。
raise info 'employer2 name: % ,epno: %', employer2.name, employer2.epno;
--在for 循环中使用record 变量
for employer in select ename,empno from emp_rec order by 1 limit 1 loop
raise info 'employer name: % , epno: %', employer.name, employer.epno; end loop;
--在select into 中使用record 变量。
select ename,empno
into employer2 from emp_rec order by 1 limit 1;
raise info
'employer name: % , epno: %', employer2.name, employer2.epno;
--在cursor 中使用record 变量。OPEN C1;
FETCH C1 INTO employer2;
raise info 'employer name: % , epno: %', employer2.name, employer2.epno; CLOSE C1;
RETURN employer.name; END;
$$
LANGUAGE plpgsql;
--调用该函数。
postgres=# CALL regress_record('abc');
--删除函数。
postgres=# DROP FUNCTION regress_record;