|
我查看了许多教程,手册和文档,但是仍然无法使用。* e& I! u" t6 L/ H. \" `7 P
我正在尝试使用phpMyAdmin创建存储过程。
+ l7 d: }: O$ `) H; N) m我似乎无法在这里找到错误,SQL错误是如此含糊…
Q% e8 C7 Z0 S& |6 sCREATE PROCEDURE insertToonOneShot(IN locale CHAR(2), IN name VARCHAR(16), IN realm VARCHAR(24), IN faction CHAR(1), IN toon_level INT, IN class_name INT)
; T2 B% o+ [3 n' R6 q! ~BEGIN0 v) l, {9 d# g8 P/ H' w; d4 R4 ~4 h0 r
DECLARE @realmID INT;% D d0 ?3 F( V
DECLARE @classID INT;% Z+ J0 i, S% P
DECLARE @toonID INT;
) x) R$ {" J, GSET @realmID = SELECT id FROM realms WHERE realms.name = realm;
: |2 x' W4 r0 ISET @classID = SELECT id FROM classes WHERE classes.name = class_name;) X. m! i* E/ |9 P( e+ F1 ]
IF NOT @realmID IS NULL AND NOT @classID IS NULL AND @toonID IS NULL THEN8 M! \: Q" }( z6 U7 a# p" |% r
INSERT INTO 8 Z' G3 D7 n, i
toon (`locale`, `name`, `realm_id`, `faction`, `level`, `class_id`)3 f- Q& t5 d- k2 ~# k
VALUES( M2 }4 |' u4 _0 @+ l' Z8 E2 ^
(locale, name, @realmID, faction, toon_level, @classID);
" S6 N8 m% z6 n# k+ QEND IF;0 y: o) b7 d$ u+ X8 A
END;
% C4 t/ @. h* r6 U" t我现在得到的错误是:
' X( X* M+ o2 y3 j$ ~' v8 K: i3 k+ U. `: S& @
#1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在@realmID INT附近使用正确的语法;宣告@classID7 J3 f) I2 I6 M" a2 G
INT; 声明@toonID INT; 在第3行设置@rea* I/ _1 _( i) p& u, v
9 t% N3 J8 j# F y- j# w可能是我不得不做的更令人沮丧的事情之一…7 A3 `) B T8 A) c/ E
我在网上看到了许多教程,这些教程在变量声明中显示了使用@符号,而另一些则没有使用它,我什至还看到了一些使用VAR而不是DECLARE的教程。正确的语法是什么?…3 z& A! R" g5 u0 g
4 ]9 G; a2 {# [* \+ x0 x
解决方案:
- J+ j/ H5 x9 A, b. g5 f# u8 \ + q( V( b4 E# R. q, `3 o
1 d" W& U6 Q1 @+ l; D
( t1 V- b# |* U2 }/ f 这可以解决问题:1 |4 Z& M: O2 }4 f P
CREATE PROCEDURE insertToonOneShot(IN locale CHAR(2), IN name VARCHAR(16), IN realm VARCHAR(24), IN faction CHAR(1), IN toon_level INT, IN class_name VARCHAR(12))
: r5 C, m' }" r0 CBEGIN6 `. `8 U& @: Z; H
SELECT @realmID := id FROM realms WHERE realms.name = realm;
2 H9 l: B1 N, G( I/ [: x+ TSELECT @classID := id FROM classes WHERE classes.name = class_name;
$ u) B. G+ n) u3 ?4 {. e& XSELECT @toonID := id FROM toon WHERE toon.name = name AND toon.realm_id = @realmID;
- G8 _" m* v: g; Z% N9 U% a: UIF NOT @realmID IS NULL AND NOT @classID IS NULL AND @toonID IS NULL+ l2 {4 r8 J- k, @7 q
THEN + g' @; I) H7 [% H _1 L4 K
INSERT INTO toon (`locale`, `name`, `class_id`, `realm_id`, `faction`, `level`)) e0 A: ^" A1 ?; y5 a7 B/ ^
VALUES (locale, name, @classID, @realmID, faction, toon_level);
8 Y3 ~+ b& c% {$ b& o1 J; `END IF;, V, t( Z0 x" v
END;4 |) {; ~# G; W5 P9 [1 v' \0 _
//
% g" L" [7 [. e" s H5 v显然,不需要声明语句……谁知道呢?
, a6 p- ?% H& d, @1 E感谢Gordon Linoff向我指出了正确的方向。 |
|