diff options
author | Marc G. Fournier <scrappy@hub.org> | 1996-07-09 06:22:35 +0000 |
---|---|---|
committer | Marc G. Fournier <scrappy@hub.org> | 1996-07-09 06:22:35 +0000 |
commit | d31084e9d1118b25fd16580d9d8c2924b5740dff (patch) | |
tree | 3179e66307d54df9c7b966543550e601eb55e668 /src/tutorial/funcs.source | |
download | postgresql-d31084e9d1118b25fd16580d9d8c2924b5740dff.tar.gz postgresql-d31084e9d1118b25fd16580d9d8c2924b5740dff.zip |
Postgres95 1.01 Distribution - Virgin SourcesPG95-1_01
Diffstat (limited to 'src/tutorial/funcs.source')
-rw-r--r-- | src/tutorial/funcs.source | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/src/tutorial/funcs.source b/src/tutorial/funcs.source new file mode 100644 index 00000000000..00f256ea859 --- /dev/null +++ b/src/tutorial/funcs.source @@ -0,0 +1,158 @@ +--------------------------------------------------------------------------- +-- +-- funcs.sql- +-- Tutorial on using functions in POSTGRES. +-- +-- +-- Copyright (c) 1994-5, Regents of the University of California +-- +-- $Id: funcs.source,v 1.1.1.1 1996/07/09 06:22:34 scrappy Exp $ +-- +--------------------------------------------------------------------------- + +----------------------------- +-- Creating SQL Functions on Base Types +-- a CREATE FUNCTION statement lets you create a new function that +-- can be used in expressions (in SELECT, INSERT, etc.). We will start +-- with functions that return values of base types. +----------------------------- + +-- +-- let's create a simple SQL function that takes no arguments and +-- returns 1 + +CREATE FUNCTION one() RETURNS int4 + AS 'SELECT 1 as ONE' LANGUAGE 'sql'; + +-- +-- functions can be used in any expressions (eg. in the target list or +-- qualifications) + +SELECT one() AS answer; + +-- +-- here's how you create a function that takes arguments. The following +-- function returns the sum of its two arguments: + +CREATE FUNCTION add_em(int4, int4) RETURNS int4 + AS 'SELECT $1 + $2' LANGUAGE 'sql'; + +SELECT add_em(1, 2) AS answer; + +----------------------------- +-- Creating SQL Functions on Composite Types +-- it is also possible to create functions that return values of +-- composite types. +----------------------------- + +-- before we create more sophisticated functions, let's populate an EMP +-- table + +CREATE TABLE EMP ( + name text, + salary int4, + age int4, + dept char16 +); + +INSERT INTO EMP VALUES ('Sam', 1200, 16, 'toy') +INSERT INTO EMP VALUES ('Claire', 5000, 32, 'shoe') +INSERT INTO EMP VALUES ('Andy', -1000, 2, 'candy') +INSERT INTO EMP VALUES ('Bill', 4200, 36, 'shoe') +INSERT INTO EMP VALUES ('Ginger', 4800, 30, 'candy'); + +-- the argument of a function can also be a tuple. For instance, +-- double_salary takes a tuple of the EMP table + +CREATE FUNCTION double_salary(EMP) RETURNS int4 + AS 'SELECT $1.salary * 2 AS salary' LANGUAGE 'sql'; + +SELECT name, double_salary(EMP) AS dream +FROM EMP +WHERE EMP.dept = 'toy'; + +-- the return value of a function can also be a tuple. However, make sure +-- that the expressions in the target list is in the same order as the +-- columns of EMP. + +CREATE FUNCTION new_emp() RETURNS EMP + AS 'SELECT \'None\'::text AS name, + 1000 AS salary, + 25 AS age, + \'none\'::char16 AS dept' + LANGUAGE 'sql'; + +-- you can then project a column out of resulting the tuple by using the +-- "function notation" for projection columns. (ie. bar(foo) is equivalent +-- to foo.bar) Note that we don't support new_emp().name at this moment. + +SELECT name(new_emp()) AS nobody; + +-- let's try one more function that returns tuples +CREATE FUNCTION high_pay() RETURNS setof EMP + AS 'SELECT * FROM EMP where salary > 1500' + LANGUAGE 'sql'; + +SELECT name(high_pay()) AS overpaid; + + +----------------------------- +-- Creating SQL Functions with multiple SQL statements +-- you can also create functions that do more than just a SELECT. +----------------------------- + +-- you may have noticed that Andy has a negative salary. We'll create a +-- function that removes employees with negative salaries. + +SELECT * FROM EMP; + +CREATE FUNCTION clean_EMP () RETURNS int4 + AS 'DELETE FROM EMP WHERE EMP.salary <= 0 + SELECT 1 AS ignore_this' + LANGUAGE 'sql'; + +SELECT clean_EMP(); + +SELECT * FROM EMP; + + +----------------------------- +-- Creating C Functions +-- in addition to SQL functions, you can also create C functions. +-- See C-code/funcs.c for the definition of the C functions. +----------------------------- + +CREATE FUNCTION add_one(int4) RETURNS int4 + AS '_OBJWD_/funcs.so' LANGUAGE 'c'; + +CREATE FUNCTION concat16(char16, char16) RETURNS char16 + AS '_OBJWD_/funcs.so' LANGUAGE 'c'; + +CREATE FUNCTION copytext(text) RETURNS text + AS '_OBJWD_/funcs.so' LANGUAGE 'c'; + +CREATE FUNCTION c_overpaid(EMP, int4) RETURNS bool + AS '_OBJWD_/funcs.so' LANGUAGE 'c'; + +SELECT add_one(3) AS four; + +SELECT concat16('abc', 'xyz') AS newchar16; + +SELECT copytext('hello world!'); + +SELECT name, c_overpaid(EMP, 1500) AS overpaid +FROM EMP +WHERE name = 'Bill' or name = 'Sam'; + +-- remove functions that were created in this file + +DROP FUNCTION c_overpaid(EMP, int4) +DROP FUNCTION copytext(text) +DROP FUNCTION concat16(char16,char16) +DROP FUNCTION add_one(int4) +DROP FUNCTION clean_EMP() +DROP FUNCTION new_emp() +DROP FUNCTION add_em(int4, int4) +DROP FUNCTION one(); + +DROP TABLE EMP; |