【发布时间】:2013-12-19 12:20:30
【问题描述】:
我想在我的 Joomla 2.5 组件安装程序中包含一个 mysql 函数的创建。这是函数:
DELIMITER $$
DROP FUNCTION IF EXISTS getDistance $$
CREATE FUNCTION `getDistance` (
lat1 DECIMAL( 18, 12 ) ,
lng1 DECIMAL( 18, 12 ) ,
lat2 DECIMAL( 18, 12 ) ,
lng2 DECIMAL( 18, 12 )
)
RETURNS DECIMAL( 18, 12 ) DETERMINISTIC
BEGIN
DECLARE `distance` DECIMAL( 18, 12 ) ;
SELECT (
6371 *
acos( cos( radians( lat1 ) ) *
cos( radians( lat2 ) ) *
cos(
radians( lng2 ) - radians( lng1 ) ) +
sin( radians( lat1 ) ) *
sin( radians( lat2 ) ) ) )
INTO `distance`;
RETURN `distance`;
END $$
DELIMITER ;
如果我使用站点用户名和密码登录到 phpmyadmin,该函数就可以正常创建。
我试过了:
- 将其插入到创建表的 .sql 文件中,
- 从安装后脚本运行它(我的首选方法,因为我可以处理错误)
- 从管理工具栏中的按钮运行
- 使用不同的分隔符:££
- 将距离标识符替换为#__distance
没有工作。
sql文件是utf8,没有bom。
如果我使用 sql 安装程序,这是显示两次的错误:
JInstaller: :Install: Error SQL DB function failed with error number 1327
Undeclared variable: distance SQL=SELECT ( 6371 * acos( cos( radians( lat1 ) ) * cos( radians( lat2 ) ) * cos( radians( lng2 ) - radians( lng1 ) ) + sin( radians( lat1 ) ) * sin( radians( lat2 ) ) ) ) INTO `distance`;
SQL =
SELECT (
6371 *
acos( cos( radians( lat1 ) ) *
cos( radians( lat2 ) ) *
cos(
radians( lng2 ) - radians( lng1 ) ) +
sin( radians( lat1 ) ) *
sin( radians( lat2 ) ) ) )
INTO `distance`;
如果我从组件的控制器中运行 $db->getErrorMsg(),这是我得到的错误。
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 ££' at line 1 SQL=DELIMITER ££ DROP FUNCTION IF EXISTS getDistance ££ CREATE FUNCTION `xxyx_getDistance` ( lat1 DECIMAL( 18, 12 ) , lng1 DECIMAL( 18, 12 ) , lat2 DECIMAL( 18, 12 ) , lng2 DECIMAL( 18, 12 ) ) RETURNS DECIMAL( 18, 12 ) DETERMINISTIC BEGIN DECLARE `xxyx_distance` DECIMAL( 18, 12 ) ; SELECT ( 6371 * acos( cos( radians( lat1 ) ) * cos( radians( lat2 ) ) * cos( radians( lng2 ) - radians( lng1 ) ) + sin( radians( lat1 ) ) * sin( radians( lat2 ) ) ) ) INTO `xxyx_distance`; RETURN `xxyx_distance`; END ££ DELIMITER ;
【问题讨论】:
标签: mysql sql joomla joomla2.5