Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

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