ORACLE - Stringvariable in ein Select einbaun

Hallo!

Ich möchte eine Procedure machen die mir zu einem Graphen den MST ausgibt und da brauch ich folgendes Select (es soll mir start und endknoten von der Kante mit eines bestimmen graphen mit einem bestimmten start/endknoten und dem geringsten gewicht zurückgeben)

in dem string „nodelist“ stehen knoten drin mit beistrich getrennt zB 2,3,4,5
vGNr ist die aktuelle Graphennummer zB 1
u(j) ist der start/endknoten zB 1

Select Edge.NNr_start, Edge.NNr_end into nstart, nend from Edge where Edge.GNr = vGNr and Edge.Weight = (Select min(Edge.Weight) from Edge Where Edge.GNr = vGNr and ((Edge.NNr_start IN (nodelist) and Edge.NNr_end = u(j)) or (Edge.NNr_end IN (nodelist) and Edge.NNr_start = u(j))));

mein problem ist jetzt das er die nodelist nicht als „2,3,4,5“ nimmt sondern wirklich als das wort „nodelist“. wie mach ich das das es funktioniert?? ich kanns nämlich nicht fix eintragen weil sich der inhalt der variable nodelist ständig verändert.

danke schonmal für eure hilfe
mfg
wotan

Hallo!

mein problem ist jetzt das er die nodelist nicht als „2,3,4,5“
nimmt sondern wirklich als das wort „nodelist“. wie mach ich
das das es funktioniert?? ich kanns nämlich nicht fix
eintragen weil sich der inhalt der variable nodelist ständig
verändert.

danke schonmal für eure hilfe
mfg
wotan

Hallo Wotan,

ich vermute das die Befüllung deiner Variable nodelist nicht korrekt ist, wenn du als Wert „nodelist“ drin stehen hast anstelle deiner Zahlen.

arbeitest du mit PL/SQL?
wie befüllst du Nodelist?

Gruß Benjamin

Hallo Wotan,

ich vermute das die Befüllung deiner Variable nodelist nicht
korrekt ist, wenn du als Wert „nodelist“ drin stehen hast
anstelle deiner Zahlen.

arbeitest du mit PL/SQL?
wie befüllst du Nodelist?

Gruß Benjamin

Hallo Benjamin,

die Variable nodelist befülle ich so:

hier mal die variablen:

TYPE intdata IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;
vu intdata;
ex integer;
nodelist varchar2(100);

und die befüllung:

nodelist := ‚‘;

for ex in vu.first … vu.last loop
if vu(ex) != 0 then
nodelist := nodelist || vu(ex) || ‚,‘;
end if;
end loop;

nodelist := substr(nodelist,1,length(nodelist)-1);

DBMS_OUTPUT.PUT_LINE(nodelist);

Das DBMS_OUTPUT gibt folgendes aus „2,3,4,5“ - was auch auch so gewollt ist.
gibts in pl/sql eine möglichkeit wie ich irgendwie anders die werte aus dem array in das IN vom select krieg? oder vl eine art commandobject wo ich mir ein sql statement in einen string zusammenstöpseln kann und den dann ausführ?

bin schon total verzweifelt und ich brauch das bis mittwoch :frowning:

danke für die schnelle antwort
mfg wotan

Hallo Wotan,

ja Du arbeitest mit PL/SQL: Dann solltest Du Dich mal mit dynamischen SQL-Statements auseinander setzen: Aber Achtung, die Standard-Beispiele lassen nur SQL-Statementes bis 255 Zeichen zu.

Ein Beispiel mit mehr als 255 Zeichen findest Du auf meiner HP http://www.familieverweyen.de/txt_0012.htm, hier wird ein SQL-Statement bis 32K-Zeichen zusammengebaut.

MfG Georg V.

Hallo Georg V.

erstmal danke für die antwort.

Nur hab ich auf deiner HP nichts gefunden was mich bei meinem speziellen Problem jetzt weiterbringt. Da du dich offensichtlich ja eh auskennst, kannst du mir meine frage beantworten?

und ist es überhaupt möglich den inhalt auszulesen und nicht das wort an sich?

mfg

Hallo Wotan,

dort angebotenes Zip-Archiv aufmachen und den Code von oqs_cre_procedure.sql studieren, ich kopiere nicht die Zeilen 148 bis 171 hier rein.

MfG Georg V.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

ja habs grad gesehen das da was zum runterladen gibt :wink: werd ich mir anschaun - danke

hab da nichts gefunden was mich in meinem problem weiterbringen würde! aber trotzdem danke!!

ich habs jetzt komplett umstrukturiert und bin das problem so umgangen!

danke an alle die geholfen haben!