SELECT INTO语句¶
另一种赋值语句的形式是通过SELECT INTO或FETCH语句对变量进行赋值。SELECT INTO语句可以将生成多列的SELECT命令的结果赋予一个记录变量、行变量或者标量变量的列表。FETCH语句将在后面的游标操作语句中说明。
语法:
select_into ::=
参数:
BULK COLLECT 批量绑定相关,详细内容见 批量绑定 。
rest-of-statement 查询表达式的其他语句,除去开头的SELECT关键字。
说明:
PLOSCAR中SELECT INTO语句与神通数据库中的语义不同。神通数据库中的SELECT INTO语句是为了创建一个新表。
如果将一行或者一个变量列表用作目标,那么选出的数值必须精确匹配目标的结构,否则就会产生运行时的错误。如果目标是一个记录变量,它将自动配置成查询结果列的行类型。
除了INTO子句,SELECT INTO语句余下的部分和神通数据库中的查询表达式完全一样,并且可以使用神通数据库查询表达式的全部能力。
SELECT INTO语句期望的结果是查询正好返回一行,如果查询表达式返回零行或返回多行,系统将扔出一个异常,关于异常的处理,请参看异常错误语句。
示例:SELECT INTO语句¶
-- 清理环境
drop function getstudent(integer);
drop table student CASCADE;
-- 创建表
create table student
(
id int,
name varchar(32),
grade int
);
insert into student values(1, 'davis', 2);
insert into student values(2, 'ricky', 2);
insert into student values(3, 'mary', 4);
create or replace function getstudent(sid integer) return setof record
as
ret student%rowtype;
begin
select * into ret from student where student.id = sid;
return next ret;
return;
end;
/
select * from getstudent(1) as(id int, name varchar(32), grade int);
ID(int) |NAME(varchar) |GRADE(int) |
------------------------------------------------
1 |davis |2 |
总数目:1
--删除表
drop function getstudent(integer);
drop table student CASCADE;