将select转换为存储过程的最佳方法

时间:2013-03-11 04:07:13

标签: sql firebird

我使用这个SQL来计算每个类型的数组。

select 
    mytype, count(mytype)
from types1
group by 1

结果是5条记录,每种类型都有计数。我需要将其转换为存储过程;我应该使用For...Select编写上述SQL,还是应该使用Select...Where...Into为每种类型返回单个值5次?

我将使用返回计数来更新主表,并且将来可能会增加类型。

1 个答案:

答案 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
    
相关问题