VARIABLE Name varchar2(30);
ACCEPT Einstellung PROMPT ‚Bitte Jahreszahl eingeben YY:‘;
DECLARE
Name_a emp.ename%TYPE;
DATE number(2) := &Einstellung;
begin
select ename into Name_a from emp where to_char(hiredate,‚YY:‘) : DATE;
:Name := name_a;
end;
/
PRINT Name
jetzt denkt wahrscheinlich die halbe welt: " was treibt der kerl ?"
ich komm nicht dahinter wie ich das überreden soll zu funktionieren, mittlerweile ist das wahrscheinlich eh schon total abgedriftet…
ich weiß wirklich nicht, was du genau machen willst, aber da gibt es ein paar Probleme:
Benenne eine Variable nie nach einem Datentypen (DATE).
Bei einem Vergleich nehme man Vergleichsoperatoren ("=" statt „:“)
Es hilf ungemein, wenn man erstens erklärt bekommt, was der Fragende ungefähr tun will, und zweitens, was nicht funktioniert (Fehlermeldung o.ä.)
Nutze den PRE-Tag, dann bleibt dein Listing übersichtlich!
Gruß
Sancho
VARIABLE Name varchar2(30);
ACCEPT Einstellung PROMPT 'Bitte Jahreszahl eingeben YY:';
DECLARE
Name\_a scott.emp.ename%TYPE;
Datum number(2) := &Einstellung;
begin
select ename into Name\_a from scott.emp where to\_char(hiredate,'YY') **=** Datum;
:Name := name\_a;
end;
/
PRINT Name
die sache ist ganz einfach, ich probiere mir pl/sql beizubringen…
leider wie man sieht mit mäßigem erfolg.
ich versuche nur überhaupt mal die grundstrukturen rauszufinden und das geht halt am besten wenn man irgendwelche sinnlosen abfragen bastelt.
ich will nichts anderes als das mir das nachher einen namen aus der tabelle emp ausspuckt der zum zeitpunkt „X“ eingestellt wurde (die tabelle emp kennt wahrscheinlich jeder, oder ?)
die variable hab ich weil ich das ergebnis nachher auch sehen will, der rest ist so lange hin und her gebastelt in der hoffnung das ich irgendwann mal keine fehlermeldung mehr bekomme…
meißtens bekomme ich diese hier:
Bitte Jahreszahl eingeben YY:80
alt 3: DATum number(2) := &Einstellung;
neu 3: DATum number(2) := 80;
DECLARE
*
FEHLER in Zeile 1:
ORA-01722: Ung³ltige Zahl
ORA-06512: in Zeile 5
ora-06512 sagt nur leider aus das eine nicht näher definierte exeption aufgetreten ist…
wo der fehler in zeile 1 sein soll ? ich zucke schulter
Versuchs mal mit char(2) statt number(2), damit Du char mit char vergleichst.
Und wundere dich nicht über Fehlermeldungen, weil Dein select keine oder mehrere Zeilen liefert. SELECT into… darf nur genau eine Zeile zurückgeben. Also vielleicht die Where -Bedingung mit 'and rownum’ ergänzen.
Gruß Uwe
Versuchs mal mit char(2) statt number(2), damit Du char mit
char vergleichst.
oder vor dem to_char noch ein to_number …
Und wundere dich nicht über Fehlermeldungen, weil Dein select
keine oder mehrere Zeilen liefert. SELECT into… darf
nur genau eine Zeile zurückgeben. Also vielleicht die Where -Bedingung mit ’ and rownum’ ergänzen.
oder das ganze in einen cursor verpacken und in einer loop durchlaufen lassen … und dann kommt die frage „da kommt ein ‚buffer overflow‘“
nochmal: nimm doch meinen Hinweis ernst und nutze den PRE-Tag!
Bitte Jahreszahl eingeben YY:80
alt 3: Dat char(2) := &Einstellung;
neu 3: Dat char(2) := 80;
DECLARE
*
FEHLER in Zeile 1:
ORA-01403: Keine Daten gefunden
ORA-06512: in Zeile 5
Es ist ein bißchen schwer, Oracles Fehlermeldungen genau zu lokalisieren. Was dir gesagt wird ist, daß die Fehlermeldung beim Ausführen der Prozedur stattfand, die als erstes in deinem Skript vorkommt (deswegen Zeile 1), aber direkt darunter steht ja, daß dies in Zeile 5 passiert.
Gruß
Sancho
P.S. Meine Prozedur, wie ich sie gestern gepostet habe, funktionierte einwandfrei, oder nicht?
Ja - solche mit Jahreszahl 80 gibt es. Aber solche mit
Jahreszahl ‚Dat‘ gibt es nicht, und das ist, was du fragst:
Ha ! genau die aussage hab ich gebraucht… Danke !!!
ich hab gedacht ich müßte die eingabe erst in eine variable verpacken und das könnte ich dann einfach so aufrufen… jaja, manchmal macht man´s unnötig kompliziert… weil man keine ahnung hat…
aber was ist bitte ein PRE-Tag ? nie gehört das…
das steht wahrscheinlich erst in einem späteren kapitel…
manchmal macht man´s unnötig kompliziert… weil man keine
ahnung hat…
Hatte ich dir meine Buchempfehlung hier im Forum gegeben? Es gibt ein ausgezeichnetes Buch von Steven Feuerstein und Bill Pribyl, Oracle PL/SQL-Programmierung, ISBN: 389721184X Buch anschauen