Zum Inhalt springen

Arrays in Oracle


Ganymed

Empfohlene Beiträge

Hallo zusammen

(ja ich werd hier noch zum Power-User hier :D),

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|

------------------

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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....)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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! :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...