我在 Magento 中有一个工作模块,它模仿了我们在安装之外使用的一些自定义代码。该模块目前向数据库添加 5 个表来存储信息,并且我已将 Admin 扩展为 CRUD 信息。这里的最终目标是将大部分自定义编程转移到 Magento 中。
目前,我们的自定义代码位于 Magento 外部并访问一个单独的数据库。该数据库具有相同的 5 个表、一个存储过程和 4 个函数。我现在想做的是将存储过程和函数移动到 Magento 的数据库中,并更改自定义代码以从 Magento 的数据库中调用所有数据。但是,我似乎无法弄清楚应该如何为 Magento 设置“CREATE FUNCTION”调用才能正确执行它。
我使用的 SQL 是:
DROP FUNCTION IF EXISTS {$this->getTable('fn_Get_HardinessZone')};
CREATE FUNCTION {$this->getTable('fn_Get_HardinessZone')}(IN ZipCode varchar()) RETURNS integer AS
DECLARE Result integer;
BEGIN
SELECT MAX(Zone) into Result
FROM AMI_zones
WHERE (Hfzip <= LEFT(ZipCode, 5)) AND (Htzip >= LEFT(ZipCode, 5));
if Result is null or Result < 1 or (Result > 11 and Result <> 99) Then
/*if the left most character is alpha, then set the zone to 98 for Canada*/
if Left(zipCode, 1) >= 'A' and LEFT(zipcode,1) <= 'Z' THEN
set result = 98;
else
set Result = 99;
End if;
END if;
RETURN Result;
END;
但这总是会产生以下错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 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 'IN ZipCode varchar()) RETURNS'
那么,格式化 SQL 调用以在模块的安装/更新脚本中运行以将函数或存储过程插入 Maganeto 数据库的正确方法是什么?