Mysql

想盡辦法創建我的第一個 MySQL 儲存過程

  • January 21, 2021

我正在嘗試在 MySQL 5.5.8 中創建一個儲存過程。使用連接器 8.0.13。調試此程序後,必須將其嵌入到 ac#.net 應用程序中,以便在每次設置程序時動態創建。目前,我正在手動進行。

對於像我這樣具有 MS SQL、Oracle 和 DB2 背景的人來說,這是具有挑戰性的。老實說,我閱讀了 MySQL 開發文件並蒐索了一些 MySQL SQL 語法。我收集的是:

  • 我必須將分隔符更改為類似//
  • 我應該使用if not exists以防萬一
  • 參數不以 開頭@,必須用括號括起來
  • 我用臨時分隔符結束塊,然後//將其恢復;

這就是我得出的結論:

delimiter //
create procedure if not exists `logging`.`logEntry`(
  in hostName varchar(512)
 ,in entryDateTime datetime
 ,in entryText varchar(1024)
 ,out return_value int
)
begin
 insert into `logging`.`log` (hostName, entryDateTime, entryText) select hostName, entryDateTime, entryText;
 set return_value = last_insert_id();
 select return_value;
end//
delimiter ;

當我在 SquirrelSQL 中執行上述程式碼時,伺服器會拋出以下錯誤:

錯誤:您的 SQL 語法有錯誤;檢查與您的 MySQL 伺服器版本相對應的手冊,以在第 1 行的“如果不存在 logging.logEntry”(在 hostName varchar(512)中,在 entryDat 中)附近使用正確的語法 SQLState:42000 錯誤程式碼:1064

這是我嘗試過的:

  • 不帶DELIMITER跑
  • 已移除if not exists
  • 刪除了實體名稱周圍的反引號
  • 插入values()而不是select即使獨立插入工作

我知道這對於一個經驗豐富的 MySQL 開發人員來說是完全顯而易見的,但它逃脫了像我這樣具有不同背景的人。我是否使用了 5.5.8 中不存在的任何功能,或者我的程式碼中是否存在錯誤?

當我放棄通過 SquirrelSQL 創建儲存過程並安裝 MySQL GUI 工具時,我能夠通過使用目錄、選擇我的模式、切換到儲存過程選項卡並點擊創建儲存來創建具有完全相同源的過程最底部的 Proc 按鈕。

檢查手冊以獲取正確的語法。

1064 正好指向“如果不存在”;此語法在 MySQL 中不可用。

引用自:https://dba.stackexchange.com/questions/278595