1. 程式人生 > 其它 >KingbaseES OUT 型別引數過程與函式的呼叫方法

KingbaseES OUT 型別引數過程與函式的呼叫方法

對於含有 out 型別引數的過程或者函式,只能通過塊方式呼叫,這是因為,ksql 還不支援類似 Oracle 那樣通過 var 定義變數。

一、帶OUT的procedure 呼叫

建立過程:

create or replace procedure proc1( v_id integer, out v_retcode text, out v_retinfo text, out v_row_num integer)
AS
declare
begin
   insert into table_new(id, name, age) select t.id, t.name, m.age from student t, employees m where
t.id=m.id and t.id=v_id; GET DIAGNOSTICS V_ROW_NUM := ROW_COUNT; -- 執行成功後的返回資訊 V_RETCODE := 'SUCCESS'; V_RETINFO := '結束'; --異常處理 EXCEPTION WHEN OTHERS THEN V_RETCODE := 'FAIL'; V_RETINFO := SQLERRM; end; /

呼叫過程:

declare
  v_retcode text;
  v_retinfo text;
  v_row_num 
integer; v_id integer; begin v_id:=30; CALL proc1(v_id, v_retcode, v_retinfo, v_row_num); raise notice 'proc1 result is: %, %, %', v_retcode, v_retinfo, v_row_num; end; /

二、帶 OUT 引數的function呼叫

建立函式:

create or replace function fun1( v_id integer, out v_retcode text, out v_retinfo text, out v_row_num integer
) AS $$ declare begin insert into table_new(id, name, age) select t.id, t.name, m.age from student t, employees m where t.id=m.id and t.id=v_id; GET DIAGNOSTICS V_ROW_NUM := ROW_COUNT; -- 執行成功後的返回資訊 V_RETCODE := 'SUCCESS'; V_RETINFO := '結束'; --異常處理 EXCEPTION WHEN OTHERS THEN V_RETCODE := 'FAIL'; V_RETINFO := SQLERRM; end; $$ language plpgsql /

呼叫函式:

--function 可以不需要在 block 裡呼叫
select fun1(12);


--但如果需要out返回資訊,則必須通過block 傳入變數
declare
  v_retcode text;
  v_retinfo text;
  v_row_num integer;
  v_id integer;
begin
  v_id:=30;
  select * from  fun1(v_id) into v_retcode, v_retinfo, v_row_num;
  raise notice 'proc1 result is:  %, %, %', v_retcode, v_retinfo, v_row_num;
end;
/
KINGBASE研究院