zoukankan      html  css  js  c++  java
  • 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=# 
  • 相关阅读:
    Windows身份验证和混合验证的差别
    Codeforces Round #273 (Div. 2) --B Random Teams
    带输出參数的存储过程的定义,以及在aso.net中调用
    数字统计
    UVa10048_Audiophobia(最短路/floyd)(小白书图论专题)
    C语言之基本算法21—可逆素数
    我在CSDN开通博客啦!
    小谈并查集及其算法实现
    C#高级编程五十四天----Lookup类和有序字典
    开发人员调试工具Chrome Workspace
  • 原文地址:https://www.cnblogs.com/gaojian/p/3190604.html
Copyright © 2011-2022 走看看