SQL�ؿ��ϡ�Ǥ�դ�SQL�䤤��碌ʸ�Υꥹ�Ȥ�¹Ԥ������Υꥹ�ȤκǸ���䤤��碌�η�̤��֤��ޤ������κǸ���䤤��碌�� SELECT �Ǥʤ���Фʤ�ޤ���ñ���(��set��)��硢�Ǹ���䤤��碌�η�̤κǽ�ιԤ��֤���ޤ���(ʣ���Ԥη�̤Τ����� "�ǽ�ι�"�ϡ�ORDER BY ����Ѥ��ʤ��¤�����Ť��뤳�Ȥ��Ǥ��ʤ����ȤϳФ��Ƥ����Ʋ�������) �Ǹ���䤤��碌������Ԥ��֤��ʤ����� NULL ���֤���ޤ���
¾�ˤ⡢SQL �ؿ��ϡ�SETOF sometype �����֤��褦�˻��ꤹ�뤳�Ȥˤ�ꡢ set ���֤��褦��������뤳�Ȥ�Ǥ��ޤ������ξ�硢�Ǹ���䤤��碌�η�̤����ƤιԤ��֤���ޤ������ܺ٤ϸ���������ޤ���
SQL �ؿ������Τϡ����ߥ�����Ƕ��ڤä� 1 �İʾ�� SQL ʸ�Υꥹ�ȤǤʤ���Фʤ�ޤ��� CREATE FUNCTION ���ޥ�ɤι�ʸ�Ǥϡ��ؿ������Τ�ñ�������dz��ɬ�פ�����ޤ��Τǡ��ؿ�������ǻ��Ѥ����ñ�������(')��2�Ĥ�ñ�������((''))���Хå�����å���(\')����������ʬ���դ��ơ����������פ��ʤ���Фʤ�ޤ���
SQL�ؿ��ΰ����ϴؿ�������� $n �Ȥ�����ʸ���Ѥ���ɽ�����Ȥ��Ǥ��ޤ����Ĥޤꡢ$1����1��������$2����2����...�Ȥʤ�ޤ���������ʣ�緿�ξ�硢$1.emp �Τ褦�� "�ɥå�ɽ��" ���Ѥ��ư�����°���˥����������뤳�Ȥ��Ǥ��ޤ���
��ñ��SQL�ؿ�����Ȥ��ơ������ζ�Ը��¤Τ��餪�������Ф��������������
CREATE FUNCTION tp1 (integer, numeric) RETURNS integer AS ' UPDATE bank SET balance = balance - $2 WHERE accountno = $1; SELECT 1; ' LANGUAGE SQL;
�桼���ϲ����δؿ���Ȥäơ������ֹ�17����100�ɥ������Ф����Ȥ���ǽ�Ǥ���
SELECT tp1(17, 100.0);
�ºݤϡ������餯���δؿ����� "1" �Ȥ�������ʳ��Ρ����ͭ�Ѥʷ�̤�ɬ�פˤʤ�Ǥ��礦���顢���º�Ū�ʴؿ�����ϰʲ��Τ褦�ʡ��Ĺ��Ĵ�������������Ĺ���֤��褦�ʤ�Τˤʤ�ޤ���
CREATE FUNCTION tp1 (integer, numeric) RETURNS numeric AS ' UPDATE bank SET balance = balance - $2 WHERE accountno = $1; SELECT balance FROM bank WHERE accountno = $1; ' LANGUAGE SQL;
SQL ������Υ��ޥ�ɤν���ϡ����ƤޤȤ�ơ�1�Ĥδؿ��Ȥ���������뤳�Ȥ��Ǥ��ޤ������Υ��ޥ�ɤˤϡ�SELECT �ʳ��ˤ�ǡ������ѹ�������(�ĤޤꡢINSERT, UPDATE, ����ӡ�DELETE) ��ޤळ�Ȥ��Ǥ��ޤ����������Ǹ�Υ��ޥ�ɤ� ���δؿ�������ͷ��ǻ��ꤷ����Τ��֤���SELECT �Ǥ���ɬ�פ�����ޤ���
CREATE FUNCTION clean_EMP () RETURNS integer AS ' DELETE FROM EMP WHERE EMP.salary <= 0; SELECT 1 AS ignore_this; ' LANGUAGE SQL; SELECT clean_EMP();
x --- 1
SQL �ؿ��κǤ�ñ��ʤ�Τϡ�������Ȥ�ʤ��� integer ���Τ褦�ʴ��ܷ���ñ���֤���ΤǤ���
CREATE FUNCTION one() RETURNS integer AS ' SELECT 1 as RESULT; ' LANGUAGE SQL; SELECT one();
one ----- 1
�ؿ�������Ǵؿ��η���Ѥ������̾��(RESULT �Ȥ���̾����)����������Ȥ����ܤ��Ƥ������������������������̾�Ϥ��δؿ�������ϲĻ�ǤϤ���ޤ����äơ����η�̤� RESULT �ǤϤʤ���one �Ȥ�����٥��ɽ������Ƥ��ޤ���
���ܷ�������Ȥ��ƤȤ롢SQL �ؿ���������뤳�ȤϤۤȤ�ɤξ���ñ�Ǥ����ʲ�����ǡ��ؿ������Ǥ��ΰ����� $1 �� $2 �Ȥ��ƥ����������Ƥ��뤳�Ȥ����դ��Ʋ�������
CREATE FUNCTION add_em(integer, integer) RETURNS integer AS ' SELECT $1 + $2; ' LANGUAGE SQL; SELECT add_em(1, 2) AS answer;
answer -------- 3
�ؿ���ʣ�緿�ΰ�����Ȥ�褦�˻��ꤷ����硢(������ $1 �� $2 ����Ѥ��ƹԤä��褦��)�ɤΰ�������Ѥ��뤫����ꤹ������ǤϤʤ������ΰ�����°������ꤹ��ɬ�פ�����ޤ����㤨�С�EMP �����Ȱ��ǡ�������ĥơ��֥롢�Ĥޤꡢ���Υơ��֥�ƹԤ�ʣ�緿��̾���Ǥ���Ȥ��ޤ����ʲ��ˡ���Ϳ���ܳۤ�����롢double_salary �ؿ����ޤ���
CREATE FUNCTION double_salary(EMP) RETURNS integer AS ' SELECT $1.salary * 2 AS salary; ' LANGUAGE SQL; SELECT name, double_salary(EMP) AS dream FROM EMP WHERE EMP.cubicle ~= point '(2,1)';
name | dream ------+------- Sam | 2400
�����ιԤ���1�ĤΥե�����ɤ���Ф������ $1.salary�Ȥ�����ʸ����Ѥ��Ƥ��뤳�Ȥ����դ��Ʋ��������ޤ���ʣ���ͤȤ��ơ��ơ��֥�θ��߹����Τ�ɽ������˥ơ��֥�̾����Ѥ��� SELECT ���ޥ�ɤθƤӽФ���ˡ�ˤ����դ��Ʋ�������
ʣ�緿���֤��ؿ���������뤳�Ȥ��ǽ�Ǥ���(�����������Ƚ��褦�ˡ����δؿ�����Ѥ������Թ������¤������Ĥ�¸�ߤ��ޤ���)�ʲ��� EMP ����1���֤��ؿ�������ޤ���
CREATE FUNCTION new_emp() RETURNS EMP AS ' SELECT text ''None'' AS name, 1000 AS salary, 25 AS age, point ''(2,2)'' AS cubicle; ' LANGUAGE SQL;
�����Ǥϡ���°��������ǻ��ꤷ�Ƥ��ޤ��������������黻�估���֤������뤳�Ȥ�Ǥ��ޤ����������ä��ؿ�����������ǡ�2�Ĥν��פ���������ʲ��˼����ޤ���
�оݥꥹ�Ȥν��֤ϡ�ʣ�緿�ȴ�Ϣ�����ơ��֥���Ǹ������ν��֤����Τ˰��פ���ɬ�פ�����ޤ���
ʣ�緿����Ȱ��פ���褦�˼����㥹�Ȥ��ʤ���Фʤ�ޤ�����ʤ��С��ʲ��Τ褦�ʥ��顼�Ȥʤ�ޤ���
ERROR: function declared to return emp returns varchar instead of text at column 1
PostgreSQL �θ��ߤΥ����Ǥϡ�ʣ�緿���֤��ؿ��λ��Ѥ����ǡ�˾�ޤ����ʤ����¤������Ĥ�¸�ߤ��ޤ�����ñ�ˤ����ȡ���Ԥ��֤�������ƤӽФ����������Τ���Ф����Ȥ��Ǥ��ޤ����ιԤ���1�Ĥ�°��������Ф������̤δؿ��ˤ��Τޤ��Ϥ�����ɬ�פ�����ޤ���(�����Τ�ɽ����������硢��̣�Τʤ����ͤˤʤ�ޤ���)�ʲ�������ޤ���
SELECT name(new_emp());
name ------ None
������ϡ�°��������Ф�����˴ؿ�ɽ������Ѥ��Ƥ��ޤ���������ñ����������ȡ� attribute(table) �� table.attribute �Ȥ���ɽ����ˡ�Ϥɤ���Ǥ���ѤǤ���Ȥ������ȤǤ���
-- -- ����� -- SELECT EMP.name AS youngster FROM EMP WHERE EMP.age < 30 -- ��Ʊ���Ǥ��� -- SELECT name(EMP) AS youngster FROM EMP WHERE age(EMP) < 30;
youngster ----------- Sam
�ؿ�������ͤ�°������Ф�����˴ؿ���ʸ����Ѥ��ʤ���Фʤ�ʤ���ͳ�ϡ������ơ��ؿ��ƤӽФ����ȹ�蘆�ä����ˡ��ѡ������ɥåȹ�ʸ����Ǥ��ʤ��ʤ뤳�Ȥ����Ǥ���
SELECT new_emp().name AS nobody; ERROR: parser: parse error at or near "."
��Ԥ��̤Ȥ����֤��ؿ��λ��Ѥ��롢¾����ˡ�ϡ��ѥ����Ȥ��ƹԷ�������դ���2���ܤδؿ���������ơ��ؿ��η�̤��Ϥ����ʲ��Τ褦����ˡ�Ǥ���
CREATE FUNCTION getname(emp) RETURNS text AS 'SELECT $1.name;' LANGUAGE SQL;
SELECT getname(new_emp()); getname --------- None (1 row)
���Ҥ��̤ꡢSQL �ؿ��� SETOF sometype ���֤��褦��������뤳�Ȥ��Ǥ��ޤ������ξ�硢�ؿ��κǸ�� SELECT �䤤��碌�ϺǸ�ޤǼ¹Ԥ��졢���Ϥ������ƤιԤ� set �����ǤȤ����֤���ޤ���
set ���֤��ؿ��� SELECT �䤤��碌���оݥꥹ����ǤΤ߸ƤӽФ����Ȥ��Ǥ��ޤ��� SELECT �����Ȥˤ�ä���������ƹԤ��Ф���set ���֤��ؿ����ƤӽФ��졢�ؿ��η�� set �γ����Ǥ��Ф��ƽ��ϹԤ���������ޤ����ʲ�������ޤ���
CREATE FUNCTION listchildren(text) RETURNS SETOF text AS 'SELECT name FROM nodes WHERE parent = $1' LANGUAGE SQL;
SELECT * FROM nodes; name | parent -----------+-------- Top | Child1 | Top Child2 | Top Child3 | Top SubChild1 | Child1 SubChild2 | Child1 (6 rows) SELECT listchildren('Top'); listchildren -------------- Child1 Child2 Child3 (3 rows) SELECT name, listchildren(name) FROM nodes; name | listchildren --------+-------------- Top | Child1 Top | Child2 Top | Child3 Child1 | SubChild1 Child1 | SubChild2 (5 rows)
�Ǹ�� SELECT �ˤ����ơ� Child2 ��Child3�ʤɤ����ϹԤ�ɽ������Ƥ��ʤ����Ȥ����դ��Ʋ�����������ϡ�listchildren �Ϥ������Ϥ��Ф��ƶ��� set ���֤�������ϹԤ���������ʤ�����Ǥ���