Citat:
Ursprungligen postat av
bosscs2
Här är en till, vad är fel?
Kod:
create sequence my_seq
begin with 1
increment by 1;
create or replace table tools (
pk number(1),
artnamn varchar(20),
pris number(6)
);
create or replace procedure setArtnamn (
p_artnamn in tools.artnamn%type,
p_pris in tools.pris%type)
as
counter number;
begin
select my_seq.nextval
into counter
from dual;
insert into tools(pk, artnamn, pris)
values(counter, p_artnamn, p_pris);
commit;
end;
/
begin
setArtnamn('skruvmejsel',50);
end;
/
select *
from tools;
Feleddeleandet:
ORA-00933: SQL command not properly ended
ORA-00922: missing or invalid option
Errors: PROCEDURE SETARTNAMN
Line/Col: 0/0 PL/SQL: Compilation unit analysis terminated
Line/Col: 2/14 PLS-00201: identifier 'TOOLS.ARTNAMN' must be declared
ORA-06550: line 2, column 1:
PLS-00905: object SQL_RFIMIKHVOERNBTFSVZUNUAQOD.SETARTNAMN is invalid
ORA-00942: table or view does not exist
Tabellen skapas inte och du får ORA-00942 för du kan inte göra "CREATE OR RELACE TABLE".
Skapa tabellen med "CREATE TABLE...", och om du ska ändra den måste du köra "ALTER TABLE..." alternativt "DROP TABLE..." och sen "CREATE TABLE..." igen.
Sen använder du en sekvens för primary key som är deklarerad som "Number(1)"; det gör att du kan spara 0-9 i tabellen. När sekvensen når 10 efter 10 körningar kommer koden att faila på att du inte får plats med siffran i primary keyn.
Sen kan förenkla koden från
begin
select my_seq.nextval
into counter
from dual;
insert into tools(pk, artnamn, pris)
values(counter, p_artnamn, p_pris);
commit;
end;
till
begin
insert into tools(pk, artnamn, pris)
values(my_seq.nextval, p_artnamn, p_pris);
commit;
end;