【发布时间】:2019-06-28 19:36:17
【问题描述】:
我无法在 mariadb 版本中创建函数:10.1.37-MariaDB-0+deb9u1 Debian 9.6
mariadb/mysql 编程新手。我正在将电子表格数据移动到数据库中。
没有存储过程或函数,我使用的是完全权限帐户。我正在填写需要引用存储表中的存储记录的机器表。一个商店可以有几台机器,因此机器不是商店表中的一个字段。
我只是想获得正确的语法来制作一个函数,这样我就可以批量处理一系列数字。它最初是一大串 SELECT 和 IF 语句,脚本被 IF 语句阻塞。我在某人的帖子中读到,IF 语句只能在函数和过程中使用。这是真的吗?
我使用“SOURCE gen.mach.store.bat;”时遇到的错误在交互模式或'mysql -u fullpriv -pabc1234
ERROR 1064 (42000) at line 4 in file: 'gen.mach.store.bat': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BEGIN
DECLARE tid MEDIUMINT;
SET tid:=-1 ;
SELECT tid:=id FROM stores WHER' at line 2
Query OK, 0 rows affected, 1 warning (0.00 sec)
代码:
USE SWIMAT ;
DROP FUNCTION IF EXISTS sMachine;
DELIMITER $$
CREATE FUNCTION sMachine( sstore MEDIUMINT , smach MEDIUMINT )
BEGIN
DECLARE tid MEDIUMINT;
SET tid:=-1 ;
SELECT tid:=id FROM stores WHERE name="ChainX" AND number=sstore;
IF tid != -1 THEN
INSERT INTO machines(store,sn) VALUES (tid,smach);
END IF;
END
$$
DELIMITER ;
DROP FUNCTION IF EXISTS sMachine;
如果我将创建代码更改为
CREATE AGGREGATE FUNCTION sMachine( sstore MEDIUMINT , smach MEDIUMINT )
错误在'( sstore MEDIUMINT , smach MEDIUMINT ) 附近
函数名有问题吗?我已经多次更改名称并更改了整个地方的空白。我搞砸了分号。我在函数中添加了一个 RETURNS 语句,其中包含一个 RETURN。
我已经发布了我目前的工作,因为没有更好的词,版本。
【问题讨论】:
-
您似乎缺少函数签名的
RETURNS部分。 -
我有一个使用 RETURNS 的版本,但它仍然卡住了。一定是别的东西。