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 �Ǥ���ɬ�פ�����ޤ��� �ޤ������������ϹԤ����ͤ��֤��ʤ� SQL �ؿ���������������ϡ�void ���֤��褦��������뤳�Ȥ��Ǥ��ޤ��� ���ξ�硢 �Ǹ�Υ��ޥ�ɤ� SELECT �ˤ��ƤϤʤ�ޤ����Ȥ��С��ʲ��Τ褦�ˤ��ޤ���
CREATE FUNCTION clean_EMP () RETURNS void AS ' DELETE FROM EMP WHERE EMP.salary <= 0; ' LANGUAGE SQL; SELECT clean_EMP();
clean_emp ----------- (1 row)
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
�� (ʣ�緿) ���֤��ؿ��ϡ����Ǽ����Ȥ���ơ��֥�ؿ��Ȥ��ƻ��ѤǤ��ޤ��� ���δؿ��ϡ����ιԤ���°���� 1 �Ĥ�����Ф����硢���뤤�Ϲ����Τ�Ʊ��ʣ�緿����������¾�δؿ����Ϥ����ˤΤߡ� SQL ���Υ���ƥ����ȤǤ�ƤӽФ����Ȥ��Ǥ��ޤ����㤨�С�
SELECT (new_emp()).name;
name ------ None
�ѡ����������𤷤ʤ��褦�ˡ���̤��ɲä���ɬ�פ�����ޤ���
SELECT new_emp().name; ERROR:parser:parse error at or near "."
�ޤ����ؿ�ɽ������Ѥ���°������Ф��뤳�Ȥ�Ǥ��ޤ��� ��ñ����������ȡ�attribute(table) �� table.attribute �Ȥ���ɽ����ˡ�Τɤ���Ǥ���ѤǤ���Ȥ������ȤǤ���
SELECT name(new_emp());
name ------ None
-- -- ����� -- SELECT EMP.name AS youngster FROM EMP WHERE EMP.age < 30 -- ��Ʊ���Ǥ��� -- SELECT name(EMP) AS youngster FROM EMP WHERE age(EMP) < 30;
youngster ----------- Sam
��Ԥ��̤Ȥ����֤��ؿ��λ��Ѥ��롢¾����ˡ�ϡ��ѥ����Ȥ��ƹԷ�������դ���2���ܤδؿ���������ơ��ؿ��η�̤��Ϥ����ʲ��Τ褦����ˡ�Ǥ���
CREATE FUNCTION getname(emp) RETURNS text AS 'SELECT $1.name;' LANGUAGE SQL;
SELECT getname(new_emp()); getname --------- None (1 row)
�ơ��֥�ؿ��ϡ��䤤��碌�� FROM ��ǻ��Ѥ��뤳�Ȥ��Ǥ��ޤ��� SQL ����δؿ��Ϥ��٤� FROM ��ǻ��ѤǤ��ޤ�����ʣ�緿���֤��ؿ����ä������Ǥ��� �ؿ������ܷ����֤��褦�������Ƥ����硢�ơ��֥�ؿ��� 1 ������ơ��֥��������ޤ��� �ؿ���ʣ�緿���֤��褦�������Ƥ����硢�ơ��֥�ؿ���ʣ�緿����Τ��줾����Ф��� 1 �Ĥ����������ޤ���
�ʲ�������ޤ���
CREATE TABLE foo (fooid int, foosubid int, fooname text); INSERT INTO foo VALUES(1,1,'Joe'); INSERT INTO foo VALUES(1,2,'Ed'); INSERT INTO foo VALUES(2,1,'Mary'); CREATE FUNCTION getfoo(int) RETURNS foo AS ' SELECT * FROM foo WHERE fooid = $1; ' LANGUAGE SQL; SELECT *, upper(fooname) FROM getfoo(1) AS t1;
fooid | foosubid | fooname | upper -------+----------+---------+------- 1 | 1 | Joe | JOE (2 rows)
�㤫��ʬ����Ȥ��ꡢ�ؿ��η�̤���ϡ��̾�Υơ��֥�����Ʊ���褦�˰������Ȥ��Ǥ��ޤ���
���δؿ��η������줿�Τ� 1 �ԤΤߤǤ��뤳�Ȥ����դ��Ƥ��������� ����� SETOF ����ꤷ�ʤ��ä�����Ǥ���
SQL �ؿ��� SETOF sometype ���֤��褦�������Ƥ����硢�ؿ��κǸ�� SELECT �䤤��碌�ϺǸ�ޤǼ¹Ԥ��졢���Ϥ����Ԥ� set �����ǤȤ����֤���ޤ���
���ε�ǽ��Ȥ��ˤ��̾�ؿ���ơ��֥�ؿ��Ȥ��ƸƤӽФ��ޤ��� ���ξ�硢�ؿ��ˤ�ä��֤����ƹԤϡ��䤤��碌���鸫����ơ��֥�ιԤˤʤ�ޤ��� �㤨�С��ơ��֥� foo �����Ƥ��嵭��Ʊ���Ǥ���аʲ��Τ褦�ˤʤ�ޤ���
CREATE FUNCTION getfoo(int) RETURNS setof foo AS ' SELECT * FROM foo WHERE fooid = $1; ' LANGUAGE SQL; SELECT * FROM getfoo(1) AS t1;
fooid | foosubid | fooname -------+----------+--------- 1 | 1 | Joe 1 | 2 | Ed (2 rows)
���ߡ�set ���֤��ؿ��� SELECT �䤤��碌���оݥꥹ����Ǥ�ƤӽФ����Ȥ��Ǥ��ޤ���SELECT �����Ȥˤ�ä���������ƹԤ��Ф���set ���֤��ؿ����ƤӽФ��졢�ؿ��η�� 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 ���֤�������ϹԤ���������ʤ�����Ǥ���