1

このプロシージャを作成しようとしています

CREATE PROCEDURE RequestApproval (
  IN occupation enum('professor', 'student', 'pastor'),
  IN organization varchar(500),
  IN lastName varchar(100),
  IN firstName varchar(100),
  IN email varchar(300),
  IN phone varchar(50),
  IN description varchar(10000)
)
BEGIN
INSERT INTO `Discounts`(`Occupation`, 
  `Organization`, 
  `LastName`, 
  `FirstName`, 
  `Email`, 
  `Phone`, 
  `Description`) 
VALUES (occupation, 
  organization, 
  lastName, 
  firstName, 
  email, 
  phone, 
  description);
END ;

このエラーが発生します

1064-SQL構文にエラーがあります。24行目の''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

空の文字列()の近くに無効な構文があるとだけ表示された場合、何を変更すればよいかわかりません''。無効なトークンが何であるかはわかりません-何が間違っているのですか?

4

3 に答える 3

3

別の区切り文字を設定する必要があるようです。以下は、キーワードを使用してMySQLコマンドラインクライアントで機能しDELIMITERますが、他のクライアントには、区切り文字を指定する独自の方法があります。

/* set alternate delimiter $$ */
DELIMITER $$
CREATE PROCEDURE RequestApproval (
  IN occupation enum('professor', 'student', 'pastor'),
  IN organization varchar(500),
  IN lastName varchar(100),
  IN firstName varchar(100),
  IN email varchar(300),
  IN phone varchar(50),
  IN description varchar(10000)
)
BEGIN
/* Use regular delimiter ; in the statement */
INSERT INTO `Discounts`(`Occupation`, `Organization`, `LastName`, `FirstName`, `Email`, `Phone`, `Description`) VALUES (occupation, organization, lastName, firstName, email, phone, description);
/* end the procedure with the alternate delimiter */
END$$
/* reset to ; */
DELIMITER ;

11行目に特定の文字がない構文エラーが報告されます。これは、おそらく;その行がプロシージャを終了する最後の区切り文字として解釈されたためです(これは終了なしでは無効ENDです)。

于 2012-05-31T13:04:19.767 に答える
1

区切り文字を設定してみてください。手順の最後はDELIMITERであり、;私の例ではありません。挿入を変更してローカルホストに配置します。

mysql> delimiter \\

jcho360> CREATE PROCEDURE RequestApproval (
    ->   IN occupation enum('professor', 'student', 'pastor'),
    ->   IN organization varchar(500),
    ->   IN lastName varchar(100),
    ->   IN firstName varchar(100),
    ->   IN email varchar(300),
    ->   IN phone varchar(50),
    ->   IN description varchar(10000)
    -> )
    -> BEGIN
    -> INSERT INTO `t1` VALUES (0, lastName, firstName, 0);
    -> END //
Query OK, 0 rows affected (0.00 sec)

jcho360> delimiter ;
于 2012-05-31T13:05:21.467 に答える
0

他の人が言及しているように区切り文字ではなく、ここでMySQLを利用できないため、パラメーターと列名が混同されていると考えてヘッジします。X(someColumn)値(someColumn)に挿入しようとしています...それは「値」部分を列名またはパラメーターとして解釈していますか。

パラメータを次のように変更してみます

pOccupation, pOrganization, pLastName, etc...

その後、あなたの挿入物は

insert into YourTable ( Occupation, Organization, etc... )
   values ( pOccupation, pOrganization, etc... )

そうすれば、内部で何が起こっているのかという曖昧さはありません。

于 2012-05-31T13:08:46.423 に答える