赋值语句
语法
给变量赋值的语法请参见下图。
assignment_value::=
对以上语法格式的解释如下:
variable_name:变量名。
value:可以是值或表达式。值value的类型需要和变量variable_name的类型兼容才能正确赋值。
示例
DECLARE
emp_id INTEGER := 7788;--赋值
BEGIN
emp_id := 5;--赋值
emp_id := 5*7784;
END;
/
嵌套赋值
给变量嵌套赋值的语法请参见下图。
nested_assignment_value::=
对以上语法格式的解释如下:
variable_name:变量名。
col_name:列名。
subscript:下标,针对数组变量使用,可以是值或表达式,类型必须为int。
value:可以是值或表达式。值value的类型需要和变量variable_name的类型兼容才能正确赋值。
示例:
CREATE TYPE o1 as (a int, b int);
DECLARE
TYPE r1 is VARRAY(10) of o1;
emp_id r1;
BEGIN
emp_id(1).a := 5;--赋值
emp_id(1).b := 5*7784;
END;
/
INTO 方式赋值仅支持对第一层列赋值,且不支持二维及以上数组; 引用嵌套的列值时,若存在数组下标,目前仅支持在前三层列中只存在一个小括号情况,建议使用方括号[ ]引用下标;
INTO/BULK COLLECT INTO
将存储过程内语句返回的值存储到变量内,BULK COLLECT INTO允许将部分或全部返回值暂存到数组内部。
示例:
CREATE TABLE customers(id integer); INSERT INTO customers VALUES(generate_series(1,100)); DECLARE my_id integer; BEGIN select id into my_id from customers limit 1; -- 赋值 END; / DECLARE type id_list is varray(6) of customers.id%type; id_arr id_list; BEGIN select id bulk collect into id_arr from customers order by id DESC limit 20; -- 批量赋值 END; / CREATE TABLE test(a integer); CREATE OR REPLACE FUNCTION check_test() RETURNS integer language plpgsql AS $function$ DECLARE b integer; BEGIN SELECT INTO b a FROM test WHERE a=1; -- 返回空结果集 RETURN b; END; $function$; SELECT check_test();
查询结果为如下:
check_test ------------ (1 row)