IF中的SQL变量存在

时间:2016-05-28 19:14:33

标签: mysql

我无法找出将查询输出分配给我稍后可以在INSERT子句中使用的变量的正确方法。

我得到的错误是

  

错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在' SET @lennuid =附近使用正确的语法(从lend中选择lend_id,其中sihtpunkt = in_kuhu和kuupaev = in _' at the line 8

我已经尝试查看SQL中每个变量指南,但没有一个可以帮我解决这个问题。

我使用以下代码:

CREATE PROCEDURE proov(
in_kuhu varchar(50), in_nimi1 varchar(50), in_nimi2 varchar(50), in_adre varchar(50), in_telo varchar(20), in_email varchar(100), in_date date)
BEGIN
DECLARE viga INTEGER DEFAULT 0 ;
DECLARE lennuid INT;
START TRANSACTION;
IF exists (
SET @lennuid = (select lend_id from lend where sihtpunkt=in_kuhu AND kuupaev=in_date)) THEN
INSERT INTO broneering
(lend_id, bron_aeg, eesnim, perenimi, aadress, telefon, email)
VALUES
(lennuid, NOW(), in_nimi1, in_nimi2, in_adre, in_telo, in_email);
ELSE
set viga=1;
SELECT 'Muudatus ebaonnestus ',viga;
END IF;
IF viga=0 then
COMMIT;
select 'korras';
ELSE
select 'tagasi';
ROLLBACK;
END IF;

2 个答案:

答案 0 :(得分:1)

THEN导致问题。

IF exists (
SET @lennuid = (select lend_id from lend where sihtpunkt=in_kuhu AND kuupaev=in_date)) 
BEGIN  -- Instead of THEN use BEGIN , END
    INSERT INTO broneering
    (lend_id, bron_aeg, eesnim, perenimi, aadress, telefon, email)
    VALUES 
    (lennuid, NOW(), in_nimi1, in_nimi2, in_adre, in_telo, in_email);
END
ELSE
BEGIN
    set viga=1;
    SELECT 'Muudatus ebaonnestus ',viga;
END
END IF;

答案 1 :(得分:0)

您可能想要使用$image = \ORM::for_table('shop_product_images')->create(); $image->productId = $productId; $image->path = '/img/shop/products/'.$name; $image->save();

SELECT INTO

可替换地:

select lend_id into @lennuid
from lend 
where sihtpunkt=in_kuhu AND kuupaev=in_date;

无论哪种方式都一样,那么你可以随意使用那个变量......

但是,在您的特定示例中,问题实际上是您的select @lennuid := lend_id from lend where sihtpunkt=in_kuhu AND kuupaev=in_date; exists一起使用的方式。要解决此问题,请使用以下命令:

set

这里的问题是,您是在IF exists (select lend_id from lend where sihtpunkt=in_kuhu AND kuupaev=in_date) THEN ... 支票内设置了SET的变量。

或者您可以先将EXISTS选为数字变量:

COUNT