云数据库 GaussDB-record:示例

时间:2023-11-01 16:22:24

示例

 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
下面存储过程中用到的表定义如下: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)RETURNSVARCHAR2  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;               --将一个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 PROCEDURE regress_record;
support.huaweicloud.com/devg-opengauss/opengauss_devg_0669.html