0

我正在(尝试)编写一个解析大型文本文件的 MySQL 存储过程。此过程的部分工作是检查每个记录中命名的实体(在本例中为政府承包商)是否已包含在 db 中。(这是对这个问题的跟进。)这是我的第一个存储过程,所以我确信我在这里想知道偏离轨道,我将不胜感激任何帮助。

这是我现在所拥有的(在声明变量之后):

-- 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' 是我在过程开始时声明的变量,然后使用遍历我的暂存数据的游标动态分配。完整的存储过程可以在这里查看。

我确定我缺少一些基本的东西,希望能提供任何帮助。

4

1 回答 1

1

尝试在你的论点中()围绕内部SELECT语句包装另一个。COALESCE否则,它们不会被视为首先执行的子查询并返回值,而是作为传递给 的查询对象COALESCE,这不是 的有效参数类型COALESCE

 SET agency = COALESCE((SELECT ..), (SELECT ..))
于 2011-05-12T18:04:04.607 回答