為什麼MySQL的儲存過程的書寫這麼麻煩?DELIMITER這種字元有什麼作用

2022-10-30 04:15:25 字數 2454 閱讀 8268

1樓:我tm不管

其實就是告訴mysql直譯器,該段命令是否已經結束了,mysql是否可以執行了。

預設情況下,delimiter是分號;。在命令列客戶端中,如果有一行命令以分號結束,

那麼回車後,mysql將會執行該命令。如輸入下面的語句

mysql> select * from test_table;

然後回車,那麼mysql將立即執行該語句。

但有時候,不希望mysql這麼做。在為可能輸入較多的語句,且語句中包含有分號。

如試圖在命令列客戶端中輸入如下語句

mysql> create function `shorten`(s varchar(255), n int)

mysql> returns varchar(255)

mysql> begin

mysql> if isnull(s) then

mysql> return '';

mysql> elseif n<15 then

mysql> return left(s, n);

mysql> else

mysql> if char_length(s) <=n then

mysql> return s;

mysql> else

mysql> return concat(left(s, n-10), '...', right(s, 5));

mysql> end if;

mysql> end if;

mysql> end;

預設情況下,不可能等到使用者把這些語句全部輸入完之後,再執行整段語句。

因為mysql一遇到分號,它就要自動執行。

即,在語句return '';時,mysql直譯器就要執行了。

這種情況下,就需要事先把delimiter換成其它符號,如//或$$。

mysql> delimiter //

mysql> create function `shorten`(s varchar(255), n int)

mysql> returns varchar(255)

mysql> begin

mysql> if isnull(s) then

mysql> return '';

mysql> elseif n<15 then

mysql> return left(s, n);

mysql> else

mysql> if char_length(s) <=n then

mysql> return s;

mysql> else

mysql> return concat(left(s, n-10), '...', right(s, 5));

mysql> end if;

mysql> end if;

mysql> end;//

這樣只有當//出現之後,mysql直譯器才會執行這段語句

2樓:匿名使用者

倒!!!

delimiter是來改變輸入結束符的

mysql預設的是;

但是sql語句的結束符也是;

所以要改了

mysql 建立儲存過程要寫delimiter,後面的$是什麼意思

3樓:匿名使用者

delimiter就是告訴mysql直譯器,該段命令是否已經結束了,是否可以執行了。

預設情況下,delimiter是分號;,遇到分號就執行。

後面的雙美元符號 就是告訴mysql,遇到雙美元符號再執行

4樓:粉紅頑皮蛇

如果寫了delimiter$ 那就是執行語句時遇到$就停止了預設是分號 ;

假設你沒寫delimiter$ 的話 但是寫了多條sql語句 語句後面用 ; 結尾

那麼執行到 ;的時候就停止了

樓上說的很對

5樓:火籬笆

delimiter是mysql定義結束標記的,在mysql客戶端中結束標記預設是分號(;)。

如果一次輸入的語句較多,並且語句中間有分號,這時需要新指定一個特殊的結束符。

delimiter $ 表示mysql用$表示mysql語句結束,過程結束後肯定會有一句

delimiter ;

恢復成預設的。

mysql 建立儲存過程要寫delimiter,後面的$是什麼意思

6樓:

mysql系統預設 ;號為結束符號,mysql遇到;號即會執行,但在建立儲存過程中,會有很多語句的結束,為了避免mysql在儲存過程未完時就執行程式,需要另外設定一個結束符號;

delimiter $即表示命名$號為結束符,而恢復;號為結束符號為delimiter ;

sql server的儲存過程的declare函式的使用?誰

前面的是引數,是呼叫這個儲存過程的時候從外部輸入進來的。declare 是宣告變數。變數是在批處理或過程的主體中用 declare 語句宣告的,並用 set 或 select 語句賦值。遊標變數可使用此語句宣告,並可用於其他與遊標相關的語句。所有變數在宣告後均初始化為 null。transact s...

sqlserver中的儲存過程的日期引數怎麼賦當前日期

執行下面的儲存過程即可 select name create date modify date from sys objects where type p order by modify date desc 如果想找到更多的被修改過的儲存過程 使用者表 自定義函式,觸發器,可以執行下面的sql語句 ...

MySQL不能用,為什麼輸入命令沒用的

是database,而不是datebase,有一個字母打錯了 mysql命令列輸入命令回車後沒反應怎麼回事?具體如圖 10 要在命令後面加行 g 如果你確定輸入的命令列沒有錯誤,那可能是你登陸mysql所用的使用者許可權下就沒有新建過資料庫。不過不顯示任何資訊是不正常的.建議你還是好好檢查下命令列 ...