在Navicat 中寫MySQL儲存過程的一個坑
今天在Navicat上寫了一個儲存過程,然後執行執行都沒有什麼問題,可是部署執行的時候總是有問題。
後來在navicat上又仔細看了很久。還是沒問題,執行了也沒問題。
進linux mysql -uxxx -pxxx執行,還是報錯:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''
很奇怪的一個原因,為什麼在mysql命令列執行會報錯,而通過navicat軟體就沒問題了???????
後來突然看到之前有人寫的儲存過程,看到了一個delimiter // ,看到這個立刻明白怎麼回事了。太粗心了。把這個常識給忘了。
寫儲存過程一定要delimiter 某個標記一下,不然預設情況下mysql遇到分號; 就認為是一個執行標記。
後來新增上delimiter // ,最後 使用//提交執行,最後在delimiter ;改成提交符號為分號;即可。
沒想到navicat執行儲存過程的時候,會預設就自動設定delimiter 為其他符號,修改了;為提交符號了。。。
好大的一個坑啊。
相關推薦
在Navicat 中寫MySQL儲存過程的一個坑
今天在Navicat上寫了一個儲存過程,然後執行執行都沒有什麼問題,可是部署執行的時候總是有問題。 後來在navicat上又仔細看了很久。還是沒問題,執行了也沒問題。 進linux mysql -uxxx -pxxx執行,還是報錯:ERROR 1064 (42000):
MYSQL儲存過程 踩坑
儲存過程該怎麼寫 這周主要就在使用儲存過程來修復線上資料 使用工具 Navicat 建立儲存過程 mysql 開始踩坑 一開始不知道儲存過程有專門的操作介面 建立臨時表 insert
用navicat工具建立MySQL儲存過程
使用Navicat for MySQL工具建立儲存過程步驟: 1. 新建函式(選擇函式標籤 -> 點選新建函式): 2.輸入函式的引數個數、引數名、引數型別等: 3.編寫儲存過程: 程式碼如下: Sql程式碼 &n
mysql儲存過程的坑(關於declare與具體實現順序)
先上程式碼 BEGIN DECLARE hotelId BIGINT DEFAULT 0; DECLARE done int DEFAULT FALSE; DECLARE tbtypeId BIGINT DEFAULT 0; SELECT id into
navicat中怎麼編寫儲存過程
習慣於SQL Server的語法,使用MySql時常常感到某些語法問題的莫名奇妙,半天摸不著頭腦,又不想一點點去看官方文件,在此記錄給其它朋友參考。 儲存過程的建立 1. 利用工具欄開啟[Query]視窗編寫sql: 注意:如果不用引數,紅色方框裡面的左右括號也是必要的 2.利用工具欄開啟[Fun
從零開始寫MySql儲存過程(四)通過儲存過程實現階乘的計算
首先,我認為在實際的開發中,應該沒人會用儲存過程去計算階乘,但是用這個作為練習我覺得還是挺不錯的,因為通過這個儲存過程的編寫可以熟悉引數型別,儲存過程內部使用自定義變數,迴圈結構的語法的使用mysql> create procedure jiecheng(in p
MySql儲存過程中傳參和不傳參以及java中呼叫程式碼
資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product
踩坑經歷(五)一次關於MySQL儲存過程的排錯
SQL語句 -- #開啟定時器,預設為關閉狀態 set global event_scheduler =1; #或者set GLOBAL event_scheduler = ON; use monitorsys; drop event if exists report_back
MySQL儲存過程中的3種迴圈,儲存過程的基本語法,ORACLE與MYSQL的儲存過程/函式的使用區別,退出儲存過程方法
學無止境 部落格園 首頁 新隨筆 聯絡 訂閱 管理 隨筆-1968 評論-103 文章-4&
MySQL 儲存過程中執行DDL
一、定期增加表分割槽 1、增加表分割槽例 CREATE DEFINER=`root`@`127.0.0.1` PROCEDURE `p_create_Partition`(IN databaseName VARCHAR(50),IN tableName VARCHAR(50))L_END:BEGIN&nb
mysql儲存過程解決線上的一個問題
最近線上有個問題是要給擁有A許可權的所有角色新增A許可權下的一個子許可權A1,因為需要查詢A許可權的所有角色,並批量 新增子許可權A1,所以簡單的sql不能處理此問題,有兩種方法:1. 寫指令碼解決 2. 用儲存過程解決。 指令碼相對簡單些
MySQL儲存過程中declare和set定義變數的區別
在儲存過程中常看到declare定義的變數和@set定義的變數。簡單的來說,declare定義的類似是區域性變數,@set定義的類似全域性變數。 1、declare定義的變數類似java類中的區域性變數,僅在類中生效。即只在儲存過程中的begin和end之間生效。 2
MySQL儲存過程從另外兩個表中取資料存整合其他資料儲存在一張新的表裡
業務需求: 通過傳入的引數x 從A表拿A.NAME(唯一一條記錄),從B表拿B.ID,B.NAME(多條記錄),儲存至C表。 DROP PROCEDURE IF EXISTS P_AUTO_SCHEDULING; CREATE PROCEDURE P_AUTO_SCHED
mysql儲存過程中使用select count(*) into 變數名 from +表+ where條件的用法
select count(*) into v_count from dual where userid=2;此語句的意思就是根據where條件查詢dual表,得到的行數存入變數v_count中(給變數賦值) 只能在儲存過程中編寫這樣的語句?如果在mysql的sql語句中編寫
mysql儲存過程中 declare 和 set 定義變數的區別
mysql儲存過程中,定義變數有兩種方式: 1.使用set或select直接賦值,變數名以 @ 開頭. 例如:set @var=1; 可以在一個會話的任何地方宣告,作用域是整個會話,稱為會話變數。 2.以 DECLARE 關鍵字宣告的變數,只能在儲存過程中使用,稱為儲存過
Mysql儲存過程中字串分割
今在專案中碰到了要把字串分割,記錄下來,以後可能還用的到 首先想上我的儲存過程程式碼 DELIMITER $$ USE `bplate`$$ DROP PROCEDURE IF EXISTS `lp_plate_insertplateinfo`$$ CREATE DE
mysql 儲存過程中limit
1、mysql的高版本(5.5),儲存過程中的limit可以使用變數,如下:select * from student limit iStart,iNum; 2、mysql的低版本(5.1),儲存過程中的limit不能使用變數,編譯報錯,如下:You have an error in your SQL sy
mysql 儲存過程中使用多遊標
mysql的儲存過程可以很方便使用遊標來實現一些功能,儲存過程的寫法大致如下: 先建立一張表,插入一些測試資料: DROP TABLE IF EXISTS netingcn_proc_test; CREATE TABLE `netingcn_proc_test`
mysql 中函式和儲存過程的區別和聯絡
怎麼查詢,怎樣寫sql在sql 語句中判斷不能用 == ,要用 = 就行了 ,賦值 用 := 函式 和 儲存過程的相同點 和不同點:函式的建立:函式只能在指定資料庫中用。 和儲存方法一樣delimiter $$create function 函式名稱(引數列表) ret