PostgreSQL function examples
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的更多相关文章
- How to debug PostgreSQL function with pgAdminIII
How to debug plpgsql with pgAdminIII [root@localhost soft_bak]# git clone git://git.postgresql.org/g ...
- PostgreSQL trigger (function) examples
postgres=# \c warehouse_db You are now connected to database "warehouse_db" as user " ...
- postgresql function 返回 select
pq函数功能很强大,我打算把统计的功能都放在数据库端.优势让运算离数据更近一些,缺点无法服用代码.牺牲了django的灵魂性,项目必须依赖postgresql. 项目中,希望实现返回select内容 ...
- 移植Oracle procedure 到 postgresql
1.登录postgresql psql -h 192.168.137.131 -p 5432 postgres satusc@6789#JKL 2.创建用户 CREATE USER name thun ...
- WRITING POSTGRESQL TRIGGERS IN GO
转自:https://www.opsdash.com/blog/postgresql-triggers-golang.html 可以学习如何使用golang 编写pg extension Trigge ...
- ORACLE_TO_CHAR Function
TECHONTHENNTE WEBSITE: https://www.techonthenet.com/oracle/functions/to_char.php Oracle / PLSQL: TO ...
- PostgreSQL 存储过程/函数
1.有用的链接 postgresql 常用小函数 Postgresql数据库的一些字符串操作函数 PostgreSQL function里面调用function PostgreSQL学习手册(函数和操 ...
- postgresql spi开发笔记
#include "postgres.h" #include "fmgr.h" #include <string.h> #ifdef PG_MODU ...
- [JavaScript]顺序的异步执行
我们知道,在适用js的时候,程序是单线程执行的,而且如果遇到阻塞就会将浏览器卡死. 能否异步的执行,让程序不再卡呢? 可以,用setTimeout. 但是,问题又来了,如果我有这样的要求: 执行一个函 ...
随机推荐
- HTML5离线Web应用实战:五步创建成功
[IT168 技术]HTML5近十年来发展得如火如荼,在HTML 5平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化.HTML功能越来越丰富,支持图片上传拖拽.支持localstorage. ...
- 转载:持续集成之解决jenkins内存溢出问题
在jenkins master-slave配置中,总是出现内存溢出问题,更换了机器设备仍然跑不起来: 问题如下: Status Code: 500 Exception: org.apache.c ...
- android surfaceView 黑屏
最近在做一个viewpager + fragment 切换的页面, 其中一个fragment 打开摄像头,需要surfaceView,但是当切换到这个fragment的前一个个时,这个fragment ...
- java 将一张图片拷贝到另外一个地方。(IO流)
package com.beiwo.inputstream; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...
- easyloader源码
/** * easyloader - jQuery EasyUI * * Licensed under the GPL: * http://www.gnu.org/licenses/gpl.txt * ...
- IOS ReactiveCocoa
一 前提: 在iOS开发过程中,当某些事件响应时,需处理的某些业务逻辑 Eg. 按钮点击:action ScrollView滚动:delegate 属性值改变:KVO ReactiveCocoa为事件 ...
- 【转发】关于Java性能的9个谬论
转载请注明出处,感谢大家的支持!本文来自优优码:http://www.uucode.net/201502/9%e4%b8%aa%e8%b0%ac%e8%ae%ba Java的性能有某种黑魔法之称.部分 ...
- 开源战棋 SLG 游戏框架设计思考(一)简介和游戏引擎
战棋 SLG 游戏 SLG(Simulation Game)游戏是模拟游戏的简称.战棋类的SLG有两种:一种是 War Game 中的兵棋推演分支,常见的游戏有战争艺术3(TOAW3 — The Op ...
- 再谈java两种变量(基本类型和引用类型)(综合各路大神)
基本类型: 基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值. int a: a=250: //声明变量a的同时,系统给a分配了数据空间. 引用类型: 是一个对象类型,值是什么呢? ...
- 一段可以清理NSArray中的空对象的代码(递归)
- (NSArray *)clearAllNullObject{ NSMutableArray *array = [self mutableCopy]; ;i < array.count;i++ ...