Announcement

Collapse
No announcement yet.

Oracle Stored Prcedure

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Oracle Stored Prcedure

    Hallo,

    ich möchte in meiner Stored Procedure (für eine Oracle DB) ein:

    s varchar2(200);
    SELECT * INTO s FROM ZDEVICES;

    machen, bekomme aber den Fehler

    ERROR at line 7: PL/SQL: ORA-00947: Anzahl der Werte reicht nicht aus.

    Mir ist schon klar, was der Fehler bedeutet (SELECT liefert mehrere Werte zurück), mir ist aber nicht klar, was ich da in der SP definieren muss als "s" damit mir das Ergebnis in "s" geschrieben wird.

    Am liebsten wäre mir halt ein Array, wo in jedem Eintrag ein Ergebnis von Select steht.

    Weiß jemand wie ich das am Besten machen kann?
    lg

  • #2
    Typischerweise verwendet man für so etwas CURSOR. Schau mal hier. Da gibts eine Einführung und kleine Beispiele zu dem Thema. Typischerweise öffnet man einen CURSOR (entspricht etwa dem Ergebnis einer Abfrage) und läuft dann Datensatzweise durch dieses Ergebnis durch, ohne das Ergebnis der Abfrage explizit einer Variable zuzuweisen.
    Ausserdem gibt es auch Datentypen für Tabellendatensätze mit dem %ROWTYPE Befehl Schau einfach mal bissl drüber.

    Comment


    • #3
      Das %ROWTYPE hab ich schon gefunden, ich vermute aber das es mit dem nicht gehen wird, da ich folgende SELECT- Abfrage habe:

      Code:
      SELECT Name, Version, UniqueDeviceID
      FROM packages, collection, device_collection, devices
      WHERE packages.ID = package_ID AND collection.ID = collection_ID AND device_ID = devices.ID
      Oder kennst du eine Möglichkeit, wie man einen Type über mehrere Tabellen hinweg definierten kann, so in der Art:

      s DEVICES%ROWTYPE && COLLECTION%ROWTYPE;

      ??
      vielen Dank!!
      lg

      Comment


      • #4
        Das Stichwort ist: BULK COLLECT

        http://www.martinbulinski.de/ORACLE/...-tabellen.html

        Comment


        • #5
          s varchar2(200);
          SELECT * INTO s FROM ZDEVICES;

          machen, bekomme aber den Fehler

          ERROR at line 7: PL/SQL: ORA-00947: Anzahl der Werte reicht nicht aus.
          ZDEVICES enthält eine bestimmte Anzahl an Spalten (beispielsweise 3). Dein SELECT liefert also 3 Werte pro Zeile. In der INTO-Klausel hast du sicherlich mehr als 3 Variablen angegeben. Damit wird nicht jede Variable mit einem Wert versorgt, daher: PL/SQL: ORA-00947: Anzahl der Werte reicht nicht aus.
          Kontrolliere doch mal deine INTO-Klausel. Falls du eine zusammengesetzte Variable verwendest, muss die entsprechende Komponentenanzahl (hier 3) sein.

          Mir ist schon klar, was der Fehler bedeutet (SELECT liefert mehrere Werte zurück),
          Wenn SELECT mehr als einen Datensatz liefert, wird der Fehler TOO_MAN_ROWS (ORA-01422) ausgegeben bzw. wenn kein Datensatz gefunden wurde: NO_DATA_FOUND (ORA-01403).

          kuemmelchen

          Comment

          Working...
          X