Alex_winf01 Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Hallo liebe Forengemeinde, Folgender Teil-Code bereitet mir gerade Kopfzerbrechen: declare ... cursor jahresdaten_anzeigen_cursor IS ... BEGIN For jahresdaten_record IN jahresdaten_anzeigen_cursor LOOP ... END LOOP; END; Bei den Drei Punkten habe ich dann Code weggelassen, der funktioniert. Bei der Zeile For jahresdaten_record IN jahresdaten_anzeigen_cursor LOOP bekomme ich folgende Fehlermeldung: Fehler in Zeile 57; ORA-06550: Zeile 57, Spalte 1: PLS-00402: Alias in Select-Liste notwendig, um doppelte Spaltennamen zu vermeiden. was mache ich falsch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Ich vermute, dass das Problem nicht der Cursor sondern das SQL hinterm Cursor ist. In der SQL Anweisung gibt es anscheinend zwei Spalten mit dem gleichen Namen. Dort muss eine Spalte einen Alias erhalten damit die Spaltennamen eindeutig sind. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 @ robotto7831a danke für Deine Antwort. Hatte aus Versehen zweimal die selbe Spalte einer Tabelle im SQL-Befehl drin. Jetzt habe ich eine Verständnisfrage: In unserer Access-Datenbank habe ich eine Abfrage a und b, die sich bestimmte Informationen aus den Tabellen holen. Dann habe ich eine Abfrage c, die auf beide Abfragen aufbaut. Also so was wie Select a.Strasse, a.Ort, b.Info, b.Blabla where a.Id=b.ID Wie kann ich das am einfachsten in PL/SQL umsetzen? Ich hatte an verschiedene Prozeduren bzw. Funktionen gedacht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Wofür willst Du verschiedene Funktionen oder Prozeduren machen? Das ist doch nur eine große SQL Anweisung. Je nachdem wie performant diese ist, sollte man vielleicht die Zwischenergebnisse in Tabellen speichern und im nächsten Schritt die Tabelle als Basis nehmen. Aber das kann alles innerhalb einer Stored Proc laufen. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 @ robotto7831a Ich habe da noch eine Frage: create or replace package body jahresdaten_anzeigen as procedure jahresdaten_anzeigen as -- 'gedachtes' declare Cursor jahresdaten_anzeigen_cursor is /** Hier steht der SQL-Befehl **/ begin For jahresdaten_record IN jahresdaten_anzeigen_cursor LOOP /** Einige if-Anweisungen **/ End loop; end; end jahresdaten_anzeigen; Wie kann ich jetzt die Daten aus dem SQL-Befehl in einen View schreiben? Ich finde da bei google nichts vernünftiges. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Warum denn jetzt ein Package? Wie View? Ich habe keine Ahnung was Du mit dem Code erreichen möchtest. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 Ich möchte das Ergebnis meiner ersten Zwischenabfrage in einen View speichern, dann die zweite Abfrage drüber. Ich habe nur folgendes "Problem": In der ersten Zwischenabfrage wird folgendes gemacht (vereinfacht dargestellt): select tabellea.spaltea, tabellea.spalteb, if(tabellea.spalteb > 0;1;0) as XYZ, tabelleb.spalteaa, tabelleb.spaltebb, if(tabelleb.spaltecc > 0;1;0) as ZZZ, tabellea.spalted, tabelleb.spaltedd from tabellea, tabelleb where tabellea.spalted=tabelleb.spaltedd group by tabellea.spalted Abfrage 3 baut auf Abfrage 2 auf, Abfrage 2 baut auf Abfrage 1 auf. Alles in EINE Abfrage packen ist NICHT gewünscht. Das Ergebnis der 1. Abfrage soll in eine View gepackt, das Ergebnis der 2. Abfrage soll in eine andere View gepackt. Wie würdest Du das machen? NICHT in eine Abfrage packen und es soll keine zusätzliche Tabelle angelegt werden hierfür!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 for c1 in (select ....) loop for c2 in (select ....) loop for c3 in (select ....) loop end loop; end loop; end loop; [/code] View geht nicht, da eine View auf etwas festes verweisen muss. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 @ robotto7831a Vielen Dank schon mal für Deine Antwort. Und wie würdest Du den Part if(tabellea.spalteb > 0;1;0) as XYZ innerhalb des Select-Befehls abfangen? Geht das so einfach? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Es gibt für SQL ein CASE WHEN. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 7. September 2010 Autor Teilen Geschrieben 7. September 2010 @ robotto7831a Also so was wie die Funktion decode? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 7. September 2010 Teilen Geschrieben 7. September 2010 Könnte man eventuell auch machen. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 8. September 2010 Autor Teilen Geschrieben 8. September 2010 @ robotto7831a View geht nicht, da eine View auf etwas festes verweisen muss. Kann ich die einzelnen Abfragen nicht in einer View "speichern" und dann abfragen? Die Abfrage 1 brauche ich nicht nur für Abfrage 2, sondern auch für Abfrage 8. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 8. September 2010 Teilen Geschrieben 8. September 2010 Wenn Du umbedingt Views bauen willst, dann baue welche. Ob es funktioniert, wirst Du dann merken. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 8. September 2010 Autor Teilen Geschrieben 8. September 2010 @ robotto7831a hab schon gemerkt, dass es in Oracle nicht funktioniert. ABER: Ich kann in Access in jede Abfrage eine andere Abfrage einbauen, in MySQL kenne ich das Attribut VIEW_METADATA. Nur Oracle soll es nicht kapieren? Ich selber habe die Problematik gesehen. Nur mein Kollege will es aus den oben genannten Gründen nicht kapieren. Verständlich auch. Beantworte mir folgende Frage: Warum kann ich so was in Access und in MySQL realisieren, aber nicht in Oracle? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 8. September 2010 Teilen Geschrieben 8. September 2010 Du kannst in Oracle in jedes SQL Statement auch Views einbauen. Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 8. September 2010 Autor Teilen Geschrieben 8. September 2010 @ robotto7831a danke für die Info. Ich habe da noch eine andere Frage zu CASE WHEN: CASE WHEN JAHRESDATEN.SPALTEXYZ='B' Or JAHRESDATEN.SPALTEXYZ='G' THEN JAHRESDATEN.SPALTEA + JAHRESDATEN.SPALTEB + JAHRESDATEN.SPALTEC AS XXX ELSE 0 AS XXX END, Hier bekomme ich in der Zeile JAHRESDATEN.SPALTEA + JAHRESDATEN.SPALTEB + JAHRESDATEN.SPALTEC AS XXX die Fehlermeldung, dass ein Schlüsselwort fehlt. Was mache ich da falsch? in XXX soll doch nur SpalteA, SpalteB und SpalteC aufadiert werden. Ansonsten soll in XXX eine 0 stehen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 8. September 2010 Teilen Geschrieben 8. September 2010 Ich habe jetzt kein Oracle hier. Lass mal das AS XXX weg. Das kommt dort definitiv nicht hin. Hinter dem END muss ein Semikolon, wenn ich die Syntax richtig im Kopf habe. Dann schreib im When Teil nur JAHRESDATEN.SPALTEA. Funktioniert es dann generell? Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 8. September 2010 Teilen Geschrieben 8. September 2010 Hi, ein ; innerhalb eines SQLs gibt es nicht, dafür ist das END da. Der Alias wird pro Spalte nur einmal vergeben und wird damit nach dem END platziert: SELECT CASE .... END AS XXXDim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 8. September 2010 Autor Teilen Geschrieben 8. September 2010 @ all danke schon mal für die Geduld und die Antworten. Jetzt funktioniert es, wenn ich das As XXX hinter das End stelle. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Alex_winf01 Geschrieben 12. September 2010 Autor Teilen Geschrieben 12. September 2010 @ robotto7831a habe jetzt die Problematik noch mal mit Views aufgebaut und es funktioniert! 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.