2017-01-11 9 views
0

の実行に失敗しました私は、MySQLでストアドプロシージャを作成しよう:は、SQLスクリプトステートメント(MySQLでのストアドプロシージャ)

create PROCEDURE sp_attachAuthorToBook(
IN _bookId  INT, 
IN _authorName VARCHAR(20) 
) 
BEGIN 

declare _authorId int 
select _authorId = id from Authors where name = _authorName 

IF (_authorId is null) THEN 

    INSERT INTO Authors (name) 
    VALUES (_authorName) 
    SELECT _authorId = SCOPE_IDENTITY() 

END IF 

insert into Books_Authors (bookID, authorID) 
values (_bookId, _authorId) 

END; 

しかし、私はエラーを取得:スクリプトがあまりにもあるよう

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select _authorId = id from Authors where name = _authorName IF (_authorId is nul' at line 1

らしいです実行される大きな。付近の線がちょうど壊れています。
IF (_authorId is null) THEN - IF (_authorId is nul

+0

、このようにしてみてください。私はあなたがそのデータベースを使用している場合は、MySQLで少し調べることをお勧めします。 –

+0

@ Gordon Linoff、私はSQLサーバーコードを使用しているように見えますか? – Ddd

+0

。 。 'scope_identity()'はSQL Server(T-SQL)固有のものです。 –

答えて

0

デリミタに問題があります。デフォルトでは ";"です。

DELIMITER | 
create PROCEDURE sp_attachAuthorToBook(
IN _bookId  INT, 
IN _authorName VARCHAR(20) 
) 
BEGIN 

declare _authorId int; 
select _authorId = id from Authors where name = _authorName; 

IF (_authorId is null) THEN 

    INSERT INTO Authors (name) 
    VALUES (_authorName); 
    SELECT _authorId = LAST_INSERT_ID(); 

END IF; 

insert into Books_Authors (bookID, authorID) 
values (_bookId, _authorId); 

END| 
0

SQLyogの上のその作業コード:しかし、あなたはそう内部の区切りを、必要とするあなたは、SQL Serverのコードのように見えるの書き込みコードを持って

DELIMITER $$ 

CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PROCEDURE `test`.`sp_attachAuthorToBook`(
    IN _bookId  INT, 
    IN _authorName VARCHAR(20) 
    ) 
    BEGIN 
    DECLARE _authorId INT; 

    SELECT id INTO _authorId FROM Authorss WHERE `name` = _authorName; 

    IF _authorId IS NULL THEN 
     INSERT INTO Authorss(`name`) SELECT _authorName; 
     SET _authorId = LAST_INSERT_ID(); 
    END IF; 

    INSERT INTO Book_Authors(bookID, authorID) SELECT _bookId, _authorId; 


    END$$ 

DELIMITER ; 
関連する問題