摘要:
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html39.3.4. Row 类型name table_name%ROWTYPE;name composite_type_name;一个复合类型被称为row变量(或row-类型变量)。这样的变量可以保持一整行当select或for 查询的结果,该查询的列集合正好匹配声明的变量的数据类型。此行值得单个域值可以通过通常的点引用来访问,例如:rowvar.field。通过使用table_name%ROWTYPE 标记法,一个row变量可以被声明为与现存的表或视图的行拥有同样 阅读全文
摘要:
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html39.3.3. 类型拷贝variable%TYPE%TYPE提供了变量或者表列的数据类型。你可以用这个来声明将持有这些数据库值得变量。例如,假定在你的users表中你有一列,名称为 user_id。为了定义一个和users.user_id拥有同样数据类型的数据类型,你可以写:user_id users.user_id%TYPE;通过使用%TYPE,你不需要知道你所参照的数据类型的结构,而且更为重要地,如果将来你所参照的数据Lexington变了(例如:你把use 阅读全文
摘要:
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html39.3.2. ALIASnewname ALIAS FOR oldname;ALIAS 语法比前面章节中提到的更为广泛使用:你可以给任何变量声明别名,而不仅仅是针对函数参数。在实践中用得比较多的是给变量赋予一个另外的预先定义好的名字,如在一个触发器过程中的NEW和OLD。例如:DECLARE prior ALIAS FOR old; updated ALIAS FOR new;这样 ALIAS 创建了两种不同同的方式去命名同一个对象,不加限制的使用会导致困.. 阅读全文
摘要:
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html另外一种声明 PL/pgSQL 函数的方法是使用 returns table,例如:CREATE FUNCTION extended_sales(p_itemno int)RETURNS TABLE(quantity int, total numeric) AS $$BEGIN RETURN QUERY SELECT quantity, quantity * price FROM sales WHERE itemno = p... 阅读全文
摘要:
建立函数:CREATE OR REPLACE FUNCTION enumtest(anyenum) RETURNS text AS$$SELECT $1::text;$$ LANGUAGE SQL;建立enum:pgsql=# CREATE TYPE ecolor AS ENUM ('white','green','blue');CREATE TYPEpgsql=# pgsql=# CREATE TYPE esize AS ENUM ('small','middle','big');CREATE T 阅读全文
摘要:
https://wiki.postgresql.org/wiki/Enum建立enum:pgsql=# CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');CREATE TYPEpgsql=# 建表:pgsql=# CREATE TABLE person (pgsql(# name text,pgsql(# current_mood moodpgsql(# );CREATE TABLEpgsql=# 数据输入:pgsql=# INSERT INTO person VALUES ('Larry 阅读全文
摘要:
http://www.postgresql.org/docs/current/static/extend-type-system.html#EXTEND-TYPES-POLYMORPHIC先看一个例子:CREATE OR REPLACE FUNCTION myappend01(anyelement, anyelement) RETURNS anyelement AS$$SELECT $1 || $2;$$ LANGUAGE SQL;执行(按 AnynonArray来传递输入参数):pgsql=# select myappend01('abc', 'def');E 阅读全文
摘要:
程序:CREATE OR REPLACE FUNCTION kappend(anynonarray, anyelement) RETURNS text AS$$SELECT $1 || $2;$$ LANGUAGE SQL;调用方法(错误):pgsql=# select kappend('def','abc');ERROR: could not determine polymorphic type because input has type "unknown"pgsql=# 调用方法(正确):pgsql=# select kappend(& 阅读全文
摘要:
http://www.joeconway.com/presentations/function_basics.pdfCREATE FUNCTION myappend(anyarray, anyelement) RETURNS anyarray AS$$SELECT $1 || $2;$$ LANGUAGE SQL;查询一:pgsql=# SELECT myappend(ARRAY[42,6], 21); myappend ----------- {42,6,21}(1 row)pgsql=# 查询二:pgsql=# SELECT myappend(ARRAY['abc', 阅读全文
摘要:
建立表:CREATE TABLE sal_emp (name text,pay_by_quarter integer[],schedule text[][]);插入数据:INSERT INTO sal_emp VALUES ('Bill', ARRAY[10000, 11000, 9000, 13000], ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);INSERT INTO sal_emp VALUES ('Carol', A 阅读全文
摘要:
http://www.postgresonline.com/journal/archives/239-The-wonders-of-Any-Element.html定义函数pgsql=# CREATE OR REPLACE FUNCTION diff_inc(IN anyelement, IN anyelementpgsql(# , OUT diff integer, OUT f_val anyelement, OUT l_val anyelement)pgsql-# RETURNS recordpgsql-# ASpgsql-# $$pgsql$# BEGINpgsql$# dif... 阅读全文
摘要:
实验如下:RETURNS TABLE 中的变量名和SQL文中的变量名同名时,执行时会出错:pgsql=# create table sales(itemno integer,quantity integer,price numeric);CREATE TABLEpgsql=# insert into sales values (100,15,11.2),(101,22,12.3);INSERT 0 2pgsql=# CREATE FUNCTION extended_sales(p_itemno int)pgsql-# RETURNS TABLE(quantity int, total nume 阅读全文