Magento:SQL升级脚本中的存储过程

时间:2011-08-08 14:14:42

标签: php stored-procedures magento

我一直在尝试将存储过程创建步骤放入Magento的SQL升级脚本中。 像

$this->startSetup();
$sql = <<< __SQLPRC
CREATE PROCEDURE my_proc(
    IN length int
    ,IN column_used_for varchar(50)
    ,OUT return_id bigint
)
BEGIN
    DECLARE count_unused INT;
    SET count_unused = 0;
    select 
            id into return_id
        from 
            my_table
        where 
            used_status=0
            limit 1;

    if length(return_id) = length 
    then
        update my_table
            set 
                used_status=1
            where 
                id = return_id;
    else
        set return_id = 0;
    end if;
END;
__SQLPRC;

try {
$this->run($sql);
}
catch(Exception $e)
{ echo "<pre>" . $e->getTraceAsString(); }

$this->endSetup();

我从调试中得出的结论是,Magento只是抓住SQL直到第一个分号“;” 有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

您已将存储过程代码设置为: -

$this->startSetup();
$sql = <<< __SQLPRC
...

这需要如下: -

$this->startSetup();
$sql = <<<__SQLPRC
...

现在应该可以使用,因为根据PHP字符串分隔符的 Heredoc Syntax ,“<<<”后面不应该有任何空格。

希望它有所帮助。


更新的答案: -

您可以尝试使用此代码: -

$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$write->exec($sql);

而不是: -

$this->run($sql);

我之前在Magento上看到过一些与此有关的问题。