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

华为openGauss record

record类型的变量

创建一个record变量的方式:

定义一个record类型 ,然后使用该类型来声明一个变量。

语法

record类型的语法参见图1

图 1 record类型的语法

对以上语法格式的解释如下:

  • record_type:声明的类型名称。
  • field:record类型中的成员名称。
  • datatype:record类型中成员的类型。
  • expression:设置默认值的表达式。

说明:
在openGauss中:
- record类型变量的赋值支持:
- 在函数或存储过程的声明阶段,声明一个record类型,并且可以在该类型中定义成员变量。
- 一个record变量到另一个record变量的赋值。
- SELECT INTO和FETCH向一个record类型的变量中赋值。
- 将一个NULL值赋值给一个record变量。
- 不支持INSERT和UPDATE语句使用record变量进行插入数据和更新数据。
- 如果成员有复合类型,在声明阶段不支持指定默认值,该行为同声明阶段的变量一样。

示例

``` 下面存储过程中用到的表定义如下: 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;
  --将一个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; ```

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

文集目录
暂无数据