36.2. PL/Tcl �����Ͳ���

Ҫ��PL/Tcl���Դ���һ��������ʹ�ñ�׼���﷨��

CREATE FUNCTION funcname (argument-types) RETURNS return-type AS $$
    # PL/Tcl ������
$$ LANGUAGE pltcl;

PL/TclU��һ���ģ���������Ӧ������Ϊ pltclu ֮�⡣

���������һ�� Tcl ���롣 ����һ����ѯ���������������� ��������Ϊ���� $1 ... $n ���ݸ� Tcl �ű��ġ� �������ͨ���ķ����� Tcl �����з��صģ�������һ�� return ��䡣

���磬 һ���򵥵ķ�����������ֵ�����ֵ���������������壺

CREATE FUNCTION tcl_max (integer, integer) RETURNS integer AS $$
    if {$1 > $2} {return $1}
    return $2
$$ LANGUAGE pltcl STRICT;

��ע���Ӿ� STRICT���������ǿ��Բ��ÿ�������Ϊ NULL ������� ���������һ�� NULL���ú���ʵ���ϾͲ��ᱻ���ã� ��ֻ���Զ�����һ�� NULL �����

�����һ�����ϸ�ĺ��������һ��������ʵ����ֵ�� NULL�� ��ô��Ӧ�� $n ������������Ϊһ�����ִ��� Ҫ���һ���ض��IJ����Ƿ�Ϊ NULL������ʹ�ú��� argisnull�� ���磬��������Ҫ��tcl_max��һ������Ϊ null ������һ��Ϊ�� null ʱ���ط� null ������������ NULL��

CREATE FUNCTION tcl_max (integer, integer) RETURNS integer AS $$
    if {[argisnull 1]} {
	if {[argisnull 2]} { return_null }
	return $2
    }
    if {[argisnull 2]} { return $1 }
    if {$1 > $2} {return $1}
    return $2
$$ LANGUAGE pltcl;

����������Ҫ�� PL/Tcl �����з���һ�� NULL ��ֵ�� ����ִ�� return_null�����ܺ����Ƿ��ϸ����Ƕ�������ô����

�������͵IJ����ǵ��� Tcl ���鴫�ݸ����̵ġ� �����е�Ԫ�����־��Ǹ�����������������֡� �����ʵ�ʵ����е�һ�������� NULL ��ֵ����ô�������������г��֡� ������һ�����ӣ�

CREATE TABLE employee (
    name text,
    salary integer,
    age integer
);

CREATE FUNCTION overpaid_2 (EMP) RETURNS boolean AS $$
    if {200000.0 < $1(salary)} {
	return "t"
    }
    if {$1(age) < 30 && 100000.0 < $1(salary)} {
	return "t"
    }
    return "f"
$$ LANGUAGE pltcl;

Ŀǰû�з��ظ������ͽ��ֵ��֧�֡�Ҳ��֧�ַ��ؽ������

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