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=#
PL/pgSQL RETURNS TABLE 例子的更多相关文章
- PL/pgSQL的anyelement例子
http://www.postgresonline.com/journal/archives/239-The-wonders-of-Any-Element.html 定义函数 pgsql=# CREA ...
- PL/pgSQL的RETURN QUERY例子
我的例子: 数据准备: create table custinfo(custid integer,callingcnt integer); ,),(,),(,); 函数生成: CREATE OR RE ...
- PL/pgSQL学习笔记之八
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 另外一种声明 PL/pgSQL 函数的方法是使用 returns ...
- PL/pgSQL学习笔记之七
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 如果一个PL/pgSQL函数声明了输出参数,输出参数被赋予$n名 ...
- PL/pgSQL学习笔记之三
http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1.2. Supported Argument and Resul ...
- 用PL/pgSQL写postgreSQL的存储过程[转]
http://blog.chinaunix.net/uid-7591044-id-1742967.html 今天学会了用 PL/pgSQL 写 postgreSQL 的存储过程,网上资料实在少得可怜, ...
- PL/pgSQL学习笔记之五
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3. 声明 块中使用的所有的变量必须在块的声明节中进行声明 ...
- PL/pgSQL学习笔记之四
http://www.postgresql.org/docs/9.1/static/plpgsql-structure.html 39.2. PL/pgSQL 的结构 PL/pgSQL是一种块式结构的 ...
- PostgreSQL存储过程(2)-基于PL/PgSQL的存储过程
介绍 PL/pgSQL 是PostgreSQL 数据库系统的一个可加载的过程语言. PL/pgSQL 的设计目标是创建一种可加载的过程语言,可以 用于创建函数和触发器过程, 为SQL 语言增加控制结构 ...
随机推荐
- 【leetcode】Find Minimum in Rotated Sorted Array II JAVA实现
一.题目描述 Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed ...
- J2EE事务
一.J2EE 事务处理方式 1. 本地事务:紧密依赖于底层资源管理器(例如数据库连接 ),事务处理局限在当前事务资源内.此种事务处理方式不存在对应用服务器的依赖,因而部署灵活却无法支持多数据源的分布式 ...
- android开发软件
android开发软件: http://developer.android.com/sdk/index.html#download
- 建立连接ALM的xml config文件
我就不贴所有的了,如果有谁想要所有源码和应用程序,可以密我 这里我贴下如何在第一次运行的时候自动建立一个ALMConfig的xml文件 private static void CreateALMCon ...
- ASP.NET 使用application和session对象写的简单聊天室程序
ASP.Net中有两个重要的对象,一个是application对象,一个是session对象. Application:记录应用程序参数的对象,该对象用于共享应用程序级信息. Session:记录浏览 ...
- word添加页码
问:在Word里面,分两栏插入页码,怎么使两栏都有页码? 可以通过插入域来实现分两栏后两栏都有页码.左边一栏页码为 当前页页码×2-1 :右边一栏页码为 当前页页码×2.在页眉页脚视图中,分别在左右两 ...
- 开扒php内核函数,第三篇 implode
一开始觉得implode挺容易实现,但是写着写着才发现是挺复杂的,不说啦 来看看implode的用法吧 <?php $arr = array('Hello','World!','Beautifu ...
- 【原创】用JAVA实现大文件上传及显示进度信息
用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...
- [WinForm] 使用 WebBrowser 操作 HTML 頁面的 Element-摘自网络
前言 在 Window Form 應用程式如果需要瀏覽網頁時可以崁入 WebBrowser 控制項,但如果需要操作崁入的 HTML 的網頁元素,就需要額外的操作,以下紀錄幾種操作 HTML 元素的方法 ...
- dom div移动解决停顿问题
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...