41.11. PL/pgSQL������ʾ

��PL/pgSQL�н��п�����һ�ֺ÷�����ʹ�����Լ�ѡ����ı��༭����������������������һ��������ʹ��psql�����벢�Ҳ�����Щ�����������������������ʹ��CREATE OR REPLACE FUNCTION����д������һ�������⡣�����ַ�ʽ��ֻ��Ҫ���ظ��ļ������º����Ķ��塣���磺

CREATE OR REPLACE FUNCTION testfunc(integer) RETURNS integer AS $$
          ....
$$ LANGUAGE plpgsql;

������psql�ڼ䣬�������������������������������һ�����������ļ���

\i filename.sql

���ҽ����������� SQL ���������Ըú�����

��һ����PL/pgSQL�п����ķ�ʽ����һ�� GUI ���ݿ���ʹ��ߣ����ܷ���Թ������ԵĿ��������ֹ��ߵ�һ��������pgAdmin����Щ����ͨ���ṩ��������ԣ�����ת�嵥�����Լ��������´����͵��Ժ�����

41.11.1. ��������

һ��PL/pgSQL�����Ĵ�����һ��CREATE FUNCTION�б�ָ��Ϊһ���ַ������������ͨ���ķ�ʽ�Ѹ��ַ���д�ڵ������м䣬��ô�ú������е��κε����Ŷ����뱻˫д��ͬ���κη�б��Ҳ���뱻˫д���ٶ�ʹ����ת���ַ����﷨����˫д��������е��߳��������ڸ����ӵ�����д��������ȫ�޷����⣬��Ϊ������׷�������Ҫ�����߸������ڵ����š������Ƽ���ת���Ѻ�����д��һ��"��Ԫ����"���ַ��������� 4.1.2.4 ����������Ԫ���÷����У���Ӳ���Ҫ˫д�κ����š�����Ҫע��Ϊ����Ҫ��ÿһ��Ƕ��ѡ��һ����ͬ����Ԫ���ö���������磬����ܰ�CREATE FUNCTION����д�ɣ�

CREATE OR REPLACE FUNCTION testfunc(integer) RETURNS integer AS $PROC$
          ....
$PROC$ LANGUAGE plpgsql;

�������棬������� SQL ������Ϊ���ַ���ʹ�����Ų�����$$���綨������װ���ַ����� SQL ����Ƭ�Ρ��������Ҫ���ð���$$���ı��������ʹ��$Q$�ȵȡ�

����ͼ��չʾ����дû����Ԫ���õ�����ʱ��Ҫ��ʲô���ڽ�֮ǰ����Ԫ���õĴ��뷭��ɸ���������Ĵ���ʱ�����ǻ�����������

1 ������

������ʼ�ͽ��������壬���磺

CREATE FUNCTION foo() RETURNS integer AS '
          ....
' LANGUAGE plpgsql;

��һ�����������õĺ������е��κ�λ�ã����������ɶԳ��֡�

2 ������

���ں������ڵ��ַ��������磺

a_output := ''Blah'';
SELECT * FROM users WHERE f_name=''foobar'';

����Ԫ���÷����У���ֻ��Ҫд��

a_output := 'Blah';
SELECT * FROM users WHERE f_name='foobar';

��ǡ�þ���PL/pgSQL����������лῴ���ġ�

4 ������

�����ں����ڵ�һ���ַ�����������Ҫһ��������ʱ�����磺

a_output := a_output || '' AND name LIKE ''''foobar'''' AND xyz''

ʵ�ʻᱻ׷�ӵ�a_output��ֵ���ǣ� AND name LIKE 'foobar' AND xyz��

����Ԫ���÷����У������д��

a_output := a_output || $$ AND name LIKE 'foobar' AND xyz$$

ҪС��������Χ���κ���Ԫ���ö������ֻ��$$��

6 ������

���ں������ڵ�һ���ַ����е�һ������������ַ�������ĩβ���ڣ����磺

a_output := a_output || '' AND name LIKE ''''foobar''''''

��׷�ӵ�a_output��ֵ���ǣ� AND name LIKE 'foobar'��

����Ԫ���÷����У�����ɣ�

a_output := a_output || $$ AND name LIKE 'foobar'$$

10 ������

��������һ���ַ���������ռ 8 �����ţ���������������ʱ������ᰤ�Ÿ��ַ���������ĩβ������ 2 ���������������дһ���������������ĺ��������� 41-9�У����㽫�ܿ���ֻ��Ҫ���֡����磺

a_output := a_output || '' if v_'' ||
    referrer_keys.kind || '' like ''''''''''
    || referrer_keys.key_string || ''''''''''
    then return ''''''  || referrer_keys.referrer_type
    || ''''''; end if;'';

a_output��ֵ���ǣ�

if v_... like ''...'' then return ''...''; end if;

����Ԫ���÷����У�����ɣ�

a_output := a_output || $$ if v_$$ || referrer_keys.kind || $$ like '$$
    || referrer_keys.key_string || $$'
    then return '$$  || referrer_keys.referrer_type
    || $$'; end if;$$;

�������Ǽٶ�����ֻ��Ҫ�ѵ����ŷ���a_output�У���Ϊ��ʹ��ǰ�����������á�

41.11.2. ����ı���ʱ���

Ϊ�˸����û���һЩ�򵥵��������������Σ��֮ǰ�ҵ����ǣ� PL/PgSQL�ṩ�˶�����������������ʱ�� �������ã����ǿ�����һ�������ı����ڼ䱻�������� WARNING����ERROR��һ���Ѿ��յ��� WARNING�ĺ������Ա�����ִ�ж����������һ������Ϣ�� ��˽�������һ�������Ŀ��������н��в��ԡ�

��Щ����ļ��ͨ�����ñ���plpgsql.extra_warnings ��plpgsql.extra_errors���ã�����ǰ�����ھ���������� �ڴ������߶����Ա�����Ϊһ���ö��ŷָ��ļ���б��� "none"����"all"��Ĭ��ֵ��"none"�� ��ǰ�б��п��õļ��ֻ��һ�֣�

shadowed_variables

���һ�������Ƿ��ڸ�����һ��֮ǰ����ı�����

���������չʾ�˽�plpgsql.extra_warnings ����Ϊshadowed_variables��Ч����

SET plpgsql.extra_warnings TO 'shadowed_variables';

CREATE FUNCTION foo(f1 int) RETURNS int AS $$
DECLARE
f1 int;
BEGIN
RETURN f1;
END
$$ LANGUAGE plpgsql;
WARNING:  variable "f1" shadows a previously defined variable
LINE 3: f1 int;
        ^
CREATE FUNCTION