0

私はいくつかのコードに取り組んでいますが、このストアド プロシージャの問題に行き詰まりました...それを見るのに時間がかかりすぎたので、誰かが私がどこに初心者であるかを教えてください。

次のエラーが表示されます。

エラー コード: 1064 SQL 構文にエラーがあります。'@ownerid varchar(50); の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。@active tinyint を宣言します。@subuser tinyint を宣言します。4 行目で ' を設定

このコードで:

    DELIMITER //

USE `test`//

DROP PROCEDURE IF EXISTS `getAccount`//

CREATE DEFINER=`peter`@`%` PROCEDURE `getAccount`( IN cid VARCHAR(20))
BEGIN
    DECLARE cardid VARCHAR(50);
    DECLARE @ownerid VARCHAR(50);
    DECLARE @active TINYINT;
    DECLARE @subuser TINYINT;
    SET cardid = MD5( cid + SHA1(cid + 'a salt value'));

    SELECT @active = active, @ownerid = ownerid, @subuser = subuser FROM cards_tbl WHERE cardhash = cardid;

    IF @active = 1 THEN
        IF @subuser = 1 THEN
            SELECT subuser_m2s_tbl.name,subuser_m2s_tbl.image, user_saldo.saldo AS credits FROM subuser_m2s_tbl 
            JOIN user_saldo ON subuser_m2s_tbl.subhash = user_saldo.userhash 
            WHERE subuser_m2s_tbl.subhash = @ownerid;
        ELSE
            SELECT user_m2s_tbl.name,user_m2s_tbl.image, user_saldo.saldo AS credits FROM user_m2s_tbl 
            JOIN user_saldo ON user_m2s_tbl.userhash = user_saldo.userhash 
            WHERE user_m2s_tbl.userhash = @ownerid; 
        END IF;
    END IF; 
    END$$

DELIMITER ;

ストアドプロシージャは初めてなので、非常に単純なものです.....よろしくお願いします

4

2 に答える 2

1

SELECTステートメントで変数に値を渡す場合は、「=」の代わりに「:=」を使用する必要があります。そうしないと、MySQLはオペランドと比較するだけです。

SELECT
  active_var := active, ownerid_var := ownerid, subuser_var := subuser
FROM
  cards_tbl
WHERE
  cardhash = cardid;

また、SELECTINTOステートメントを使用することもできます。

SELECT
  active, ownerid, subuser
INTO
  active_var, ownerid_var, subuser_var
FROM
  cards_tbl
WHERE
  cardhash = cardid;

SELECT構文

于 2012-08-06T06:29:23.203 に答える
0

@が抜けてるかも

DECLARE cardid VARCHAR(50);

...

DECLARE @cardid VARCHAR(50);
于 2012-08-05T12:38:06.547 に答える