变量使用方法

最近更新时间: 2024-06-12 15:06:00

postgres=# CREATE OR REPLACE package b_4 IS    
    #定义变量
    v_1 int default 10;
    #定义结构体
    type v_struct is record(
        f1 int,
        f2 varchar
    );
    v_struct_1 v_struct;
    #定义游标,但不能定义游标变量
    type v_ref is ref cursor;

    #定义存储过程
    procedure setval(); 
    procedure echoval(); 
end;
/
CREATE OR REPLACE package body b_4 is
    #实现过程
    procedure setval() is       
    begin
        v_1:=random()*10;
        v_struct_1.f1:=random()*10;
        v_struct_1.f2:=md5(random()::text);
    end;    

    procedure echoval() is       
        v_rec record;
        v_ref_1 v_ref;
        type myvarchar is table of varchar;
        v_myvarchar_1 myvarchar:='{"tbase","pgxz"}';
    begin

        raise notice 'v_1 = %',v_1;
        raise notice 'v_struct_1 = %',v_struct_1;
        raise notice 'v_myvarchar = %',v_myvarchar_1;
        open v_ref_1 for select schemaname,tablename from pg_tables limit 2;
        loop
            fetch v_ref_1 into v_rec;
            exit when v_ref_1%notfound;
            raise notice 'v_rec = %',v_rec;
        end loop;        
    end;    
end;
/
#调用
postgres=# call b_4.setval();                   
CALL
postgres=# call b_4.echoval();                  
NOTICE:  v_1 = 8
NOTICE:  v_struct_1 = (9,618ad5bdc38b67af927e46d5ba2fca60)
NOTICE:  v_myvarchar = {tbase,pgxz}
NOTICE:  v_rec = (public,t1)
NOTICE:  v_rec = (squeeze,tables_internal)
CALL
postgres=#
postgres=# declare
    v_1 int:=b_4.v_1;   #定义包中变量    
begin  
    raise notice 'v_1 = %',v_1;
b_4.v_1:=11;
raise notice 'b_4.v_1 = %',b_4.v_1;
end;
/
NOTICE:  v_1 = 11
NOTICE:  b_4.v_1 = 11
DO