簡體   English   中英

可能無法創建存儲過程mysql否則語法

[英]Can't create stored procedure mysql maybe if else syntax

我嘗試編寫這樣的存儲過程,但是不起作用:

DROP PROCEDURE IF EXISTS `my_test`;
CREATE PROCEDURE `my_test`(
  IN my_in_var VARCHAR(255),
  OUT my_out_var VARCHAR(255)
)
BEGIN
  IF(in_var == 'my_in_value') THEN
    SET my_out_var = 'my_out_value1';
  ELSE
    SET my_out_var = 'my_out_value2';
  END IF;
END

我嘗試使用PDO從php執行

$conn = new PDO("mysql:host=".$mysql_host.";dbname=".$mysql_bd, $mysql_user, $mysql_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec($sql);

沒有錯誤,但我在MySql服務器上看不到

SHOW CREATE PROCEDURE my_test

所以我試圖將其復制粘貼到phpmyadmin的SQL窗口中,並且出現以下語法錯誤:

1064-您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊,以在'=='my_in_value'附近使用正確的語法)然后在第6行設置my_out_var ='my_out_value1'

正確的語法是什么? 為什么PDO不顯示錯誤?

歡迎任何幫助-謝謝

注意,已經向我指出,在PHPMyAdmin中不需要以下DELIMITER ,我不使用它。 因此, DELIMITER是客戶端的東西,例如MySQL Workbench之類的需求。

存儲過程:

DROP PROCEDURE IF EXISTS `my_test`;
DELIMITER $$
CREATE PROCEDURE `my_test`(
  IN my_in_var VARCHAR(255),
  OUT my_out_var VARCHAR(255)
)
BEGIN
  IF (my_in_var = 'my_in_value') THEN
    SET my_out_var = 'my_out_value1';
  ELSE
    SET my_out_var = 'my_out_value2';
  END IF;
END$$
DELIMITER ;

測試:

set @outme='';
call my_test('lizard',@outme);
select @outme;
-- my_out_value2

set @outme='';
call my_test('my_in_value',@outme);
select @outme;
-- my_out_value1

因此,您需要確定以上內容的目的。

您在使用double =遇到語法錯誤。 而且您可能在in_var中有一個錯字,而這並不存在。

PHPMyAdmin(不需要DELIMITER,所以被告知):

DROP PROCEDURE IF EXISTS `my_test`;
CREATE PROCEDURE `my_test`(
  IN my_in_var VARCHAR(255),
  OUT my_out_var VARCHAR(255)
)
BEGIN
  IF (my_in_var = 'my_in_value') THEN
    SET my_out_var = 'my_out_value1';
  ELSE
    SET my_out_var = 'my_out_value2';
  END IF;
END

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM