Ganymed Geschrieben 14. Juni 2004 Teilen Geschrieben 14. Juni 2004 Hallo zusammen (ja ich werd hier noch zum Power-User hier ), kurze Frage: wie kann ich ein Array bilden? Ich habe nun meine Binärzahlen nach dem Prinzip: select BIN_TO_NUM(0,1,1,0,0,1) INTO ausgabe1 from dual; umgerechnet. Jetzt habe ich ganz viele Zahlen (jeweils in einer "ausgabe1", "ausgabe2",....) gespeichert. Nun müsste ich wissen, welche dieser Zahlen die kleinste ist. Dafür bräuchte ich ein Array (um den Bubble-Sort anwenden zu können). Mein Buch hier sagt, sowas gibt es nicht, man bräuchte da Krückenlösungen... Aber mein Syntax-Highlighting findet einen Begriff Array... Kann mir da wer helfen? Das Array müsste dann so aussehen: ------------------ | 23 | 12 | 88 | 3| ------------------ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 15. Juni 2004 Teilen Geschrieben 15. Juni 2004 Lässt sich relativ einfach über eine sogenannte PL/SQL Tabelle (TABLE) lösen. DECLARE TYPE tab_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; tabelle tab_type; BEGIN tabelle(1) := <erster Wert>; tabelle(2) := <zweiter Wert>; END; Gruss, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 15. Juni 2004 Autor Teilen Geschrieben 15. Juni 2004 Lässt sich relativ einfach über eine sogenannte PL/SQL Tabelle (TABLE) lösen. DECLARE TYPE tab_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; tabelle tab_type; BEGIN tabelle(1) := <erster Wert>; tabelle(2) := <zweiter Wert>; END; Gruss, Axl Danke, ich werd mal testen, wenn ich dazu komme. Ich brauche das demnächst und wollte mich mal vorher erkundigen, wie das geht Bei fragen, lass ich das hier mal wieder aufleben Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 15. Juni 2004 Autor Teilen Geschrieben 15. Juni 2004 So, kurz Zeit zum testen gehabt... Hmmm, das Problem hab ich schon die Ganze Zeit: Compilation errors for PROCEDURE DBO.CUST_KOVERTTEST Error: PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> form current cursor external language The symbol "begin" was substituted for "DECLARE" to continue. Line: 16 Text: DECLARE Error: PLS-00103: Encountered the symbol "NUMBER" when expecting one of the following: := . ( @ % ; Line: 29 Text: UserID number; Error: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: end not pragma final instantiable order overriding static member constructor map Line: 78 Immer wenn ich das Declare mache, dann kommt das? Was mache ich falsch? Wenn ich es weg mache, dann mosert er bei meiner Variablen - Zuweisung. Wo muss ich das genau anlegen? Die Felder des Arrays muss ich während der Laufzeit füllen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 15. Juni 2004 Teilen Geschrieben 15. Juni 2004 Zeig uns doch mal deine ganze procedure... Wenn du beispielsweise ein semikolon vergessen hast, ist es unmöglich einen solchen Fehler (ohne deine Procedure zu kennen) zu erkennen. Ich denke aber auch das die PL/SQL-Tabelle der sinnvollste Weg ist dein Problem zu lösen.... Grüße mme Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 15. Juni 2004 Autor Teilen Geschrieben 15. Juni 2004 Ok, wie gesagt ich teste das gerade, ehe es ernst wird, von daher fragt nicht nach Sinn oder Unsinn der Sache Möchte nur wissen, wie das Funktioniert: create or replace procedure arraytest is DECLARE TYPE arraytest IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; test arraytest; BEGIN test(1) := 12; test(2) := 13; END; ausgabe1 NUMBER; ausgabe2 NUMBER; ausgabe3 NUMBER; ausgabe4 NUMBER; select BIN_TO_NUM(0,1,1,0,0,1) INTO ausgabe1 from dual; select BIN_TO_NUM(0,1,1,0,1) INTO ausgabe2 from dual; select BIN_TO_NUM(0,1,1,1,0,1) INTO ausgabe3 from dual; select BIN_TO_NUM(1,1,1,0,0,1) INTO ausgabe4 from dual; end arraytest; Habe das jetzt so umgebaut: create or replace procedure arraytest is TYPE arraytest IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; test arraytest; ausgabe1 NUMBER; ausgabe2 NUMBER; ausgabe3 NUMBER; ausgabe4 NUMBER; test(1) := 12; test(2) := 13; select BIN_TO_NUM(0,1,1,0,0,1) INTO ausgabe1 from dual; select BIN_TO_NUM(0,1,1,0,1) INTO ausgabe2 from dual; select BIN_TO_NUM(0,1,1,1,0,1) INTO ausgabe3 from dual; select BIN_TO_NUM(1,1,1,0,0,1) INTO ausgabe4 from dual; dbms_output.put_line(test(1)); dbms_output.put_line(test(2)); end arraytest; Was mache ich also beim oberen Teil falsch? Ich sehe das öfters mit dem DECLARE, aber irgendwie klappt das bei mir nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 15. Juni 2004 Teilen Geschrieben 15. Juni 2004 Setz mal ein begin darein... create or replace procedure arraytest is TYPE arraytest IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; test arraytest; ausgabe1 NUMBER; ausgabe2 NUMBER; ausgabe3 NUMBER; ausgabe4 NUMBER; begin test(1) := 12; test(2) := 13; select BIN_TO_NUM(0,1,1,0,0,1) INTO ausgabe1 from dual; select BIN_TO_NUM(0,1,1,0,1) INTO ausgabe2 from dual; select BIN_TO_NUM(0,1,1,1,0,1) INTO ausgabe3 from dual; select BIN_TO_NUM(1,1,1,0,0,1) INTO ausgabe4 from dual; dbms_output.put_line(test(1)); dbms_output.put_line(test(2)); end arraytest; Wenn ich das richtig erinnere befindet sich der declarationsteil bei benannten blöcken zwischen is und begin..... und es gibt kein Declare... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 15. Juni 2004 Autor Teilen Geschrieben 15. Juni 2004 Wenn ich das richtig erinnere befindet sich der declarationsteil bei benannten blöcken zwischen is und begin..... und es gibt kein Declare... Cool... Funkt. Frage, die nächste: Hat dieses Table-Type irgendwelche Eigenschaften? Wenn ich jetzt das Ganze Fülle, möchte ich gerne wissen, wieviele Einträge das Array hat. Kann man das irgendwie abfragen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 15. Juni 2004 Teilen Geschrieben 15. Juni 2004 indem du die Tabelle.funktion abfragst... dbms_output.put_line(test.count); oder test.last first next delete ..... Ich empfehle dir die Oracle-Hilfe......(PL/SQL-Users-Guide).... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 15. Juni 2004 Autor Teilen Geschrieben 15. Juni 2004 indem du die Tabelle.funktion abfragst... dbms_output.put_line(test.count); oder test.last first next delete ..... Ich empfehle dir die Oracle-Hilfe......(PL/SQL-Users-Guide).... Oh ja, danke... Wie nennt sich das denn? In der Hilfe finde ich unter "table" nicht wirklich was Wenn ich alles gefunden habe bin ich auch still :beagolisc Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Isdira Geschrieben 15. Juni 2004 Teilen Geschrieben 15. Juni 2004 Ja, die Tabelle hat folgende Attribute: EXISTS - prüft, ob Indexposition einen Wert enthält und liefert TRUE oder FALSE FIRST - gibt den kleinsten besetzten Index zurück LAST - gibt den größten besetzten Index zurück PRIOR - gibt den größten besetzten Index zurück, der kleiner ist, als der angegebene NEXT - gibt den kleinsten besetzten Index zurück, der größer ist als der angegebene DELETE - löscht den Inhalt der angegebenen Indexposition oder des Intervalls Aufgerufen werden die z.B. so: x := tabelle.last --> ermittelt Dir den größten besetzten Index Hoffe, das hilft Dir. Sonst frag nochma, ich habe damit auch schon viel gemacht... Gruß, Katja Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 15. Juni 2004 Autor Teilen Geschrieben 15. Juni 2004 Ja, die Tabelle hat folgende Attribute: EXISTS - prüft, ob Indexposition einen Wert enthält und liefert TRUE oder FALSE FIRST - gibt den kleinsten besetzten Index zurück LAST - gibt den größten besetzten Index zurück PRIOR - gibt den größten besetzten Index zurück, der kleiner ist, als der angegebene NEXT - gibt den kleinsten besetzten Index zurück, der größer ist als der angegebene DELETE - löscht den Inhalt der angegebenen Indexposition oder des Intervalls Aufgerufen werden die z.B. so: x := tabelle.last --> ermittelt Dir den größten besetzten Index Hoffe, das hilft Dir. Sonst frag nochma, ich habe damit auch schon viel gemacht... Gruß, Katja Also DELETE würde mir teilweise schon weiterhelfen! Gibt es eine Referenz im Internet? Ich google mich schon scheckig... Wie funktioniert das mit dem Delete genau? Ich hab jetzt tabelle(5).delete versucht, ging nicht. Wie sag ich, dass er den 5. Wert löschen soll? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Isdira Geschrieben 15. Juni 2004 Teilen Geschrieben 15. Juni 2004 Tabelle.delete(5) --> So sollte das gehen... Hmm, ich schaue ma, ob ich was dazu im Internet finde...Ich habe hier halt so ein Buch liegen, in dem das so drinstand... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 16. Juni 2004 Teilen Geschrieben 16. Juni 2004 Wenn du bei Goolge nach "pl sql user's guide" suchst kommst du auf verschiedenste Seiten wo die Oracle Hilfe installiert ist..... Gleich der erste Eintrag (http://www.csee.umbc.edu/help/oracle8/server.815/a67842/toc.htm) zeigt das inhaltsverzeichnis.... Dort gehst du zu: 4 Collections and Records What Is a Collection? Dieses Kapitel dürfte alle deine Probleme lösen... ?? Grüße mme PS: ich habe gerade gesehen das es eine Hilfe für 8.1.5 ist, aber ich denke für deine Belange dürfte es reichen.... (Solange du noch an der Grundlagen arbeit bist....) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 16. Juni 2004 Autor Teilen Geschrieben 16. Juni 2004 Wenn du bei Goolge nach "pl sql user's guide" suchst kommst du auf verschiedenste Seiten wo die Oracle Hilfe installiert ist..... Gleich der erste Eintrag (http://www.csee.umbc.edu/help/oracle8/server.815/a67842/toc.htm) zeigt das inhaltsverzeichnis.... Dort gehst du zu: 4 Collections and Records What Is a Collection? Dieses Kapitel dürfte alle deine Probleme lösen... ?? Grüße mme PS: ich habe gerade gesehen das es eine Hilfe für 8.1.5 ist, aber ich denke für deine Belange dürfte es reichen.... (Solange du noch an der Grundlagen arbeit bist....) Supi, vielen dank Für weitere Referenzseiten wäre ich auch sehr dankbar Das Problem hier ist, dass ich zwar 3 dicke Bücher habe, allerdings ist das was für Leute, die schon alles wissen Vielen vielen dank! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.