0
我(試圖)編寫一個解析大型文本文件的MySQL存儲過程。這個過程的一部分是檢查每個記錄中命名的實體(在本例中是政府承包商)是否已經包含在數據庫中。 (這是一個跟進到this question。)這是我的第一個存儲過程,所以我確信我在這裏試過了,我會很感激任何幫助。幫助MySQL合併和存儲過程
這就是我現在所擁有的(聲明變量後):
-- try and fetch first organization (a government agency)
SET agency = COALESCE(SELECT org_agency_o_id FROM orgs_agencies WHERE org_agency_code = maj_agency_cat,SELECT min(org_id) FROM orgs WHERE org_name LIKE CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5)))
-- check to see if that worked
IF agency = NULL THEN
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 IF;
-- try and fetch second organization
SET org = COALESCE(SELECT MIN(org_id) FROM orgs WHERE org_name IN (vendorname, vendoralternatename, vendorlegalorganizationname, vendordoingasbusinessname), SELECT MIN(org_alias_org_id) FROM orgs_aliases WHERE org_alias in (endorname, vendoralternatename, vendorlegalorganizationname, vendordoingasbusinessname))
IF org = NULL THEN
INSERT INTO orgs(org_name,org_name_length,org_type,org_sub_types,org_created) VALUES (vendorname,LENGTH(vendorname),'org','org',DATE());
SET org = LAST_INSERT_ID();
END IF
現在MySQL是上線拋出一個錯誤:
SET agency = COALESCE(SELECT org_agency_o_id FROM orgs_agencies WHERE org_agency_code = maj_agency_cat,SELECT min(org_id) FROM orgs WHERE org_name LIKE CONCAT('U.S. ',SUBSTRING(maj_agency_cat,5)))
「maj_agency_cat」是一個變量,我在過程開始時聲明,然後使用經過我的臨時數據的遊標動態分配。完整的存儲過程可以查看here。
我敢肯定我錯過了一些基本的東西,並希望有任何幫助。
十分感謝!現在我需要弄清楚我的IF語句有什麼問題。 – tchaymore 2011-05-12 19:25:26
@tchaymore:你需要使用'IF org IS NULL'。你不能直接比較'NULL',它永遠不會工作。 – mellamokb 2011-05-12 19:27:05
這是有道理的,但仍然會拋出一個錯誤:您的SQL語法中有錯誤; INSERT INTO orgs(org_name,org_name_length,org_type,'at line 53 – tchaymore 2011-05-12 19:36:44