2012-01-30 13 views
3

最初のmysqlストアドプロシージャを作成しようとしていますが、構文エラーが原因でスクリプトが機能しません。この質問は、mysqlデータベースに精通している人にとっては簡単に思えるかもしれません。MySQL。ストアドプロシージャの作成に失敗しました

表作成スクリプト:

CREATE TABLE `companies` (
`id` INT(10) NOT NULL AUTO_INCREMENT, 
`name` TINYTEXT NOT NULL, 
`full_name` TINYTEXT NULL, 
`region_id` INT(11) NULL DEFAULT NULL, 
`address` TINYTEXT NULL, 
`legal_address` TINYTEXT NULL, 
`main_phone` TINYTEXT NULL, 
`inn` TINYTEXT NULL, 
`bank` TINYTEXT NULL, 
`bic` TINYTEXT NULL, 
`bank_account` TINYTEXT NULL, 
PRIMARY KEY (`id`), 
UNIQUE INDEX `U_COMPANY_MAIN_PHONE` (`main_phone`(100)), 
INDEX `FK_COMPANY_REGION_ID` (`region_id`), 
CONSTRAINT `FK_COMPANY_REGION_ID` FOREIGN KEY (`region_id`) REFERENCES `regions` (`id`) 
) 

ストアドプロシージャのコードは次のとおりです。

create procedure add_company(
in p_name TINYTEXT, 
in p_full_name TINYTEXT, 
in p_region_id INT, 
in p_address TINYTEXT, 
in p_legal_address TINYTEXT, 
in p_main_phone TINYTEXT, 
in p_inn TINYTEXT, 
in p_bank TINYTEXT, 
in p_bic TINYTEXT, 
in p_bank_account TINYTEXT 
) 
begin 
insert into companies(
    name, 
    full_name, 
    region_id, 
    address, 
    legal_address, 
    main_phone, 
    inn, 
    bank, 
    bic, 
    bank_account 
) 
values (
    p_name, 
    p_full_name, 
    p_region_id, 
    p_address, 
    p_legal_address, 
    p_main_phone, 
    p_inn, 
    p_bank, 
    p_bic, 
    p_bank_account 
); 
end; 

間違いがどこにあるか誰もが知っていますか?

+0

間違いはストアドプロシージャを使用しています。一般的に、彼らは悪です。コードの残りの部分にコードを残しておけば、それができないことを100%保証していない限り残すことができます。 – cdeszaq

答えて

8

プロシージャの本体内で区切り記号としてセミコロン(;)を使用しているため、外側のCREATEコマンドで別の区切り文字を使用する必要があります。

DELIMITER $$ 
CREATE PROCEDURE add_company(
... 
)$$ 
DELIMITER ; 
+0

ありがとうジョー!今それは動作します:) – Artem

+3

正解を受け入れることを忘れないでください。 – Devart

関連する問題