Einfache plsql-frage

ich werkel gerade mal wieder rum…

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…

bitte um denkanstoß oder lösung oder…

grüße

chris

Mahlzeit,

ich weiß wirklich nicht, was du genau machen willst, aber da gibt es ein paar Probleme:

  1. Benenne eine Variable nie nach einem Datentypen (DATE).
  2. Bei einem Vergleich nehme man Vergleichsoperatoren ("=" statt „:“) :smile:
  3. Es hilf ungemein, wenn man erstens erklärt bekommt, was der Fragende ungefähr tun will, und zweitens, was nicht funktioniert (Fehlermeldung o.ä.)
  4. 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

hallo,

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

hi!

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‘“ :wink:

grüße,
tomh

oder das ganze in einen cursor verpacken und in einer loop
durchlaufen lassen … und dann kommt die frage „da kommt ein
‚buffer overflow‘“ :wink:

hallo,

langsam langsam… bei so sachen wie cursor bin ich noch nicht :wink:

ich habe auch eine jahreszahl wo ich weiß das ich nur eine zeile zurück bekomme, ich will mich ja auch nur mit der logik ansich auseinander setzen…

jetzt schaut das also so aus

VARIABLE Name varchar2(30);
ACCEPT Einstellung PROMPT ‚Bitte Jahreszahl eingeben YY:‘;

DECLARE
Name_a varchar2(20);
Dat char(2) := &Einstellung;
begin
select ename into name_a from emp where to_char(hiredate,‚YY‘) = ‚Dat‘ and rownum

Hi,

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

Da steht es doch: es wurden keine Daten gefunden. Lies doch die Fehlermeldung!
http://www.techonthenet.com/oracle/errors/ora01403.htm

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 aber es sind doch daten da…

SQL> select ename from emp where to_char(hiredate,‚YY‘) = ‚80‘ and rownum

Mahlzeit,

SQL> select ename from emp where to_char(hiredate,‚YY‘) = ‚80‘ and rownum ‚Dat‘ and rownum

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… :wink:

Grüße

Chris

Mahlzeit,

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

aber was ist bitte ein PRE-Tag ? nie gehört das…

http://www.wer-weiss-was.de/cgi-bin/faqs/faqlist.fpl…
(Das ist der Link, der direkt unter dem Editierfenster beim Schreiben von Artikeln erscheint: Hilfe zur Anwendung der HTML-Tags).

Gruß

Sancho