2011-05-12 4 views
0

큰 텍스트 파일을 구문 분석하는 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으로 볼 수 있습니다.

나는 기본적인 것을 놓치고 있으며 도움이 될 것이라고 확신합니다.

답변

1

COALESCE 인수에 내부 SELECT 문을 중심으로 다른 ()을 감싸십시오. 그렇지 않으면 하위 쿼리로 취급되지 않습니다 먼저 실행하고 값이 반환하지만, 같은 쿼리 객체는 COALESCE에 대해 유효한 인수 유형하지 않은, COALESCE에 전달 :

SET agency = COALESCE((SELECT ..), (SELECT ..)) 
+0

큰 감사! 이제 IF 문에 무엇이 잘못되었는지 알아 내야합니다. – tchaymore

+1

@ tchaymore : IF org IS NULL을 사용해야합니다. 당신은'NULL'과 직접 비교할 수 없으며 결코 작동하지 않을 것입니다. – mellamokb

+0

의미가 있지만 여전히 오류가 발생합니다. SQL 구문에 오류가 있습니다. 'IF agency is NULL THEN \t \t \t INSERT INTO orgs (org_name, org_name_length, org_type,'53 행) – tchaymore

관련 문제