可変引数のストアード・プロシージャー

以下は、可変引数と $var 値を使用して入力パラメーターのデータ型を取得するストアード・プロシージャーの例です。
CREATE OR REPLACE PROCEDURE sp_varargs01(varargs)
  RETURNS INT4
  LANGUAGE NZPLSQL
  AS 
  BEGIN_PROC
    DECLARE
      num_args int4;
      typ oid;
      idx int4;
    BEGIN
      num_args := PROC_ARGUMENT_TYPES.count;
      RAISE NOTICE 'Number of arguments is %',  num_args;
      for i IN 0 .. PROC_ARGUMENT_TYPES.count - 1 LOOP
        typ := PROC_ARGUMENT_TYPES(i);
        idx := i+1;
        RAISE NOTICE 'argument $% is type % value ''%''',  idx, typ,
                     $idx;
        END LOOP;
    END;
  END_PROC;
sp_varargs01 プロシージャーの呼び出し例を以下に示します。
select sp_varargs01(true, 'test'::char(10), 62443234::int8, 123::int2, 
123456::int4, 34343.4343::float4, 1212.2323::float8, 
'test2'::varchar(10), '2009-05-12'::date, '13:14:05'::time, 
'2009-05-12 08:10:10'::timestamp, '2 days 1 hour'::interval, 
'11:40:36+05'::timetz, 3243.4324234::numeric, 
3243.4324234::numeric(7,2), 5::int1, 'foo'::nchar(20), 
'foo'::nvarchar(20), null::int4);
NOTICE:  Number of arguments is 19
NOTICE:  argument $1 is type 16 value 't'
NOTICE:  argument $2 is type 1042 value 'test      '
NOTICE:  argument $3 is type 20 value '62443234'
NOTICE:  argument $4 is type 21 value '123'
NOTICE:  argument $5 is type 23 value '123456'
NOTICE:  argument $6 is type 700 value '34343.4'
NOTICE:  argument $7 is type 701 value '1212.2323'
NOTICE:  argument $8 is type 1043 value 'test2'
NOTICE:  argument $9 is type 1082 value '2009-05-12'
NOTICE:  argument $10 is type 1083 value '13:14:05'
NOTICE:  argument $11 is type 1184 value '2009-05-12 08:10:10'
NOTICE:  argument $12 is type 1186 value '2 days 01:00:00'
NOTICE:  argument $13 is type 1266 value '11:40:36+05'
NOTICE:  argument $14 is type 1700 value '3243.4324234'
NOTICE:  argument $15 is type 1700 value '3243.43'
NOTICE:  argument $16 is type 2500 value '5'
NOTICE:  argument $17 is type 2522 value 'foo                 '
NOTICE:  argument $18 is type 2530 value 'foo'
NOTICE:  argument $19 is type 23 value '<NULL>'
 sp_varargs01
--------------

(1 row)