我无法在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 代码: 如果我将创建代码更改为 错误接近'(sstore MEDIUMINT,smach MEDIUMINT) 函数名称有问题吗?我已经多次更改了名称,并在各处更改了空白区域。我已经把分号弄乱了。我已经在函数的RETURN处添加了RETURNS语句。 由于缺少更好的词,我已经发布了我目前的工作。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 )
答案 0 :(得分:0)
您可能要使用PROCEDURE而不是FUNCTION,因为您没有返回值,也不想在查询中使用该函数。
代码的另一个问题是语法SELECT tid:=id
,请改用SELECT ... INTO
。
USE SWIMAT ;
DROP PROCEDURE IF EXISTS sMachine;
DELIMITER $$
CREATE PROCEDURE sMachine( sstore MEDIUMINT , smach MEDIUMINT )
BEGIN
DECLARE tid MEDIUMINT;
DECLARE v_found MEDIUMINT;
SELECT id, 1 into tid, v_found
FROM stores
WHERE name="ChainX" AND number=sstore;
IF (v_found = 1) THEN
INSERT INTO machines(store,sn) VALUES (tid,smach);
END IF;
END
$$
然后您可以将该过程用于:
CALL sMachine(1,2);