mysql - 有关 MySQL 合并和存储过程的帮助

标签 mysql stored-procedures coalesce

我正在(尝试)编写一个解析大型文本文件的 MySQL 存储过程。此过程的部分作用是检查每条记录中指定的实体(在本例中为政府承包商)是否已包含在数据库中。 (这是 this question 的后续操作。)这是我的第一个存储过程,所以我确信我想知道这里是否偏离了轨道,如果有任何帮助,我将不胜感激。

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

-- 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 .

我确信我缺少一些基本的东西,并且希望得到任何帮助。

最佳答案

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

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

关于mysql - 有关 MySQL 合并和存储过程的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5982304/

相关文章:

c++ - 如何在C++中使用MySQL的STR_TO_DATE?

sql-server - 为什么存储过程的运行速度比裸 T-SQL 慢?

sql - 如何在 SQL Server 存储过程/函数中声明输入输出参数?

tsql - ISNULL(Count(x),0) null 时不返回 0

mysql - 当没有该值时SQL选择默认值

mysql - 在单个查询中更新和选择。 Scala 中的 Sql 语法错误

php - MySQL 中的 varchar 最大大小是多少?

mysql - 尝试将表转换为 InnoDB 时出错

python - 使用 Connector/Python 调用带有反引号名称的 MySQL 存储过程

postgresql - 如何合并时间戳与非空约束postgres