Zum Inhalt springen

Problem mit cursor in PL/SQL


Alex_winf01

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

:rolleyes:

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ 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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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