我一直在尝试将存储过程创建步骤放入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直到第一个分号“;
”
有人可以帮我吗?
答案 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上看到过一些与此有关的问题。