Frage zu einem PLSQL Befehl

Hallo, ich habe das hier im internet gefunden (in einer Einführung) und wollte es so testen. Geht aber nicht

declare
v_zahl1 number(5) := 5;
v_zahl2 number(5) DEFAULT 5;

begin
select count(*) into anzahl from scott.emp;
dbms_output.put_line(anzahl);
Exception
when too_many_rows then
dbms_output.put_line(‚Sie haben zu viele Werte.‘);
when others then
dbms_output.put_line(‚unbekannte Ausnahmeverletzung.‘);
end;
/

es kommen dann diese Fehler:

select count(*) into anzahl from scott.emp;
*
FEHLER in Zeile 5:
ORA-06550: Zeile 5, Spalte 25:
PLS-00201: Bezeichner ‚ANZAHL‘ muss deklariert werden
ORA-06550: Zeile 5, Spalte 4:
PL/SQL: SQL Statement ignored
ORA-06550: Zeile 6, Spalte 25:
PLS-00201: Bezeichner ‚ANZAHL‘ muss deklariert werden
ORA-06550: Zeile 6, Spalte 4:
PL/SQL: Statement ignored

so geht mir das aber dauernd, in irgendwelchen Büchern stehen Beispiele drin, die ich aber nicht ausprobieren kann…

bin ich zu blöde, benutze ich ein falsches sqlplus (client9i DB 8i) oder was mache ich falsch ???

ich meine wie soll ich das lernen wenn ich mit den Beispieldingern nicht ein bißchen rumprobieren kann ?

kann mir einer Verraten was falsch ist ?

Grüße

Chris

Hallo, ich habe das hier im internet gefunden (in einer
Einführung) und wollte es so testen. Geht aber nicht

declare
v_zahl1 number(5) := 5;
v_zahl2 number(5) DEFAULT 5;

anzahl number(10);

begin
select count(*) into anzahl from scott.emp;
dbms_output.put_line(anzahl);
Exception
when too_many_rows then
dbms_output.put_line(‚Sie haben zu viele Werte.‘);
when others then
dbms_output.put_line(‚unbekannte Ausnahmeverletzung.‘);
end;
/

es kommen dann diese Fehler:

select count(*) into anzahl from scott.emp;
*
FEHLER in Zeile 5:
ORA-06550: Zeile 5, Spalte 25:
PLS-00201: Bezeichner ‚ANZAHL‘ muss deklariert werden
ORA-06550: Zeile 5, Spalte 4:
PL/SQL: SQL Statement ignored
ORA-06550: Zeile 6, Spalte 25:
PLS-00201: Bezeichner ‚ANZAHL‘ muss deklariert werden
ORA-06550: Zeile 6, Spalte 4:
PL/SQL: Statement ignored

so geht mir das aber dauernd, in irgendwelchen Büchern stehen
Beispiele drin, die ich aber nicht ausprobieren kann…

bin ich zu blöde, benutze ich ein falsches sqlplus (client9i
DB 8i) oder was mache ich falsch ???

ich meine wie soll ich das lernen wenn ich mit den
Beispieldingern nicht ein bißchen rumprobieren kann ?

kann mir einer Verraten was falsch ist ?

Grüße

Chris

Tu doch einfach, was die Datenbank Dir sagt: deklariere anzahl, dann kannst du das auch verwenden.

Gruß

Peter

ok danke, läuft auf jeden fall schonmal, spuckt mir auch „17“ aus.

was ich jetzt noch nicht verstehe, warum wurde das noch deklariert ?

v_zahl1 number(5) := 5;
v_zahl2 number(5) DEFAULT 5;

das taucht ja nirgends mehr auf … ?

ich habe das hier her: http://rowa.giso.de/oracle/latex/Einfuhrung_in_die.html da steht drin das ich als ausgabe die Exception too_many_rows ausgegeben bekommen würde. das bekomme ich aber nur wenn ich statt count(*) z.b. „ename“ angebe. was mich weiter noch verwundert, ich habe dann ja Text den ich in ein numberfeld eintrage, das interessiert aber schon nicht mehr.

Grüße

Chris

Hi,

ok danke, läuft auf jeden fall schonmal, spuckt mir auch „17“
aus.

Wahrscheinlich war das der Inhalt Deiner Tabelle :smile:

was ich jetzt noch nicht verstehe, warum wurde das noch
deklariert ?

Das war ein Fehler im Beispiel. Da werden Variablen deklariert, aber verwendet wird eine ganz andere.

Empfehlung: hol dir eine vernünftige Einführung. Wie du schon erkannt hast, kannst du mit fehlerhaften Beispiel nicht viel anfangen. Darüber hinaus ist mir das Niveau der Einführung zu schlecht, gerade für einen Anfänger.

Eine Buchempfehlung: Oracle PL/SQL Grundlagen von Steven Feuerstein und Bill Prybill, ISBN: 3897211807 Buch anschauen.

da
steht drin das ich als ausgabe die Exception too_many_rows
ausgegeben bekommen würde.

Die Exception kommt, wenn eine SELECT INTO-Anweisung mehrere Ergebnisse liefert (du hast ja nur eine Variable zum Aufnehmen). Das ist aber abhängig von den Daten, die in deiner Datenbank vorhanden sind; bei dir liefert der SELECT nur eine Zeile.

Gruß

Sancho

ok danke, läuft auf jeden fall schonmal, spuckt mir auch „17“
aus.

was ich jetzt noch nicht verstehe, warum wurde das noch
deklariert ?

v_zahl1 number(5) := 5;
v_zahl2 number(5) DEFAULT 5;

das taucht ja nirgends mehr auf … ?

vermutlich handelt es sich dabei um ein Fragment aus einem größeren Zusammenhang. Oft sind - gerade in amerikanischen Büchern - die Codefragmente von geradezu erbämlicher Qualität, da nie getestet.

ich habe das hier her:
http://rowa.giso.de/oracle/latex/Einfuhrung_in_die.html da
steht drin das ich als ausgabe die Exception too_many_rows
ausgegeben bekommen würde. das bekomme ich aber nur wenn ich
statt count(*) z.b. „ename“ angebe. was mich weiter noch
verwundert, ich habe dann ja Text den ich in ein numberfeld
eintrage, das interessiert aber schon nicht mehr.

Grüße

Chris

Danke schön euch beiden !
auch für die Buchempfehlung !

Grüße

Chris