큰 텍스트 파일을 구문 분석하는 MySQL 저장 프로 시저를 작성하려고합니다. 이 절차가 수행하는 작업의 일부는 각 레코드에 지정된 엔터티 (이 경우 정부 계약자)가 이미 db에 포함되어 있는지 확인하는 것입니다. (이것은 후속 조치 this question입니다.) 이것은 내 첫 번째 저장 프로 시저이므로 여기 레일을 궁금해 하리라 확신합니다. 어떤 도움을 주시면 감사하겠습니다. 여기 MySQL 병합 및 저장 프로 시저에 대한 도움말
는 (변수를 선언 후) 내가 지금 무슨이다 : 지금 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
:
이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가'변수입니다 I 프로 시저의 시작 부분에서 선언 한 다음 내 스테이징 데이터를 통과하는 커서를 사용하여 동적으로 할당됩니다. 전체 저장 프로 시저는 here으로 볼 수 있습니다.
나는 기본적인 것을 놓치고 있으며 도움이 될 것이라고 확신합니다.
큰 감사! 이제 IF 문에 무엇이 잘못되었는지 알아 내야합니다. – tchaymore
@ tchaymore : IF org IS NULL을 사용해야합니다. 당신은'NULL'과 직접 비교할 수 없으며 결코 작동하지 않을 것입니다. – mellamokb
의미가 있지만 여전히 오류가 발생합니다. SQL 구문에 오류가 있습니다. 'IF agency is NULL THEN \t \t \t INSERT INTO orgs (org_name, org_name_length, org_type,'53 행) – tchaymore