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 存儲過程名稱,本次不做具體介紹,如下圖所示: