Chapter 35. PL/pgSQL - SQL ��������

Table of Contents
35.1. ����
35.1.1. ʹ��PL/pgSQL���ŵ�
35.1.2. ��֧�ֵIJ����ͽ����������
35.2. ���� PL/pgSQL ��һЩ��ʾ
35.3. PL/pgSQL�Ľṹ
35.4. ����
35.4.1. ���������ı���
35.4.2. ��������
35.4.3. ������
35.4.4. ��¼����
35.4.5. RENAME
35.5. ���ʽ
35.6. �������
35.6.1. ��ֵ
35.6.2. SELECT INTO
35.6.3. ִ��һ��û�н���ı��ʽ��������
35.6.4. ִ�ж�̬����
35.6.5. ��ȡ���״̬
35.7. ���ƽṹ
35.7.1. �Ӻ�������
35.7.2. ����
35.7.3. ��ѭ��
35.7.4. ����������
35.7.5. �������
35.8. �α�
35.8.1. ��������
35.8.2. ���α�
35.8.3. ʹ���α�
35.9. �������Ϣ
35.10. ����������
35.11. ��Oracle�� PL/SQL ��ֲ
35.11.1. ��ֲ����
35.11.2. ����Ҫע��Ķ���
35.11.3. ��¼

PL/pgSQL�� PostgreSQL ���ݿ�ϵͳ��һ����װ�صĹ������ԡ� PL/pgSQL�����Ŀ���Ǵ���һ�ֿ�װ�صĹ������ԣ�����

���������û��������͵�����/���ת���ͼ��㺯�����⣬ �κο����� C ���Ժ����ﶨ��Ķ����������� PL/pgSQL��ʹ�á� ���磬���ǿ��Դ������ӵ��������㺯���� �����֮���ڶ���������������ں��������С�

35.1. ����

PL/pgSQL ������һ��(���κ�һ�������������ڲ�)������ʱ�� PL/pgSQL �ĵ��þ����������Դ�ı����ɶ�����ָ������ ��ָ������ȫת���� PL/pgSQL ���ṹ�� �����ں�����ʹ�õ��Ķ����� SQL ���ʽ�� SQL ���δ����ת����

��ÿ���������õ��ı��ʽ�� SQL �����ں������״�ʹ�õ�ʱ�� PL/pgSQL ����������һ��׼���õ�ִ�й滮��ʹ�� SPI �������� SPI_prepare �� SPI_saveplan �������� ���Ըñ��ʽ��������ķ��ʶ���ʹ����׼���õĹ滮�� ��ˣ�һ���������������������䣬������Ҫִ�й滮�ĺ����� ֻ��Ҫ׼���ͱ�����Щ���������ݿ������ڼ�����ʹ�õ��Ĺ滮�� ����������Ч�ؼ���Ϊ PL/pgSQL �������������ɷ�����ִ�й滮����ʱ�䡣 �����и�ȱ�������ض����ʽ���������еĴ������Ҫ�������е��Dz���ִ�е���ʱ����ܷ��֡�

һ�� PL/pgSQL �ں�����Ϊһ�������ƶ���ִ�мƻ��� ��ô�����ڸô����ݿ����ӵ��������ڸ��øù滮�� ��ô����������ͨ�������һЩ����������㶯̬���޸�������ݿ�ģʽ����ô�Ϳ��������⡣ ���磺

CREATE FUNCTION populate() RETURNS integer AS $$
DECLARE
    -- ������
BEGIN
    PERFORM my_function();
END;
$$ LANGUAGE plpgsql;

�����ִ������ĺ�������ô������ΪPERFORM������ɵ�ִ�мƻ��������� my_function() �� OID�� Ȼ�������ɾ��Ȼ�����´��� my_function()�� ��ô populate() �ͻ���Ҳ�Ҳ��� my_function()�� ��ʱ����ֻ�����´��� populate()�� �������������¿�ʼһ���µ����ݿ�Ự�����øú��������±���һ�Ρ� ����һ��������������ķ������ڸ���my_function �Ķ����ʱ�� ʹ�� CREATE OR REPLACE FUNCTION �����һ��������"�滻"����ô���� OID ������仯����

��ΪPl/pgSQL�����ַ�������ִ�й滮�� ������Щ��PL/pgSQL��ֱ�ӳ��ֵ� SQL ���������ÿ��ִ�е�ʱ��������ͬ�ı���ֶΣ� Ҳ����˵���㲻����һ���������� SQL �����еı�����ֶε����ơ� Ҫ�ƿ�������ƣ�������� PL/pgSQL �� EXECUTE��䶯̬�ع������� — ������ÿ��ִ�е�ʱ�򶼹���һ���µ�����ƻ���

ע��: PL/pgSQL ��EXECUTE���� PostgreSQL ������֧�ֵ� EXECUTE ���û�й�ϵ�� ��������EXECUTE��䲻���� PL/pgSQL ������ʹ�ã�����Ҳû��Ҫ����

35.1.1. ʹ��PL/pgSQL���ŵ�

SQL ��PostgreSQL �ʹ����������ϵ�����ݿ������������Ե����ԡ� ���ǿ�����ֲ�ģ���������ѧϰʹ�á� �������� SQL ��䶼���������ݿ������������ִ�С�

�����ζ����Ŀͻ���Ӧ�ñ����ÿ������͵����ݿ�������� �ȴ����������������ս������һЩ���㣬Ȼ�����������������һ����� ������Щ��������������̼�ͨѶ�����������Ŀͻ���������һ̨�������������ᵼ�����翪����

���ʹ����PL/pgSQL����ô����԰�һ�������һϵ�����������ݿ�������������һ���飬 ������ӵ���˹������Ե��������Ҽ� SQL ��ʹ�ã������Լ�˴�����ʱ�䣬��Ϊ���ò��Ÿ����ͻ���/������ͨѶ�Ĺ��ȡ� �������ܲ������Ե�����������

ͬ������ PL/pgSQL ������ʹ�� SQL �������������ͣ��������ͺ�����

35.1.2. ��֧�ֵIJ����ͽ����������

�������ǿ��Է��������κ��������͵���ֵ�����ǻ����Խ��ܻ��߷������������������ĸ������ͣ������ͣ��� ���ǻ���������һ�� PL/pgSQL ����Ϊ���� record �ĺ����� ��˼�ǽ����һ�������ͣ�����е��ֶ����ڵ������IJ�ѯ��ָ���ģ����������� Section 7.2.1.4 �����۵�������

PL/pgSQL ��������������Ϊ���ܲ����ض�̬������ anyelement �� anyarray�� һ����̬�ĺ���ʵ�ʲ������������Ϳ����ڲ�ͬ�ĵ��û����б仯�� �������� Section 31.2.5 �����۵������� һ�������� Section 35.4.1��

PL/pgSQL ����������Ϊ����һ�����ǿ��Է��ص��κε���ʵ����"����set��"�����߱� �����ĺ���ͨ��Ϊ�����ÿ����Ҫ���ص�Ԫ��ִ��һ�� RETURN NEXT �������������

���PL/pgSQL ������������Ϊ���� void�������ûɶ���õĶ������Է��صĻ���

PL/pgSQL Ŀǰ��������ȫ֧�������ͣ������������ͺ��²�ı���������һ���ġ� �����ζ�����������Լ�������ᱻǿ�ơ����ں����������ⲻ��ʲô���⣬ ���������� PL/pgSQL ��������Ϊ����һ�������ͣ���ô����Σ�ա�