我正在将一些过程从 PostgreSQL 迁移到新的 DB2 环境。我已经完成了大部分工作,但我找不到为内部行集/记录声明变量的方法。
基本上,该程序在 Postgres 上的作用是:
DECLARE
counts RECORD;
BEGIN
-- fill "counts" with one row of aggregated data
SELECT
COUNT(....) AS failed_inserts,
COUNT(....) AS failed_updates,
COUNT(....) AS failed_deletes,
INTO counts
FROM (...)
-- check "counts" with some conditionals
IF counts.failed_inserts > 0
(...)
END IF;
(...)
-- return info depending on the data
RETURN (...);
END
我在 IBM 手册或在线其他地方找不到等同于声明“计数”的方法。我需要的行是静态的(3 列聚合数据)。因此,如果可能的话,声明该行硬编码就足够了。
是否可以在 DB2 上的存储过程中声明记录/数据集/“虚拟表”?
我们使用的是 DB2 for Linux (V10.5) 而不是 DB2 for iSeries。
@mustaccio的答案指向正确的解决方案:
在过程之外创建所需的行类型:
CREATE TYPE empRow AS ROW (failed_inserts INTEGER, failed_updates INTEGER, failed_deletes INTEGER);
然后您可以在过程中声明新类型
DECLARE newRow empRow;