PL/pgSQL RETURNS TABLE 例子

简介:

实验如下:

RETURNS TABLE 中的变量名和SQL文中的变量名同名时,执行时会出错:

复制代码
pgsql=# create table sales(itemno integer,quantity integer,price numeric);
CREATE TABLE
pgsql=# insert into sales values (100,15,11.2),(101,22,12.3);
INSERT 0 2
pgsql=# CREATE FUNCTION extended_sales(p_itemno int)
pgsql-# RETURNS TABLE(quantity int, total numeric) AS $$
pgsql$# BEGIN
pgsql$#     RETURN QUERY SELECT quantity, quantity * price FROM sales
pgsql$#                  WHERE itemno = p_itemno;
pgsql$# END;
pgsql$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
pgsql=# 
复制代码
复制代码
pgsql=# select extended_sales(101);
ERROR:  column reference "quantity" is ambiguous
LINE 1: SELECT quantity, quantity * price FROM sales
               ^
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.
QUERY:  SELECT quantity, quantity * price FROM sales
                 WHERE itemno = p_itemno
CONTEXT:  PL/pgSQL function "extended_sales" line 2 at RETURN QUERY
pgsql=# 
复制代码

此时,可以如此操作:

复制代码
pgsql$#     RETURN QUERY SELECT sales.quantity, sales.quantity * sales.price FROM sales
pgsql$#                  WHERE itemno = p_itemno;
pgsql$# END;
pgsql$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
pgsql=# 
pgsql=# select extended_sales(101);
 extended_sales 
----------------
 (22,270.6)
(1 row)

pgsql=#
复制代码

也可以采用别的名称:

复制代码
pgsql=# CREATE FUNCTION extended_sales(p_itemno int)
pgsql-# RETURNS TABLE(tmp_quantity int, tmp_total numeric) AS $$
pgsql$# BEGIN
pgsql$#   RETURN QUERY SELECT quantity AS tmp_quantity, quantity * price AS tmp_total 
pgsql$#     FROM sales
pgsql$#         WHERE itemno = p_itemno;
pgsql$# END;
pgsql$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
pgsql=# 
pgsql=# select extended_sales(101);
 extended_sales 
----------------
 (22,270.6)
(1 row)

pgsql=# 
复制代码
目录
相关文章
|
SQL 存储 关系型数据库
MySQL中count(*)和information_schema.tables中的table_rows值不相同
MySQL中count(*)和information_schema.tables中的table_rows值不相同
431 0
|
SQL 关系型数据库 MySQL
MySQL:The used SELECT statements have a different number of columns
执行SQL报错:The used SELECT statements have a different number of columns
802 0
MySQL:The used SELECT statements have a different number of columns
|
SQL 前端开发 关系型数据库
MySQL中关于GROUP_CONCAT(expr)函数的使用
MySQL中的:GROUP_CONCAT(expr)函数是将某一字段的值按指定的字符进行累加,系统默认的分隔符是逗号,可以累加的字符长度为1024字节。
305 0
|
SQL 关系型数据库 MySQL
mysql的FIND_IN_SET group_concat 函数
mysql的FIND_IN_SET group_concat 函数
284 0
|
SQL 缓存 Oracle
Oracle On the PL/SQL Function Result Cache
标签 PostgreSQL , Oracle , 函数结果缓存 , 函数三态 , immutable , stable , volatile 背景 Oracle 11g 支持的一个新特性,在创建PL/SQL函数时,可以指定这个存储过程是否需要对结果进行缓存,缓存内容在SGA内存区域。
973 0