Hm komisch, das von Stefan geht bei mir auch... Ich hab echt keine Idee..
Könnte vielleicht jemand einfach mal folgendes copy-pasten:
set feedback 7
set echo on
set serveroutput on
drop table kunde cascade constraints;
drop table auftrag cascade constraints;
drop table eintreiber cascade constraints;
create table kunde(
knr number(5),
vorname varchar(10),
name varchar(10) not null,
geschlecht varchar(1),
land varchar(3),
primary key(knr),
constraint kunde1 check(geschlecht in ('M','W'))
);
create table auftrag(
knr number(5),
datum date,
betrag number(7,2) not null,
mahnungsanzahl number(1) default 0,
mahntermin date not null,
primary key(knr,datum),
constraint auftrag1 check(mahnungsanzahl<4),
constraint auftrag2 foreign key(knr) references kunde(knr)
);
create table eintreiber(
knr number(5),
rechnungsdatum date,
uebergabetermin date,
primary key(knr,rechnungsdatum)
);
create or replace
procedure einfuegen
(
kundennummer in kunde.knr%type,
vorname in kunde.vorname%type,
name in kunde.name%type,
geschlecht in kunde.geschlecht%type,
land in kunde.land%type
)
is
begin
insert into kunde
values(kundennummer, vorname, name, geschlecht, land);
end;
/
execute einfuegen(23, 'Hans', 'Meier', 'M', 'Ger');
select * from kunde;
create or replace
function einfuegen2
(
vorname in kunde.vorname%type,
name in kunde.name%type,
geschlecht in kunde.geschlecht%type,
land in kunde.land%type
)
return kunde.knr%type
is
newknr kunde.knr%type;
begin
select max(kunde.knr)
into newknr
from kunde;
if (newknr is null) then
newknr := 0;
else
newknr := newknr + 1;
end if;
insert into kunde
values(newknr, vorname, name, geschlecht, land);
return newknr ;
end;
/
execute einfuegen2('Peter', 'Maffai', 'M', 'Ger');
execute einfuegen2('Richard', 'Schubert', 'M', 'Ger');
select * from kunde;
create or replace
procedure auftrag_eintragen
(
kundennummer auftrag.knr%type,
betrag auftrag.betrag%type,
datum auftrag.datum%type
)
is
mahntermin auftrag.datum%type;
begin
mahntermin := datum + 7;
insert into auftrag
values (kundennummer, datum, betrag, 0, mahntermin);
end;
/
execute auftrag_eintragen(23, 23.34, sysdate);
select * from auftrag;
create or replace
procedure auftrag_eintragen2
(
vorname in kunde.vorname%type,
name in kunde.name%type,
geschlecht in kunde.geschlecht%type,
land in kunde.land%type,
betrag auftrag.betrag%type,
datum auftrag.datum%type
)
is
newknr kunde.knr%type;
begin
newknr := einfuegen2(vorname, name, geschlecht, land);
insert into auftrag
values (newknr, datum, betrag, 0, mahntermin);
end;
/
execute auftrag_eintragen2('Carmen', 'Electra', 'W', 'USA', 2348.34, sysdate);
select * from auftrag;
in der letzten Funktion kommt es bei mir zum Compiler-Fehler.