Hallo zusammen,
hat jemand ne Idee wie folgende oracle stmt im postgres aussieht
SELECT LPAD( RTRIM(XMLAGG (XMLELEMENT (e, s0 || '; ')).EXTRACT('//text()'), '; '), 4000)
Danke schon mal fuer Ihre Hilfe!
Hallo zusammen,
hat jemand ne Idee wie folgende oracle stmt im postgres aussieht
SELECT LPAD( RTRIM(XMLAGG (XMLELEMENT (e, s0 || '; ')).EXTRACT('//text()'), '; '), 4000)
Danke schon mal fuer Ihre Hilfe!
Kannst Du uns ein paar Beispieldaten und das Ergebnis Deiner Abfrage zeigen und die Struktur der Tabelle von der Du selektierst?
Hallo castorp,
bin gerade konvertieren einige packages von oracle nach postgres…
hier ist die funktion in oracle
FUNCTION getSimpleManagedResources (theid IN NUMBER)
RETURN VARCHAR2
IS
retval VARCHAR2(4000 CHAR);
BEGIN
SELECT LPAD(RTRIM(XMLAGG (XMLELEMENT (e, s0 || '; ')).EXTRACT('//text()'), '; '), 4000)
INTO retval
FROM wfmresource
WHERE klasse = 45010 AND id IN (SELECT o1 FROM extra WHERE klasse = 45500 AND parent_id = theid);
RETURN retval;
EXCEPTION
WHEN OTHERS
THEN RETURN NULL;
END getSimpleManagedResources;
was ora2pg daraus macht:
CREATE OR REPLACE FUNCTION AUFTRAG_UTIL.getsimplemanagedresources (theid bigint)
RETURNS varchar AS $body$
DECLARE
retval varchar(4000);
BEGIN
PERFORM LPAD(RTRIM(XMLAGG (XMLELEMENT(name e, s0 || '; ')).EXTRACT('//text()'), '; '), 4000)
INTO retval
FROM wfmresource
WHERE klasse = 45010 AND id IN (SELECT o1 FROM extra WHERE klasse = 45500 AND parent_id = theid);
RETURN retval;
EXCEPTION
WHEN OTHERS
THEN RETURN NULL;
END;
$body$
LANGUAGE PLPGSQL
SECURITY DEFINER
;
und hier ist wfmresource tabelle
--------------------------------------------------------
-- DDL for Table WFMRESOURCE
--------------------------------------------------------
CREATE TABLE "MYSCHEMA"."WFMRESOURCE"
( "ID" NUMBER,
"KLASSE" NUMBER,
"LABEL" VARCHAR2(255 CHAR),
"ROW_CREATION_TIME" NUMBER,
"ROW_CREATOR" VARCHAR2(50 CHAR),
"ROW_TIME" NUMBER,
"ROW_USER" VARCHAR2(50 CHAR),
"PARENT_ID" NUMBER,
"STAMM_ID" NUMBER,
"A0" NUMBER,
"A1" NUMBER,
"A2" NUMBER,
"A3" NUMBER,
"A4" NUMBER,
"A5" NUMBER,
"A6" NUMBER,
"A7" NUMBER,
"A8" NUMBER,
"A9" NUMBER,
"A10" NUMBER,
"A11" NUMBER,
"A12" NUMBER,
"A13" NUMBER,
"A14" NUMBER,
"A15" NUMBER,
"A16" NUMBER,
"A17" NUMBER,
"A18" NUMBER,
"A19" NUMBER,
"A20" NUMBER,
"D0" DATE,
"D1" DATE,
"D2" DATE,
"D3" DATE,
"D4" DATE,
"D5" DATE,
"D6" DATE,
"D7" DATE,
"D8" DATE,
"D9" DATE,
"D10" DATE,
"G0" FLOAT(126),
"G1" FLOAT(126),
"G2" FLOAT(126),
"G3" FLOAT(126),
"G4" FLOAT(126),
"G5" FLOAT(126),
"G6" FLOAT(126),
"G7" FLOAT(126),
"G8" FLOAT(126),
"G9" FLOAT(126),
"G10" FLOAT(126),
"N0" NUMBER,
"N1" NUMBER,
"N2" NUMBER,
"N3" NUMBER,
"N4" NUMBER,
"N5" NUMBER,
"N6" NUMBER,
"N7" NUMBER,
"N8" NUMBER,
"N9" NUMBER,
"N10" NUMBER,
"O1" NUMBER,
"O2" NUMBER,
"O3" NUMBER,
"O4" NUMBER,
"O5" NUMBER,
"O6" NUMBER,
"O7" NUMBER,
"O8" NUMBER,
"O9" NUMBER,
"O10" NUMBER,
"S0" VARCHAR2(255 CHAR),
"S1" VARCHAR2(255 CHAR),
"S2" VARCHAR2(255 CHAR),
"S3" VARCHAR2(255 CHAR),
"S4" VARCHAR2(255 CHAR),
"S5" VARCHAR2(255 CHAR),
"S6" VARCHAR2(255 CHAR),
"S7" VARCHAR2(255 CHAR),
"S8" VARCHAR2(255 CHAR),
"S9" VARCHAR2(255 CHAR),
"S10" VARCHAR2(255 CHAR),
"S11" VARCHAR2(255 CHAR),
"S12" VARCHAR2(255 CHAR),
"S13" VARCHAR2(255 CHAR),
"S14" VARCHAR2(255 CHAR),
"S15" VARCHAR2(255 CHAR),
"S16" VARCHAR2(255 CHAR),
"S17" VARCHAR2(255 CHAR),
"S18" VARCHAR2(255 CHAR),
"S19" VARCHAR2(255 CHAR),
"S20" VARCHAR2(255 CHAR),
"T0" VARCHAR2(4000 CHAR),
"T1" VARCHAR2(4000 CHAR),
"T2" VARCHAR2(4000 CHAR),
"T3" VARCHAR2(4000 CHAR),
"T4" VARCHAR2(4000 CHAR),
"T5" VARCHAR2(4000 CHAR)
) SEGMENT CREATION DEFERRED
Danke&Gruss
Du hast leider immer noch nicht beschrieben, was genau die Funktion zurück gibt - es sieht so aus als wäre das ein Workaround um eine Komma separierte Liste zu erzeugen. Das kann man in Postgres wesentlich einfacher lösen:
CREATE OR REPLACE FUNCTION AUFTRAG_UTIL.getsimplemanagedresources (theid bigint)
RETURNS varchar
AS
$body$
select string_agg(s0, ';')
FROM wfmresource
WHERE klasse = 45010
AND id IN (SELECT o1 FROM extra WHERE klasse = 45500 AND parent_id = theid);
$body$
LANGUAGE sql;
Hallo castorp,
Ich weiss leider selber auch nicht was der code liefern soll hat jmd vor einigen Jahren geschrieben, der nicht mehr in der Firma ist…
da hast du Recht mit der kommaseparierte Liste… Ich habe es soweit angepasst und gehts jetzt.
DANKE!