2016-08-31 16 views
0

は、私はすべての朝立ち往生してきたと私は一種の魂が私を助けることができる、問題はここにあるかを把握するように見えることはできません。SQL複数の挿入手順

CREATE PROCEDURE value(
    IN group1 CHAR(20), 
    IN ns1 CHAR(20), 
    IN title1 CHAR(20)) 
BEGIN 
    insert into translationmarker 
     (site, `group`, ns, title, `type`) 
     values 
     (`cms`, group1, ns1, title1, `value`) 
    insert into translation 
     (marker, locale, `value`) 
     select id, 'en', 'test' 
     from translationmarker 
     where `group` = group1 and ns = ns1 and title = title1 
    insert into translationjavascript 
     select id 
     from translationmarker 
     where `group` = group1 and ns = ns1 and title = title1 
END 

エラー:

#1064 - 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 'insert into translation 
     (marker, locale, `value`) 
     selec' at line 10 

ありがとうございます!

+0

(少なくとも)セミコロンがありません。 –

答えて

1

私はあなたがシングルクオートを使用するバッククォートを使用していると思います。さらに、delimiterステートメントがあることを確認する必要があります。おそらく、これは動作します:

DELIMITER $$ 
CREATE PROCEDURE translationvalue(
    IN in_group1 CHAR(20), 
    IN in_ns1 CHAR(20), 
    IN in_title1 CHAR(20) 
) 
BEGIN 
    insert into vitanet__translationmarker(site, `group`, ns, title, `type`) 
     values ('cms', in_group1, in_ns1, in_title1, 'value'); 

    insert into vitanet__translation (marker, locale, `value`) 
     select id, 'en', 'test' 
     from vitanet__translationmarker 
     where `group` = in_group1 and ns = in_ns1 and title = in_title1; 

    insert into vitanet__translationjavascript(id) 
     select id 
     from vitanet__translationmarker 
     where `group` = in_group1 and ns = in_ns1 and title = in_title1; 
END$$ 
DELIMITER ; 

注:

  • を私はin_プレフィックスを持つようにパラメータ名を変更しました。これは、テーブル内の列と区別するのに役立ちます。
  • 最初のvalues()ステートメントでは、バッククォートを一重引用符で置き換えました。
  • 私はdelimiterステートメントとセミコロンを行末に追加しました。
  • カラム名をgroupにするのは、実際には悪い考えです。これは、SQLキーワードとMySQL予約語です。
  • id列を最後のinsertに明示的に追加しました。 1つの列があっても、列の名前を含めることが最良の方法だと思います(私はそれをidと呼んでいます)。
+0

ありがとう、あなたは命の恩人です!私は列の名前を 'グループ'は悪い考えであることを知っている。このプロジェクトの問題は、以前から他の人が始めていたので、その時代のことがいくつかあります。 – Rauno

0

INSERTブロックの後にクエリターミネータ;を追加できますか。

CREATE PROCEDURE translationvalue(
    IN group1 CHAR(20), 
    IN ns1 CHAR(20), 
    IN title1 CHAR(20)) 
BEGIN 
    insert into vitanet__translationmarker 
     (site, `group`, ns, title, `type`) 
     values 
     (`cms`, group1, ns1, title1, `value`); 

    insert into vitanet__translation 
     (marker, locale, `value`) 
     select id, 'en', 'test' 
     from vitanet__translationmarker 
     where `group` = group1 and ns = ns1 and title = title1; 

    insert into vitanet__translationjavascript 
     select id 
     from vitanet__translationmarker 
     where `group` = group1 and ns = ns1 and title = title1; 

END 
関連する問題