gpt4 book ai didi

stored-procedures - Firebird 2.1 存储过程连接多行文本

转载 作者:行者123 更新时间:2023-12-01 09:38:01 26 4
gpt4 key购买 nike

我正在尝试编写一个存储过程来将多行文本连接在一起以将其作为单个字符串返回。例如:

CREATE TABLE TEST (
ID INTEGER,
SEQ INTEGER,
TEXT VARCHAR(255));

COMMIT;

INSERT INTO TEST (ID, SEQ, TEXT) VALUES (1, 1, "LINE 1");
INSERT INTO TEST (ID, SEQ, TEXT) VALUES (1, 2, "LINE 2");
INSERT INTO TEST (ID, SEQ, TEXT) VALUES (1, 3, "LINE 3");

COMMIT;

SET TERM !!;
CREATE PROCEDURE concat_names (iID INTEGER)
RETURNS (CONCAT VARCHAR(2000))
AS
DECLARE VARIABLE name VARCHAR(255);
BEGIN
CONCAT = '';
FOR SELECT TEXT FROM TEST where id=:iID INTO :name
DO BEGIN
CONCAT = CONCAT || name;
END
END!!
SET TERM ;!!

commit;

但是当我运行时:

select concat from concat_names(1);

它总是返回零行。

有什么想法吗?

最佳答案

您忘记了暂停。你的过程应该是这样的:

SET TERM !!;
CREATE PROCEDURE concat_names (iID INTEGER)
RETURNS (CONCAT VARCHAR(2000))
AS
DECLARE VARIABLE name VARCHAR(255);
BEGIN
CONCAT = '';
FOR SELECT TEXT FROM TEST where id=:iID INTO :name
DO BEGIN
CONCAT = CONCAT || name;
END
SUSPEND;
END!!
SET TERM ;!!

您可以在没有存储过程的情况下获得相同的结果。使用 LIST 聚合函数:

SELECT LIST(text, '') FROM TEST where id=:iID 

LIST 的第二个参数是分隔符。如果您只使用字段名称调用 LIST,则逗号“,”将用于分隔值。

关于stored-procedures - Firebird 2.1 存储过程连接多行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279167/

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