1、之前有個同學說他使用kettle執行一坨sql語句時,kettle直接卡死掉了。我給出的建議是使用儲存過程,果不其然使用儲存過程順利解決問題。
今天我們一起來學習下kettle如何呼叫儲存過程,這裡基於mysql進行演示。呼叫儲存過程有兩種方法:使用步驟【呼叫DB儲存過程】或者步驟【執行SQL指令碼】。
2、呼叫DB儲存過程-無參儲存過程。
1)建立無引數儲存過程sp_without_param
use test; drop procedure if exists sp_without_param; delimiter // create procedure sp_without_param() begin -- 列印資訊 select 'sp_without_param 我執行了' from dual; end // delimiter ;
2)將步驟【呼叫DB儲存過程】拖到畫布上,然後透過寫日誌列印執行結果,如下圖所示:
3)步驟【DB儲存過程】設定
步驟名稱:自定義步驟名稱。
資料庫連線:選擇定義好的資料庫連線。
儲存過程名稱:填寫需要呼叫的儲存過程名稱,這裡填寫sp_without_param。
啟用自動提交:設定資料庫事物是否自動提交。
返回值名稱:函式呼叫的結果的名稱;如果是一個儲存過程,留空即可。
返回值型別:函式呼叫結果的型別;如果是儲存過程則不適用。
引數:由於這裡是無引數儲存過程,無需填寫。
3、呼叫DB儲存過程-有參儲存過程。
1)建立有引數儲存過程sp_with_param,其中param_name 是入參,result是返回結果。
use test; drop procedure if exists sp_with_param; delimiter // create procedure sp_with_param(IN param_name VARCHAR(255) ,OUT result VARCHAR(255)) begin -- 列印資訊 select concat('sp_with_param 我執行了',param_name) INTO result from dual; end // delimiter ;
2)步驟【生成紀錄】產生入參param_name,步驟【呼叫DB儲存過程】呼叫sp,步驟【寫日誌】列印執行結果,如下圖所示:
3)步驟【DB儲存過程】設定
引數:
名稱:引數名稱,包含入引數和返回引數。
方向:IN、OUT、INOUT三個選項,根據情況自行選擇。
型別:引數型別,和儲存過程引數需要相對應。
注意:這裡的引數順序要和儲存過程裡面的引數順序保持一致。
4、使用步驟【執行SQL指令碼】呼叫儲存過程,這裡主要用到mysql中的語法如:call 儲存過程名稱,本次不做具體介紹,如下圖所示: