PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 35. PL/pgSQL - SQL �������� | Fast Forward | Next |
�����ڿ���ʹ�õı�����������һ������������������� ��Ψһ��������һ��FORѭ�����ѭ����������һ��������Χ�ڵ����ģ����Զ�����Ϊ������������
PL/pgSQL��������������� SQL �������ͣ����� integer��varchar �� char��
������һЩ�������������ӡ�
user_id integer; quantity numeric(5); url varchar; myrow tablename%ROWTYPE; myfield tablename.fieldname%TYPE; arow RECORD;
һ������������һ������ǡ�
name [ CONSTANT ] type [ NOT NULL ] [ { DEFAULT | := } expression ];
���������DEFAULT�Ӿ䣬��ô���������ڽ���ÿ��ʱ����ñ����ij�ʼֵ�� ���û�и���DEFAULT�Ӿ䣬��ô�ñ�����ʼ��Ϊ SQL ��ֵ�� CONSTANTѡ������˸ñ�������ֵ����������ֵ�ڸÿ�ķ�Χ�ڱ��ֳ����� ���������NOT NULL����ô����NULL��ֵ������һ������ʱ���� ������������ΪNOT NULL�ı�������������һ���ǿյ�ȱʡֵ��
ȱʡֵ����ÿ�ν���ÿ��ʱ�����ġ���ˣ������ now() ����һ������Ϊ timestamp �ı����������ӵ�к���ʵ�ʵ��õ�ʱ�䣬�����Ǻ���Ԥ�����ʱ�䡣
���ӡ�
quantity integer DEFAULT 32; url varchar := 'http://mysite.com'; user_id CONSTANT integer := 10;
���ݸ������IJ��������� $1��$2���ȵ������ı�ʶ���� Ϊ�����ӿɶ��ԣ����ǿ���Ϊ $n ���������������� Ȼ������������ֱ�ʶ��������ָ�����ֵ��
�����ִ��������ķ������ȽϺõ����� CREATE FUNCTION ����������������� ���磺
CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$ BEGIN RETURN subtotal * 0.06; END; $$ LANGUAGE plpgsql;
����һ���������� PostgreSQL 8.0 ��ǰ��Ψһ�ķ����� ����ȷ������Ϊ������ʹ�������
name ALIAS FOR $n;
�������ͬһ�����ӿ���������������
CREATE FUNCTION sales_tax(REAL) RETURNS real AS $$ DECLARE subtotal ALIAS FOR $1; BEGIN RETURN subtotal * 0.06; END; $$ LANGUAGE plpgsql;
�������ӣ�
CREATE FUNCTION instr(varchar,integer) RETURNS integer AS $$ DECLARE v_string ALIAS FOR $1; index ALIAS FOR $2; BEGIN -- �����һЩ���� END; $$ LANGUAGE plpgsql; CREATE FUNCTION concat_selected_fields(in_t tablename) RETURNS text AS $$ BEGIN RETURN in_t.f1 || in_t.f3 || in_t.f5 || in_t.f7; END; $$ LANGUAGE plpgsql;
���һ�� PL/pgSQL �����ķ�����������Ϊһ����̬���� ��anyelement ���� anyarray������ô�ͻᴴ��һ������IJ����� $0���������������Ǻ�����ʵ�ʷ������ͣ��ʹ�ʵ�����������Ƶ��Ƶ�����һ�� ������ Section 31.2.5���� ��������������������ʵ�ʷ������ͣ��� Section 35.4.2 ����ʾ�������� $0 ��ʼ��Ϊ�գ����ҿ��Ա������ģ����ԣ������Ҫ�����������ڱ��淵��ֵ�� ��Ȼ�Ⲣ�DZ���ġ�$0 �����Ը���һ�����������磬��������������κ��� + ��������������������ת��
CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement) RETURNS anyelement AS $$ DECLARE result ALIAS FOR $0; BEGIN result := v1 + v2 + v3; RETURN result; END; $$ LANGUAGE plpgsql;
variable%TYPE
%TYPE �ṩһ���������߱��ֶε��������͡� ����������������Ҫ�������ݿ���ֵ�ı��������磬�������� users ��������һ���ֶν� user_id��Ҫ����һ���� users.user_id ������ͬ�ı����������д��
user_id users.user_id%TYPE;
ͨ��ʹ�� %TYPE�������֪�������õĽṹ���������ͣ� ���ң�����Ҫ���ǣ����������������������ڽ����仯�ˣ����磺��� user_id �����ʹ� integer �ij� real������Ҳ����Ҫ����ĺ������塣
%TYPE �Զ�̬�ĺ����ر����ã���Ϊ�ڲ��������������Ϳ����ڲ�ͬ�������Dz�һ���ġ� ���ǿ���ͨ���������IJ������߽��ռλ������ %TYPE �ķ������������ʵı�����
name table_name%ROWTYPE; name composite_type_name;
һ���������ͱ�������������������row-type�������� ������һ���������Ա���һ��SELECT���� FOR������������һ�У�ֻҪ������ֶμ�ƥ��ñ������������͡� ����ֵ�Ķ������ֶ���ʹ�ó��õĵ��ʾ�����ʵģ����� rowvar.field��
һ���б�����������Ϊ��һ�����еı������ͼ����������ͬ��������ʹ�� table_name%ROWTYPE ��ʾ���� ������Ҳ������������������һ���������͵����֡�����Ϊÿ������һ���������ͬ���������ͣ� �� PostgreSQL ��ʵ��������ν��д��д %ROWTYPE�������� %ROWTYPE ����ʽ��ֲ�Ը��á���
�����IJ��������Ǹ������ͣ���������У������ʱ�� ��Ӧ�ı�ʶ�� $n ����һ���б��������ҿ��Դ���ѡȡ�ֶΣ����� $1.user_id��
��һ�������͵ı����У�ֻ���Է����û�����ı����е����ԣ� ������ OID ��������ϵͳ���ԣ���Ϊ���п�������һ����ͼ���� �������͵�������̳б����� char(n) ���������ֶεijߴ�;��ȡ�
������һ��ʹ�ø������͵����ӣ�
CREATE FUNCTION merge_fields(t_row tablename) RETURNS text AS $$ DECLARE t2_row table2name%ROWTYPE; BEGIN SELECT * INTO t2_row FROM table2name WHERE ... ; RETURN t_row.f1 || t2_row.f3 || t_row.f5 || t2_row.f7; END; $$ LANGUAGE plpgsql; SELECT merge_fields(t.*) FROM tablename t WHERE ... ;
name RECORD;
��¼�������������ͱ�������������û��Ԥ����Ľṹ�� ������SELECT����FOR�����л�ȡʵ�ʵ��нṹ�� һ���б������ӽṹ������ÿ�θ�ֵ��ʱ��ı䡣 ��������һ������ǣ���һ����¼������������ֵ֮ǰ����û���ӽṹ�� �����κζ����е���������з��ʵ���ͼ��������һ������ʱ����
��ע�� RECORD �����������������ͣ�ֻ��һ��ռλ���� ���ǻ�Ӧ����ʶ���ڰ�һ�� PL/pgSQL ��������Ϊ����record���͵�ʱ�� ����һ����¼�����ĸ������ȫ��ͬ����ʹ�����������ʹ��һ����¼�����������Ľ��Ҳ��ˡ� ����������£�����д������ʱ��ʵ�ʵ��нṹ���Dz�֪���ģ����Ƕ��ڷ��� record �ĺ�����˵�� ʵ�ʵĽṹ���ڵ������IJ�ѯ��������ʱ������ģ����б��������������иı����нṹ��
RENAME oldname TO newname;
������� RENAME ������һ����������¼�����е����֡� ��� NEW ���� OLD �ڸ������������ﱻ����һ���������ã� ��ô��������ͺ����á��ּ� ALIAS��
���ӡ�
RENAME id TO user_id; RENAME this_var TO that_var;
ע��: RENAME ��PostgreSQL7.3 ����������⡣�����ë�������ȼ��Ƚϵͣ� ��Ϊ ALIAS �����˴���� RENAME ��ʵ����;��