KingbaseES OUT 型別引數過程與函式的呼叫方法
阿新 • • 發佈:2021-07-28
對於含有 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 wheret.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_numinteger; 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研究院