PL/SQL: Join mit Collection

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

kennt sich jemand mit PL/SQL aus?

Ich habe folgende Datentypen
Code:
CREATE OR REPLACE TYPE ArtikelType AS OBJECT
(
  ArtikelId NUMBER,
  ...
);

CREATE TYPE ArtikelCollectionType AS TABLE OF ArtikelType;

CREATE OR REPLACE TYPE WarenkorbItemType AS OBJECT
(
  ArtikelId NUMBER,
  ...
);

CREATE TYPE WarenkorbItemCollectionType AS TABLE OF WarenkorbItemType;
und möchte alle Artikel kriegen, die in einem gegebenen Warenkorb enthalten sind.
(ArtikelView liefert Objekte vom Typ ArtikelType aus der Artikel-Tabelle)
Code:
PROCEDURE GetArtikel
(
  warenkorbItemCollection IN WarenkorbItemCollectionType,
  artikelCollection OUT ArtikelCollectionType
)
IS
  CURSOR ArtikelCursor
  IS
    SELECT VALUE(Artikel)
    FROM ArtikelView Artikel,
         TABLE(warenkorbItemCollection) Warenkorb
    WHERE Artikel.ArtikelId = Warenkorb.ArtikelId  <-- Hier kommt der Fehler (Warenkorb.ArtikelId unbekannt)
  ;
BEGIN
  OPEN ArtikelCursor;
  FETCH ArtikelCursor BULK COLLECT INTO artikelCollection;
  CLOSE ArtikelCursor;
END;
In der WHERE Clause wird ein Fehler gemeldet (Unbekannter Spaltenname)
Ich kann mir nicht erklären, was daran falsch sein kann.

Jemand eine Idee?

Eine alternative Lösung, wo ich eine Liste von ArtikelIds in WHERE Clause
angebe, wäre auch OK. Irgendwie wie folgt
Code:
SELECT VALUE(Artikel)
FROM ArtikelView Artikel
WHERE Artikel.ArtikelId IN ( Liste der Ids aus warenkorbItemCollection, nur wie?)
Ich kann die ArtikelIds aus der warenkorbItemCollection auslesen, nur wie kriege ich
sie in IN (...) rein?
 

DP

Top Contributor
ja wie wohl? mit einer schleife (der vector enthält die artikelnummern aus dem warenkorb):

Code:
      //Vector v;
      StringBuffer sql = new StringBuffer("select * from artikel where ");
      
      for(int i = 0; i < v.size(); i++){
        if(i > 0){
          sql.append(" and ");
        }
        sql.append(" ArtikelId = ");
        sql.append(v.get(i));
      }

      ResultSet rs = stmt.executeQuery(sql.toString());

feierabend
 
G

Guest

Gast
DP hat gesagt.:
ja wie wohl? mit einer schleife (der vector enthält die artikelnummern aus dem warenkorb)
Danke, aber das ist die falsche Baustelle für sowas. Die PL/SQL Prozedur ist nicht Javaseitig,
sondern "in Oracle" definiert. Diese wird in Java nur aufgerufen bzw. nicht mal das, da es
indirekt über andere Prozeduren geht. Ich habe es hier nur vereinfacht gezeigt, um das
Problem zu beschreiben.

Übrigens, selbst wenn es javaseitig wäre, würde deine Abfrage nie ein Ergebnis liefern. (denk mal darüber nach ;))
 
G

Guest

Gast
Problem hat sich erledigt. Der Code oben ist korrekt. Der Fehler war ein anderer, der
damit nichts zu tun hatte. :autsch:
 

DP

Top Contributor
êine schleife in der stored proc machen?!

Übrigens, selbst wenn es javaseitig wäre, würde deine Abfrage nie ein Ergebnis liefern.

da bin ich mal gespannt :D
 
G

Guest

Gast
DP hat gesagt.:
êine schleife in der stored proc machen?!
Nöö, es geht schon wie oben gezeigt mit der Collection und dem Join. (Es ist keine Java-Collection
sondern PL/SQL-Collection) Ich habe dummerweise einen Tippfehler im Code gehabt. So gesehen
war die Fehlermeldung OK, nur ich war zu doof um darauf zu vertrauen.

DP hat gesagt.:
Übrigens, selbst wenn es javaseitig wäre, würde deine Abfrage nie ein Ergebnis liefern.

da bin ich mal gespannt :D
OK, wenn nur ein Wert im übergebenen Vektor drin ist. ;)
Bei 0 knallt's und bei > 1 kommt sicherlich nix.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JOIN COLUMN wird nicht genommen Datenbankprogrammierung 2
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
D Left Join mit Wioth Rollup Datenbankprogrammierung 0
S MySQL ehemaliger FULL OUTER JOIN zusammenstellen Datenbankprogrammierung 1
L Join zweier Tabellen in SQL Datenbankprogrammierung 2
A Fehlermeldung: JOIN FETCH expressions cannot be defined with an identification variable Datenbankprogrammierung 0
B Inner Join ohne SQL Syntax Datenbankprogrammierung 2
S SQL join - NullPointerExeption Datenbankprogrammierung 3
E Mehrere Tabellenspalten mit INNER JOIN verknüpfen Datenbankprogrammierung 1
OnDemand LEFT JOIN id hat Null Datenbankprogrammierung 6
ruutaiokwu reihenfolge der operanden bei join's Datenbankprogrammierung 5
G SQLite Self Join "unbestimmter tiefe" Datenbankprogrammierung 7
I MySQL Vergleich über mehrere Tabellen! Join? Datenbankprogrammierung 6
N Select mit join Datenbankprogrammierung 3
F Oracle select sum() join select sum() Datenbankprogrammierung 9
Kenan89 Datenbank Join Datenbankprogrammierung 16
M JPQL - Join Verkettung Datenbankprogrammierung 8
K SQL Inner Join - On Klausel Datenbankprogrammierung 10
F Komplexer Tabellen-Join und Ausgabe in Excel Datenbankprogrammierung 17
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
kirchrath Hibernate Join - angejointes Objekt wählen Datenbankprogrammierung 2
Eldorado MySQL SELECT mit GROUP BY und INNER JOIN Datenbankprogrammierung 2
G Join Abfrage Datenbankprogrammierung 12
S SQL inner join bei >10 Tabellen über 2 Variablen Datenbankprogrammierung 2
T MySQL: Join auf sich selbst schlägt fehlt Datenbankprogrammierung 3
MQue Join n:m Datenbankprogrammierung 9
0x7F800000 MS-SQL Server 2008 Wie benutzt man da NATURAL JOIN / INNER JOIN USING? Datenbankprogrammierung 3
D join updaten in java Datenbankprogrammierung 4
G [Hibernate] Problem mit LEFT JOIN Datenbankprogrammierung 7
S Preparestatement mit join Datenbankprogrammierung 4
S MySQL: Abfrage auf 2 Tabellen durch join Datenbankprogrammierung 5
P Join Datenbankprogrammierung 4
G Hilfe: Werte sind alle x2 (oder mehr) nach JOIN Datenbankprogrammierung 13
M Proble mit Selcet mit join und rst.next() Datenbankprogrammierung 15
T Diverse JDBC Probleme (inner join, rs.last(), update) Datenbankprogrammierung 2
E ERROR: argument of JOIN/ON must be type boolean? Datenbankprogrammierung 2
E Nochmal eine Datenbankabfrage Frage :-o (JOIN oder so) Datenbankprogrammierung 4
E JOIN und * Datenbankprogrammierung 3
G Probleme mit Access und Join Datenbankprogrammierung 3
T [SQL] Doppelter Join aus der selben Tabelle & Feldnnamen Datenbankprogrammierung 3
S JOIN und wohin damit? Datenbankprogrammierung 5
T org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ..., could not initialize proxy - no Session Datenbankprogrammierung 5
S @OneToMany @JoinTable failed to lazily initialize a collection Fehler Datenbankprogrammierung 2
R JPQL und Navigation durch Collection Datenbankprogrammierung 1
C JPA : "generische" Collection persistieren Datenbankprogrammierung 4

Ähnliche Java Themen


Oben