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;