当前位置: 首页 > news >正文

使用 Kettle (Pentaho Data Integration) 創建 MySQL 儲存過程完整教程

最近在用 Kettle(PDI / Pentaho Data Integration)部署 MySQL 儲存過程時,都卡在同一個坑:「DELIMITER 報錯」。我把整個解決過程整理成這篇通用教程,完全不涉及任何專案細節,只用一個簡單、通用的範例示範。

不管你是初學者還是老手,看完這篇就能直接複製貼上,在 Kettle 裡建立任意儲存過程!

一、為什麼 Kettle 需要特別處理儲存過程?

Kettle 本身沒有圖形化「設計儲存過程」的工具(因為那是純 SQL DDL 操作)。
正確做法只有一個:用「執行 SQL 腳本」步驟CREATE PROCEDURE 語句送進資料庫。

但 MySQL 儲存過程內部充滿分號 ;,如果直接用命令列工具的寫法,就會在 Kettle 裡直接爆炸。

二、DELIMITER 到底是什麼?為什麼 Kettle 要刪掉它?

DELIMITER 是 MySQL 命令列工具(mysql、Workbench)專用的「客戶端指令」,不是真正的 SQL:

  • 預設結束符是 ;
  • 儲存過程裡又有無數 ;,所以要先改成 $$,寫完再改回 ;

但 Kettle 的「執行 SQL 腳本」走的是 JDBC 連線,JDBC 根本不認識 DELIMITER
直接貼帶 DELIMITER $$ 的腳本,會報錯:

You have an error in your SQL syntax ... near 'DELIMITER'

解決之道超簡單

  • 完全移除 DELIMITER $$DELIMITER ;
  • 只保留最後的 END;
  • 在 Kettle 步驟裡勾選 「作為單一語句執行」

三、給 Kettle 專用的「通用修正版」範例腳本(直接複製)

以下是一個通用新增記錄並返回 ID 的儲存過程(可直接替換成你的業務邏輯):

-- =====================================================
-- Kettle 建立通用儲存過程範例
-- =====================================================
DROP PROCEDURE IF EXISTS `sp_insert_record`;CREATE PROCEDURE `sp_insert_record`(IN p_name VARCHAR(100),           -- 姓名IN p_dept VARCHAR(50),            -- 部門IN p_salary DECIMAL(15,2),        -- 薪資OUT o_record_id BIGINT,           -- 返回新記錄IDOUT o_result_code INT,            -- 0=成功 / -1=失敗OUT o_result_msg VARCHAR(200)
)
BEGINDECLARE v_record_id BIGINT;DECLARE v_current_time DATETIME;-- 錯誤處理DECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGINROLLBACK;SET o_result_code = -1;SET o_result_msg = '數據插入失敗,事務已回滾';END;START TRANSACTION;SET v_current_time = NOW();-- 插入主表INSERT INTO your_table_name (name, dept, salary, create_time, update_time) VALUES (p_name, p_dept, p_salary, v_current_time, v_current_time);SET v_record_id = LAST_INSERT_ID();COMMIT;-- 返回結果SET o_record_id = v_record_id;SET o_result_code = 0;SET o_result_msg = '記錄創建成功';
END;

(你只要把 your_table_name 和欄位改成自己的表就好,邏輯完全可擴展成複雜事務、序列號、審批流程等。)

四、在 Kettle 裡執行的 7 步驟(超簡單)

  1. 開啟 Spoon → 新建轉換(或作業)
  2. 左側「核心物件」→ 「腳本」類別 → 拖入 執行 SQL 腳本
  3. 雙擊步驟 → 選擇你的 MySQL 資料庫連線(記得先測試連線成功)
  4. 把上面修正版腳本整段貼到「要執行的 SQL 腳本」框
  5. 關鍵設定(一定要這樣勾):
    • 作為單一語句執行(最重要!)
    • 每列執行?(取消勾選)
  6. 按 F9 執行
  7. 成功後,去資料庫執行 SHOW CREATE PROCEDURE sp_insert_record; 確認已建立

小提醒:資料庫帳號必須擁有 CREATE ROUTINE 權限。

五、建立完成後,怎麼在 Kettle 呼叫它?

請改用專用步驟 「呼叫 DB 儲存過程」(Call DB Procedure):

  • 設定 IN 參數
  • 接收 OUT 參數(o_record_id、o_result_code、o_result_msg)
  • 可以接後續步驟做判斷或寫入檔案

超方便,完全不用再寫 Execute SQL!

六、總結與進階小技巧

  • Kettle + MySQL 儲存過程的核心訣竅就是:「去掉 DELIMITER + 勾選單一語句
  • 這套方法同樣適用於 CREATE FUNCTION、TRIGGER、VIEW 等所有 DDL 操作
  • 如果你的過程很複雜(多個 INSERT、迴圈、動態 SQL),一樣用這方法

這篇文章把我 debug 的所有經驗濃縮成最實戰版本,希望對正在用 Kettle 做企業系統的你有幫助!

http://www.jsqmd.com/news/486275/

相关文章:

  • 西安发育迟缓康复机构怎么选?家长必看的科学筛选指南 - 品牌测评鉴赏家
  • 界面开发详解
  • 嵌入式定时器问题
  • 2026年度甄选:六大主流青少儿英语培训机构推荐 - 品牌2026
  • 警惕!孩子说话晚别乱选机构!3步避开90%的坑,附靠谱参考 - 品牌测评鉴赏家
  • springboot基于Java的旅游民宿网络营销系统
  • 语音通知接口哪家易对接?开发者语音平台选型建议 - Qqinqin
  • PP-DocLayoutV3版面区域检测模型部署
  • OpenCV 实战:从视频处理到图像轮廓检测的全维度解析
  • 语音验证码平台哪个好?国内主流语音服务平台推荐 - Qqinqin
  • 2026年成都自闭症机构排名大揭秘,家长必看! - 品牌测评鉴赏家
  • 力扣 第178场双周赛(A~C)
  • 郑州儿童发育迟缓康复怎么选?家长必看的科学干预与机构挑选指南 - 品牌测评鉴赏家
  • 关于VMware WorkKstation Pro密码破解详细过程
  • 西安自闭症康复机构实测指南|写给焦虑的家长,少走弯路就是给孩子多一份希望 - 品牌测评鉴赏家
  • 软件测试模型梳理总结
  • 合肥自闭症机构排名(2026实测版)|家长必看,避坑不花冤枉钱 - 品牌测评鉴赏家
  • 2026年3月青岛婚纱照/新中式婚纱照/礁石海边婚纱照/园林婚纱照/马场婚纱照公司综合测评 - 2026年企业推荐榜
  • 鹅厂面试:SELECT * 一定导致索引失效?常见索引失效场景有哪些?
  • 双证加持,能力翻倍|PeopleCert SRE + DevOps双认证,开启数字化运维新征程!
  • 哪个语音通知平台性价比高?国内专业语音系统推荐 - Qqinqin
  • 测试文章测测测测试测试的测试从申城
  • VMware 17 安装 RHEL 8
  • 猜数字游戏
  • 合肥自闭症机构大揭秘:为“星星的孩子”点亮希望之光 - 品牌测评鉴赏家
  • 语音接口哪家稳定?主流语音通知平台对比评测 - Qqinqin
  • 警惕!2026年315全方位“扒皮”:从AI换脸到毒预制菜,你避开了科技陷阱,却掉进了民生巨坑
  • 西安自闭症机构全攻略:2026为“星星的孩子”照亮前行之路 - 品牌测评鉴赏家
  • Ghostty 终端模拟器 配置指南
  • 提示工程架构师的团队敏捷心法:用这4个原则搞定prompt快速交付