record
record Variables
Perform the following operations to create a record variable:
Define a record type and use this type to declare a variable.
Syntax
For the syntax of the record type, see Figure 1.
The syntax is described as follows:
- record_type: record name
- field: record columns
- datatype: record data type
- expression: expression for setting a default value
In GaussDB(DWS):
- When assigning values to record variables, you can:
- Declare a record type and define member variables of this type when you declare a function or stored procedure.
- Assign the value of a record variable to another record variable.
- Use SELECT INTO or FETCH to assign values to a record type.
- Assign the NULL value to a record variable.
- The INSERT and UPDATE statements cannot use a record variable to insert or update data.
- Just like a variable, a record column of the compound type does not have a default value in the declaration.
Examples
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
The table used in the following stored procedure is defined as follows: CREATE TABLE emp_rec ( empno numeric(4,0), 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) ) with (orientation = column,compression=middle) distribute by hash (sal); \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) | -- Perform array operations in the stored procedure. CREATE OR REPLACE FUNCTION regress_record(p_w VARCHAR2) RETURNS VARCHAR2 AS $$ DECLARE -- Declare a record type. type rec_type is record (name varchar2(100), epno int); employer rec_type; -- Use %type to declare the record type. type rec_type1 is record (name emp_rec.ename%type, epno int not null :=10); employer1 rec_type1; -- Declare a record type with a default value. 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 -- Assign a value to a member record variable. employer.name := 'WARD'; employer.epno = 18; raise info 'employer name: % , epno:%', employer.name, employer.epno; -- Assign the value of a record variable to another variable. employer1 := employer; raise info 'employer1 name: % , epno: %',employer1.name, employer1.epno; -- Assign the NULL value to a record variable. employer1 := NULL; raise info 'employer1 name: % , epno: %',employer1.name, employer1.epno; -- Obtain the default value of a record variable. raise info 'employer2 name: % ,epno: %', employer2.name, employer2.epno; -- Use a record variable in the FOR loop. 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; -- Use a record variable in the SELECT INTO statement. select ename,empno into employer2 from emp_rec order by 1 limit 1; raise info 'employer name: % , epno: %', employer2.name, employer2.epno; -- Use a record variable in a cursor. OPEN C1; FETCH C1 INTO employer2; raise info 'employer name: % , epno: %', employer2.name, employer2.epno; CLOSE C1; RETURN employer.name; END; $$ LANGUAGE plpgsql; -- Invoke the stored procedure. CALL regress_record('abc'); INFO: employer name: WARD , epno:18 INFO: employer1 name: WARD , epno: 18 INFO: employer1 name: <NULL> , epno: <NULL> INFO: employer2 name: SCOTT ,epno: 10 -- Delete the stored procedure. DROP PROCEDURE regress_record; |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.