【发布时间】:2014-02-18 20:15:15
【问题描述】:
我尝试在 Delphi 中调用 MySQL 函数,但我无法获得 Unspecified error.。
示例函数 1 是:
CREATE FUNCTION `TEST`(`test` INT)
RETURNS INT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
RETURN 123+TEST ;
END
另一个 SQL 函数示例:
CREATE FUNCTION `GET_OPTION_AS_INT`(`id` INT)
RETURNS bigint(20)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT 'GET option value'
BEGIN
RETURN CAST((SELECT `option_value` FROM `OPTION` WHERE `option_id` = `id`) AS UNSIGNED);
END
我的 Delphi 代码是:
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('SELECT `TEST`(:test)');
qry1.Parameters.ParamByName('test').Value := 1 ;
qry1.Open;
第二个 Delphi 代码:
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('SELECT GET_OPTION_AS_INT(:id)');
qry1.Parameters.ParamByName('id').Value := 1 ;
qry1.Open;
这是一个简单的示例,否则我将使用与 GET_OPTION_VALUE 和 ... 相同的其他功能进行测试
我该如何解决?
【问题讨论】:
-
很难说。但是回到你的问题;为什么在查询中将函数名称括在引号中?我不喜欢 MySQL,但那些引号不是(主要是?)用于常量字符串值吗?那不应该只是
SELECT TEST(:test)吗?您是否尝试过在数据库管理应用程序中运行该语句? -
因为 mysql 知道内部值与 table_name colum_name 或 function_name 相同的引号,并且我在没有引号的情况下进行测试。与
SELECT GET_OPTION_AS_INT(:id)相同,是的,我使用Heidi SQL进行测试,效果很好,我复制了 sql从那。
标签: mysql sql function delphi delphi-xe3