MySQL“DELIMITER”关键字无效

时间:2012-07-02 20:19:27

标签: mysql stored-procedures delimiter procedures dbvisualizer

好的,我一直在扯掉我的头发,为什么这不起作用?

DELIMITER |

CREATE PROCEDURE Decrypt_pw()
    READS SQL DATA
BEGIN
  SELECT 'Hey Select';
END|

这是如此基本,我很确定我使用了正确的语法,我错过了什么?

错误:

21:14:07  [DELIMITER - 0 row(s), 0.000 secs]  [Error Code: 1064, SQL State: 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 'DELIMITER |

CREATE PROCEDURE Decrypt_pw()
    READS SQL DATA
BEGIN
  SELECT 'He' at line 1
 21:14:07  [END| - 0 row(s), 0.000 secs]  [Error Code: 1064, SQL State: 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 'END|' at line 1

我正在使用DbVisualizer,最新版本,这个问题可能与软件本身有关吗?

也许我应该更好地解释自己,密码在我的数据库中加密(无需担心),这允许我解密它们,这是我正在进行的个人项目。

我正在尝试开发一个脚本,允许我运行它并设置必要的数据库,表格等,以便工作,我需要一些必须创建的SP,我正在尝试创建一个SP通过mysqli_query,甚至可能吗?

基本上它是用于php应用程序的“安装脚本”。

更新:似乎this应该可以工作,但由于HostGator中的人员不能使用对象,所以不允许使用PHP中的对象。

我几乎已经放弃了mysqli,因为它只是不起作用我正在尝试使用shell_exec,我正在创建程序但是当我检查ddl它是空的时候,它正在创建空程序但至少它正在做某事...

3 个答案:

答案 0 :(得分:1)

这可能是一个软件版本的问题...我尝试了你的代码,它对我来说效果很好...... 试试这个

DELIMITER //
    CREATE PROCEDURE Decrypt_pw()
            READS SQL DATA
      BEGIN
      SELECT 'Hey Select';
      END //
    DELIMITER ;

答案 1 :(得分:0)

至少从9.1开始,DBVisualizer不支持DELIMITER关键字。这就是他们这样做的方式:link

答案 2 :(得分:0)

绝对不是一种优雅的解决方法...但是可以。
yada yada yada是关于不炮轰的所有常见警告。

// here's the core stored procedure code
$stored = <<<EOT
CREATE PROCEDURE Decrypt_pw()
    READS SQL DATA
BEGIN
  SELECT * FROM whatever;
END #
EOT;

// first, shell out to change the delimiter using mysql command-line
shell_exec('mysql -u user -ppassword -e "DELIMITER #");

// assuming $pdo is a valid PDO connection 
// send the command to create the stored procedure:
$pdo->exec($stored);

// now shell out again to change the delimiter back
shell_exec('mysql -u user -ppassword -e "DELIMITER ;");