Ich versuche eine gespeicherte Prozedur zu schreiben, um mehrere Zeilen Text miteinander zu verketten, um sie als eine einzige Zeichenfolge zurückzugeben. Zum Beispiel:Firebird 2.1 gespeicherte Prozedur zum Verketten von Text in mehreren Zeilen
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;
Allerdings, wenn ich laufen:
select concat from concat_names(1);
Es gibt immer null Zeilen.
Irgendwelche Ideen?
Hallo Andrei, die Bit-Werke SUSPEND aber die Liste nicht, weil Sie die Reihenfolge nicht garantieren können, die Zeilen werden von der Select-Anweisung zurückgegeben werden. Wenn Sie nach der SEQ-Spalte bestellen, müssen Sie danach gruppieren, was dann nicht die korrekten Ergebnisse liefert. Ich hatte bereits versucht, dass es effizienter wäre. Übrigens, sind Sie Andrei K von GBS? – williamsdb
Was ist GBS? :) –
Opps, sorry, falscher Briefauftrag GSB. Golden Software, Belarus – williamsdb