作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个存储过程来将多行文本连接在一起以将其作为单个字符串返回。例如:
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/
我是一名优秀的程序员,十分优秀!