我使用这个SQL来计算每个类型的数组。
select
mytype, count(mytype)
from types1
group by 1
结果是5条记录,每种类型都有计数。我需要将其转换为存储过程;我应该使用For...Select
编写上述SQL,还是应该使用Select...Where...Into
为每种类型返回单个值5次?
我将使用返回计数来更新主表,并且将来可能会增加类型。
答案 0 :(得分:2)
这取决于你想要的程序:
如果您想要与五行选择相同的输出,请使用FOR SELECT
。每种类型和相关计数将获得一行。这可能是“标准”方法。
但是,如果您想要五个输出变量,每个类型的每个计数一个,您可以使用SELECT COUNT(1) FROM types1 WHERE mytype = 'type1' INTO :type1
形式的五个查询。虽然这将是五个查询,但您可能最好还是执行单个FOR SELECT
查询并循环执行过程中返回的行。另请注意,如果您在某些时候添加第六种类型,则必须更改此过程以添加其他类型。
如果要查询单个类型,还可以执行以下操作,这将返回单个行,其中输入参数中的类型具有单个计数:
CREATE PROCEDURE GetTypeCount(
TypeName VARCHAR(256)
)
RETURNS (
TypeCount INTEGER
)
AS
BEGIN
SELECT COUNT(1)
FROM types1
WHERE mytype = :TypeName
INTO :TypeCount;
SUSPEND
END