1. 程式人生 > >在Navicat 中寫MySQL儲存過程的一個坑

在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

使用Navicat 建立mysql儲存過程,實現日期加流水號序列

                                      &nb

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