私が見る限り、いくつかの問題があります:
- Davidが指摘したように、すべてのステートメントは
;
で終了する必要があります。 -
SELECT
を実行する場合 、LIMIT 1
を実行して、1つの値のみを選択できることを確認してください。;min()
のような集計関数がある場合 そうすると、1つの値しか出てこなくなります。 -
CREATE PROCEDURE ...
を使用してプロシージャを作成する場合 構文、DELIMITER $$
を設定することを忘れないでくださいCREATE PROCEDURE ... END $$
の前 本文とDELIMITER ;
後。 -
IF THEN ... END IF
内に複数のステートメントがある場合 ブロック、BEGIN ... END;
内に配置することをお勧めします ブロックします。 - ここのエージェンシーのように戻り値がある場合は、それを
FUNCTION name (arg1: INTEGER) RETURNS INTEGER
にしてみませんか。PROCEDURE name (IN arg1 INTEGER, OUT agency INTEGER)
。この機能ははるかに用途が広いです。
DELIMITER $$
CREATE PROCEDURE name(arg1 INTEGER, arg2 INTEGER, ...)
BEGIN
SELECT SET agency =
COALESCE((SELECT org_agency_o_id
FROM orgs_agencies
WHERE org_agency_code = maj_agency_cat) LIMIT 1,
(SELECT min(org_id) FROM orgs
WHERE org_name LIKE CONCAT('U.S.',SUBSTRING(maj_agency_cat,5))));
IF agency IS NULL THEN BEGIN
-- execute multiple queries
INSERT INTO orgs (org_name
,org_name_length
,org_type
,org_sub_types)
VALUES (CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5))
,LENGTH(CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5)))
,'org','Org,GovernmentEntity,Federal,Agency');
SET agency = LAST_INSERT_ID();
END; END IF;
END $$
DELIMITER ;