warehouse_db=# CREATE TABLE warehouse_tbl
(
warehouse_id INTEGER NOT NULL,
warehouse_name TEXT NOT NULL,
year_created INTEGER,
street_address TEXT,
city CHARACTER VARYING(100),
state CHARACTER VARYING(2),
zip CHARACTER VARYING(10),
CONSTRAINT "PRIM_KEY" PRIMARY KEY (warehouse_id)
);

CREATE TABLE history
(
history_id INTEGER NOT NULL DEFAULT nextval('hist_id_seq'),
date TIMESTAMP WITHOUT TIME ZONE,
amount INTEGER,
data TEXT,
customer_id INTEGER,
warehouse_id INTEGER,
CONSTRAINT "PRM_KEY" PRIMARY KEY (history_id),
CONSTRAINT "FORN_KEY"
FOREIGN KEY (warehouse_id)
REFERENCES warehouse_tb1(warehouse_id)
);

warehouse_db=# \d warehouse_tb1
Table "public.warehouse_tb1"
Column | Type | Modifiers
----------------+------------------------+-----------
warehouse_id | integer | not null
warehouse_name | text | not null
year_created | integer |
street_address | text |
city | character varying(100) |
state | character varying(2) |
zip | character varying(10) |
Indexes:
"PRIM_KEY" PRIMARY KEY, btree (warehouse_id), tablespace "tbs_yl"
Referenced by:
TABLE "history" CONSTRAINT "FORN_KEY" FOREIGN KEY (warehouse_id) REFERENCES warehouse_tb1(warehouse_id)
Tablespace: "tbs_yl"

warehouse_db=# alter table warehouse_tb1 add column phone_no integer;
ALTER TABLE
warehouse_db=# \d warehouse_tb1
Table "public.warehouse_tb1"
Column | Type | Modifiers
----------------+------------------------+-----------
warehouse_id | integer | not null
warehouse_name | text | not null
year_created | integer |
street_address | text |
city | character varying(100) |
state | character varying(2) |
zip | character varying(10) |
phone_no | integer |
Indexes:
"PRIM_KEY" PRIMARY KEY, btree (warehouse_id), tablespace "tbs_yl"
Referenced by:
TABLE "history" CONSTRAINT "FORN_KEY" FOREIGN KEY (warehouse_id) REFERENCES warehouse_tb1(warehouse_id)
Tablespace: "tbs_yl"

warehouse_db=# alter table warehouse_tb1 drop column phone_no;
ALTER TABLE
warehouse_db=# \d warehouse_tb1
Table "public.warehouse_tb1"
Column | Type | Modifiers
----------------+------------------------+-----------
warehouse_id | integer | not null
warehouse_name | text | not null
year_created | integer |
street_address | text |
city | character varying(100) |
state | character varying(2) |
zip | character varying(10) |
Indexes:
"PRIM_KEY" PRIMARY KEY, btree (warehouse_id), tablespace "tbs_yl"
Referenced by:
TABLE "history" CONSTRAINT "FORN_KEY" FOREIGN KEY (warehouse_id) REFERENCES warehouse_tb1(warehouse_id)
Tablespace: "tbs_yl"

warehouse_db=# insert into warehouse_tb1(warehouse_id,warehouse_name,year_created,street_address,city,state,zip) values (1,'Mark Corp',2009,'207-F Main Service Road Ease','New London','CT',4321);
INSERT 0 1
warehouse_db=# select warehouse_id,warehouse_name,street_address from warehouse_tb1;
warehouse_id | warehouse_name | street_address
--------------+----------------+------------------------------
1 | Mark Corp | 207-F Main Service Road Ease
(1 row)
warehouse_db=# update warehouse_tb1 set year_created=2010 where year_created=2009;
UPDATE 1
warehouse_db=# select warehouse_id,year_created from warehouse_tb1;
warehouse_id | year_created
--------------+--------------
1 | 2010
(1 row)
warehouse_db=# insert into warehouse_tb1(warehouse_id,warehouse_name,year_created,street_address,city,state,zip)
warehouse_db-# values (2,'Bill & Co',2014,'Lilly Road','New London','CT',4321);
INSERT 0 1
warehouse_db=# insert into warehouse_tb1(warehouse_id,warehouse_name,year_created,street_address,city,state,zip)
warehouse_db-# values (3,'West point',2013,'Down Town','New London','CT',4321);
INSERT 0 1
warehouse_db=# select warehouse_id,warehouse_name,street_address from warehouse_tb1;
warehouse_id | warehouse_name | street_address
--------------+----------------+------------------------------
1 | Mark Corp | 207-F Main Service Road Ease
2 | Bill & Co | Lilly Road
3 | West point | Down Town
(3 rows)
warehouse_db=# delete from warehouse_tb1 where warehouse_name='Bill & Co';
DELETE 1
warehouse_db=# select warehouse_id,warehouse_name,street_address from warehouse_tb1;
warehouse_id | warehouse_name | street_address
--------------+----------------+------------------------------
1 | Mark Corp | 207-F Main Service Road Ease
3 | West point | Down Town
(2 rows)
warehouse_db=# create table tools(tool_id integer unique,too_name text,tool_class numeric);
CREATE TABLE
warehouse_db=# create table mytools(tool_id integer,tool_name text,tool_class numeric,unique(tool_id));
CREATE TABLE
warehouse_db=#
warehouse_db=# create table cards(card_id integer,owner_number integer,owner_name text,unique(card_id,owner_number));
CREATE TABLE
warehouse_db=# create table tools(tool_id integer not null,tool_name text,tool_class numeric);
CREATE TABLE
warehouse_db=# create table mytools(tool_id integer not null,tool_name text not null,tool_class numeric);
CREATE TABLE
warehouse_db=# create table tools(tool_id integer primary key,tool_name text,tool_class numeric);
CREATE TABLE
warehouse_db=# create table mytools(tool_id integer ,tool_name text,tool_class numeric,primary key(tool_id,tool_name));
CREATE TABLE
warehouse_db=# \d+ tools
Table "public.tools"
Column | Type | Modifiers | Storage | Stats target | Description
------------+---------+-----------+----------+--------------+-------------
tool_id | integer | not null | plain | |
tool_name | text | | extended | |
tool_class | numeric | | main | |
Indexes:
"tools_pkey" PRIMARY KEY, btree (tool_id), tablespace "tbs_yl"
Tablespace: "tbs_yl"

warehouse_db=# \d+ mytools
Table "public.mytools"
Column | Type | Modifiers | Storage | Stats target | Description
------------+---------+-----------+----------+--------------+-------------
tool_id | integer | not null | plain | |
tool_name | text | not null | extended | |
tool_class | numeric | | main | |
Indexes:
"mytools_pkey" PRIMARY KEY, btree (tool_id, tool_name), tablespace "tbs_yl"
Tablespace: "tbs_yl"

warehouse_db=# create table tools(tool_id integer primary key,tool_name text,tool_class numeric);
CREATE TABLE
warehouse_db=# create table tools_list(list_id integer primary key,tool_id integer references tools (tool_id),list_name text);
CREATE TABLE
warehouse_db=# \d+ tools
Table "public.tools"
Column | Type | Modifiers | Storage | Stats target | Description
------------+---------+-----------+----------+--------------+-------------
tool_id | integer | not null | plain | |
tool_name | text | | extended | |
tool_class | numeric | | main | |
Indexes:
"tools_pkey" PRIMARY KEY, btree (tool_id), tablespace "tbs_yl"
Referenced by:
TABLE "tools_list" CONSTRAINT "tools_list_tool_id_fkey" FOREIGN KEY (tool_id) REFERENCES tools(tool_id)
Tablespace: "tbs_yl"

warehouse_db=# \d+ mytools
Did not find any relation named "mytools".
warehouse_db=# \d+ tools_list
Table "public.tools_list"
Column | Type | Modifiers | Storage | Stats target | Description
-----------+---------+-----------+----------+--------------+-------------
list_id | integer | not null | plain | |
tool_id | integer | | plain | |
list_name | text | | extended | |
Indexes:
"tools_list_pkey" PRIMARY KEY, btree (list_id), tablespace "tbs_yl"
Foreign-key constraints:
"tools_list_tool_id_fkey" FOREIGN KEY (tool_id) REFERENCES tools(tool_id)
Tablespace: "tbs_yl"

CREATE OR REPLACE FUNCTION func_declare()
RETURNS text AS $$
DECLARE --Variable store declared not null with a default value.
nanvar VARCHAR NOT NULL := 'notnull text';--Declaring an integer to hold integer constant.
digit CONSTANT INTEGER := 10;
/* declaring variable with
a default value.*/
helloworld VARCHAR DEFAULT 'PostgreSQL rocks !';
BEGIN
RETURN nanvar;
END;
$$ LANGUAGE 'plpgsql';

CREATE OR REPLACE FUNCTION func_declarell()
RETURNS text AS $$
DECLARE --Variable store declared not null with a default value.
nanvar VARCHAR NOT NULL := 'notnull text';--Declaring an integer to hold integer constant.
digit CONSTANT INTEGER := 10;
/* declaring variable with
a default value.*/
helloworld VARCHAR DEFAULT 'PostgreSQL rocks !';
BEGIN
RETURN nanvar;
END;
$$ LANGUAGE 'plpgsql';

CREATE OR REPLACE FUNCTION func_declarell()
RETURNS text AS $$
DECLARE --Variable store declared not null with a default value.
nanvar VARCHAR NOT NULL := 'notnull text';--Declaring an integer to hold integer constant.
digit CONSTANT INTEGER := 10;
/* declaring variable with
a default value.*/
helloworld VARCHAR DEFAULT 'PostgreSQL rocks !';
BEGIN
RETURN digit;
END;
$$ LANGUAGE 'plpgsql';

warehouse_db=# create or replace function alias_explain(int)
returns integer as $$
declare
total alias for $1;
begin
return total*10;
end;
$$ language plpgsql;
CREATE FUNCTION
warehouse_db=# select alias_explain(10);
alias_explain
---------------
100
(1 row)

warehouse_db=# create or replace function alias_explain(int)
warehouse_db-# returns integer as $$
warehouse_db$# begin
warehouse_db$# return $1 * 10;
warehouse_db$# end;
warehouse_db$# $$language plpgsql;
CREATE FUNCTION
warehouse_db=# select alias_explain(10);
alias_explain
---------------
100
(1 row)

warehouse_db=# create or replace function alias_explain(total int)
warehouse_db-# returns integer as $$
warehouse_db$# begin
warehouse_db$# return total * 10;
warehouse_db$# end;
warehouse_db$# $$language plpgsql;
CREATE FUNCTION
warehouse_db=# select alias_explain(10);
alias_explain
---------------
100
(1 row)

warehouse_db=# create or replace function func_param(a int,IN b int,OUT plus int,OUT sub int)as $$
warehouse_db$# begin
warehouse_db$# plus :=a +b;
warehouse_db$# sub :=a-b;
warehouse_db$# end;
warehouse_db$# $$language plpgsql;
CREATE FUNCTION
warehouse_db=# select func_param(10,5);
func_param
------------
(15,5)
(1 row)
warehouse_db=# create or replace function simple_loop(subjects integer) returns integer as $$
warehouse_db$# declare
warehouse_db$# grade integer := 10;
warehouse_db$# begin
warehouse_db$# loop
warehouse_db$# grade := grade * subjects;
warehouse_db$# if (grade >= 100) then
warehouse_db$# exit;
warehouse_db$# end if;
warehouse_db$# end loop;
warehouse_db$# return grade;
warehouse_db$# end;
warehouse_db$# $$language plpgsql;
CREATE FUNCTION
warehouse_db=# select simple_loop(10);
simple_loop
-------------
100
(1 row)
warehouse_db=# create or replace function while_loop(subjects integer) returns integer as $$
declare
grade integer := 10;
begin
while grade <=100
loop
grade := grade * subjects;
end loop;
return grade;
end;
$$language plpgsql;
CREATE FUNCTION
warehouse_db=#
warehouse_db=# select while_loop(5);
while_loop
------------
250
(1 row)

warehouse_db=# create or replace function first_for_loop(subjects integer) returns integer as $$
warehouse_db$# declare
warehouse_db$# grade integer :=2;
warehouse_db$# begin
warehouse_db$# for i in 1..10
warehouse_db$# loop
warehouse_db$# grade := grade * subjects;
warehouse_db$# end loop;
warehouse_db$# return grade;
warehouse_db$# end;
warehouse_db$# $$ language plpgsql;
CREATE FUNCTION
warehouse_db=# select first_for_loop(2);
first_for_loop
----------------
2048
(1 row)
warehouse_db=# create or replace function second_for_loop(subjects integer) returns integer as $$
warehouse_db$# declare
warehouse_db$# grade integer :=2;
warehouse_db$# begin
warehouse_db$# for i in reverse 10..1 by 2
warehouse_db$# loop
warehouse_db$# grade := grade * subjects;
warehouse_db$# end loop;
warehouse_db$# return grade;
warehouse_db$# end;
warehouse_db$# $$ language plpgsql;
CREATE FUNCTION
warehouse_db=# select second_for_loop(2);
second_for_loop
-----------------
64
(1 row)

warehouse_db=# create or replace function for_loop_query(query varchar) returns integer as $$
warehouse_db$# declare
warehouse_db$# count integer := 0;
warehouse_db$# table_records record;
warehouse_db$# begin
warehouse_db$# for table_records in execute query
warehouse_db$# loop
warehouse_db$# count := count +1;
warehouse_db$# end loop;
warehouse_db$# return count;
warehouse_db$# end;
warehouse_db$# $$language plpgsql;
CREATE FUNCTION
warehouse_db=# select for_loop_query('select * from warehouse_tb1');
for_loop_query
----------------
2
(1 row)

warehouse_db=# select * from warehouse_tb1;
warehouse_id | warehouse_name | year_created | street_address | city | state | zip
--------------+----------------+--------------+------------------------------+------------+-------+------
1 | Mark Corp | 2010 | 207-F Main Service Road Ease | New London | CT | 4321
3 | West point | 2013 | Down Town | New London | CT | 4321
(2 rows)

warehouse_db=# create or replace function how_to_raise() returns integer as $$
warehouse_db$# declare
warehouse_db$# total integer;
warehouse_db$# begin
warehouse_db$# select count(*) into total from warehouse_tb1;
warehouse_db$# if (total > 0) then
warehouse_db$# return total;
warehouse_db$# else
warehouse_db$# raise notice 'table is empty,%,rows',total;
warehouse_db$# end if;
warehouse_db$# end;
warehouse_db$# $$language plpgsql;
CREATE FUNCTION
warehouse_db=# select how_to_raise();
how_to_raise
--------------
2
(1 row)

warehouse_db=# delete from warehouse_tb1 ;
DELETE 2
warehouse_db=# select how_to_raise();
NOTICE: table is empty,0,rows
ERROR: control reached end of function without RETURN
CONTEXT: PL/pgSQL function how_to_raise()
warehouse_db=#

warehouse_db=# create or replace function test_sqlerrm( ) returns integer as $$
declare
var int :=0;
begin
raise notice 'hello %','1234';
var :=(select 1 + 1 );
return var;
end;
$$language plpgsql;
CREATE FUNCTION
Time: 6.290 ms
warehouse_db=# select test_sqlerrm();
NOTICE: hello 1234
-[ RECORD 1 ]+--
test_sqlerrm | 2

Time: 1.042 ms
warehouse_db=# \x
Expanded display is off.
warehouse_db=# select test_sqlerrm();
NOTICE: hello 1234
test_sqlerrm
--------------
2
(1 row)

Time: 1.160 ms

warehouse_db=# create table accounts(owner text,balance numeric);
CREATE TABLE
warehouse_db=# insert into accounts values ('Bob',100);
INSERT 0 1
warehouse_db=# insert into accounts values ('Mary',200);
INSERT 0 1
warehouse_db=# update accounts set balance = balance - 14.00 where owner = 'Bob';
UPDATE 1
warehouse_db=# update accounts set balance = balance + 14.00 where owner = 'Mary';
UPDATE 1

warehouse_db=# CREATE OR REPLACE FUNCTION transfer(
warehouse_db(# i_payer text,
warehouse_db(# i_recipient text,
warehouse_db(# i_amount numeric(15,2))
warehouse_db-# RETURNS text
warehouse_db-# AS
warehouse_db-# $$
warehouse_db$# DECLARE
warehouse_db$# payer_bal numeric;
warehouse_db$# BEGIN
warehouse_db$# SELECT balance INTO payer_bal
warehouse_db$# FROM accounts
warehouse_db$# WHERE owner = i_payer FOR UPDATE;
warehouse_db$# IF NOT FOUND THEN
warehouse_db$# RETURN 'Payer account not found';
warehouse_db$# END IF;
warehouse_db$# IF payer_bal < i_amount THEN
warehouse_db$# RETURN 'Not enough funds';
warehouse_db$# END IF;
warehouse_db$# UPDATE accounts
warehouse_db$# SET balance = balance + i_amount
warehouse_db$# WHERE owner = i_recipient;
warehouse_db$# IF NOT FOUND THEN
warehouse_db$# RETURN 'Recipient does not exist';
warehouse_db$# END IF;
warehouse_db$# UPDATE accounts
warehouse_db$# SET balance = balance - i_amount
warehouse_db$# WHERE owner = i_payer;
warehouse_db$# RETURN 'OK';
warehouse_db$# END;
warehouse_db$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
warehouse_db=# select * from accounts ;
owner | balance
-------+---------
Bob | 86.00
Mary | 214.00
(2 rows)

warehouse_db=# select * from transfer('Bob','Mary',14.00);
transfer
----------
OK
(1 row)

warehouse_db=# select * from accounts ;
owner | balance
-------+---------
Mary | 228.00
Bob | 72.00
(2 rows)

warehouse_db=# select * from transfer('Fred','Mary',14.00);
transfer
-------------------------
Payer account not found
(1 row)

warehouse_db=# select * from transfer('Bob','Fred',14.00);
transfer
--------------------------
Recipient does not exist
(1 row)

warehouse_db=# select * from transfer('Bob','Mary',500.00);
transfer
------------------
Not enough funds
(1 row)

PostgreSQL function examples的更多相关文章

  1. How to debug PostgreSQL function with pgAdminIII

    How to debug plpgsql with pgAdminIII [root@localhost soft_bak]# git clone git://git.postgresql.org/g ...

  2. PostgreSQL trigger (function) examples

    postgres=# \c warehouse_db You are now connected to database "warehouse_db" as user " ...

  3. postgresql function 返回 select

    pq函数功能很强大,我打算把统计的功能都放在数据库端.优势让运算离数据更近一些,缺点无法服用代码.牺牲了django的灵魂性,项目必须依赖postgresql. 项目中,希望实现返回select内容 ...

  4. 移植Oracle procedure 到 postgresql

    1.登录postgresql psql -h 192.168.137.131 -p 5432 postgres satusc@6789#JKL 2.创建用户 CREATE USER name thun ...

  5. WRITING POSTGRESQL TRIGGERS IN GO

    转自:https://www.opsdash.com/blog/postgresql-triggers-golang.html 可以学习如何使用golang 编写pg extension Trigge ...

  6. ORACLE_TO_CHAR Function

    TECHONTHENNTE  WEBSITE: https://www.techonthenet.com/oracle/functions/to_char.php Oracle / PLSQL: TO ...

  7. PostgreSQL 存储过程/函数

    1.有用的链接 postgresql 常用小函数 Postgresql数据库的一些字符串操作函数 PostgreSQL function里面调用function PostgreSQL学习手册(函数和操 ...

  8. postgresql spi开发笔记

    #include "postgres.h" #include "fmgr.h" #include <string.h> #ifdef PG_MODU ...

  9. [JavaScript]顺序的异步执行

    我们知道,在适用js的时候,程序是单线程执行的,而且如果遇到阻塞就会将浏览器卡死. 能否异步的执行,让程序不再卡呢? 可以,用setTimeout. 但是,问题又来了,如果我有这样的要求: 执行一个函 ...

随机推荐

  1. shell example01

    条件判断 if [[ -e ${1} ]]; then echo "$(tput setaf 2) found ${1} $(tput sgr0)" cat ${1} else e ...

  2. bootstrap 使用需注意的一些点

    table 中td的宽度可以td 的style设置,然后在设置内部比如img对象款高实现对于 table其中某列的设置.

  3. ViewPager打造轮播图(Banner)\引导页(Guide)

    今年7月时,在Github发布了一个开源的Banner库,虽然Star不多,但还是有少部分人使用. Banner效果:  昨天,有使用此库的同学提出需求,想在引导页的时候用这个库并且最后一页有进入按钮 ...

  4. ggplot2包的说明文档[分享]

  5. 2016中国大学生程序设计竞赛 - 网络选拔赛 C. Magic boy Bi Luo with his excited tree

    Magic boy Bi Luo with his excited tree Problem Description Bi Luo is a magic boy, he also has a migi ...

  6. RecyclerView item 状态错乱

    adapter中: private List<Integer> checkboxUserIdList = new ArrayList<>(); 在如下这个方法中: public ...

  7. 【BZOJ】3521: [Poi2014]Salad Bar

    题意 长度为\(n(1 \le n \le 1000000)\)的\(01\)字符串.找一个最长的连续子串\(S\),使得不管是从左往右还是从右往左取,都保证每时每刻已取出的\(1\)的个数不小于\( ...

  8. Linux crontab 命令格式与详细例子

    基本格式 :* * * * * command分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示第2列表示小时1-23(0表示0点)第3列表示日期1-31第4列表示月份1-1 ...

  9. MongoDB查询操作限制返回字段的方法

    这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下   映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中 ...

  10. ZK 最少限度加载页面js文件

    官方文档说明: ZK Developer's Reference文档,章节为Minimize Number of JavaScript Files to Load,按照文档步骤执行,最后需在 web. ...