जहाँ तक मैं देख सकता हूँ आपको कुछ समस्याएँ मिली हैं:
- जैसा कि डेविड ने बताया, प्रत्येक कथन को
;
. द्वारा समाप्त करने की आवश्यकता है - यदि आप
SELECT
करते हैं , बेहतर ढंग से सुनिश्चित करें कि यहLIMIT 1
. करके केवल एक मान का चयन कर सकता है; यदि आपके पासmin()
. जैसा समग्र कार्य है तब केवल एक ही मान निकल सकता है। - यदि आप
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 ;