gpt4 book ai didi

sql - 使用存储函数或存储过程返回 firebird 3.0 中的表

转载 作者:行者123 更新时间:2023-12-04 01:12:43 25 4
gpt4 key购买 nike

我正在尝试编写一个存储过程/函数,它返回一个包含一行或多行数据的表。

返回的数据取决于以下sql语句中显示的变量:

  SELECT * FROM table_name AS SD WHERE EXISTS
(SELECT DISTINCT S.PARENT_ID FROM table_name AS S
WHERE S.COMPONENT_ID = 10011 AND S.CARRIER_GROUP_ID = X AND SD.SD_ID = S.PARENT_ID)

到目前为止,我已经看到一些事情是这样完成的:

CREATE FUNCTION f_test_function (X INT)
RETURNS TABLE
AS
RETURN
(SELECT * FROM table_name AS SD WHERE EXISTS
(SELECT DISTINCT S.PARENT_ID FROM table_name AS S
WHERE S.COMPONENT_ID = 10011 AND S.CARRIER_GROUP_ID = X AND SD.SD_ID = S.PARENT_ID));

之后您使用 X 值调用函数/过程。我知道返回类型有问题,但我不知道是什么。

有人能帮忙吗?

最佳答案

您正在寻找的是 selectable stored procedure . Firebird 要求您显式声明存储过程返回的列,因此 returns table 之类的东西不是一个选项。例如:

create procedure sp_test_procedure (x integer) 
returns (column1 integer, column2 varchar(50))
as
begin
for select value1, value2
from table_name SD
where exists (
SELECT DISTINCT S.PARENT_ID
FROM table_name AS S
WHERE S.COMPONENT_ID = 10011
AND S.CARRIER_GROUP_ID = :X
AND SD.SD_ID = S.PARENT_ID)
into column1, column2
do
begin
suspend;
end
end

您需要显式映射列,因此简单的 select * 不是一个好主意。

注意 for select 的使用,它选择零个或多个行并遍历游标,以及 suspend ,它输出要从存储过程中提取的行(在本例中为游标的每一行)。

您可以从此过程中生成值,例如:

select column1, column2
from sp_test_procedure(10)

关于sql - 使用存储函数或存储过程返回 firebird 3.0 中的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64350980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com