希望有人能帮助我,我一直得到这个错误,但我不确定我做错了什么。我创建了这个过程,它将以下信息插入到银行的"存款"表中:序列号、个人号码、账号、存款金额和日期)。该程序还应该打印出新存款后的总余额。
create or replace procedure do_insättning (
p_radnr kontoägare.radnr NUMBER(9),
p_pnr bankkund.pnr VARCHAR(11),
p_knr konto.knr NUMBER(8),
p_belopp insättning.belopp NUMBER(10,2),
p_datum insättning.datum DATE,
p_saldo konto.saldo NUMBER(10,2))
is
begin
insert into kontoägare(radnr)
values(p_radnr);
insert into bankkund (pnr)
values(p_pnr);
insert into konto(knr)
values(p_knr);
insert into insättning(belopp)
values(p_belopp);
insert into insättning(datum)
values(sysdate);
insert into konto(saldo)
values(p_saldo);
commit;
dbms_output.put_line('Saldot är nu = ' || p_belopp + p_saldo);
end;
/
当我以这种方式执行它时,我得到一个错误的参数数错误:
EXECUTE do_insättning (radnr_seq.NEXTVAL, '540126-1111', 123, 200, sysdate);
编辑:
所以我编辑了查询,并试图添加saldo作为一个变量,以便能够打印语句,但这也不起作用。
create or replace procedure do_insättning (
p_radnr kontoägare.radnr%TYPE,
p_pnr bankkund.pnr%TYPE,
p_knr konto.knr%TYPE,
p_belopp insättning.belopp%TYPE
)
is
v_saldo konto.saldo%type;
begin
select saldo
into v_saldo
from konto;
insert into insättning(
radnr, pnr, knr, belopp, datum
) values (
p_radnr, p_pnr, p_knr, p_belopp, SYSDATE
);
dbms_output.put_line('Saldot är nu = ' || p_belopp + v_saldo);
end;
/
我得到"数字或值错误:字符到数字转换错误"。
我创建了这个过程,将以下信息插入银行的'deposit'表
不,它不会将数据插入到一个表中;它将其插入到四个不同的表(kontoägare
,bankkund
,konto
和insättning
)中,并在konto
和insättning
表中各创建2行。
你的查询有效:
create procedure do_insättning (
p_radnr kontoägare.radnr%TYPE,
p_pnr bankkund.pnr%TYPE,
p_knr konto.knr%TYPE,
p_belopp insättning.belopp%TYPE,
p_saldo konto.saldo%TYPE
)
is
begin
insert into kontoägare(radnr) values (p_radnr);
insert into bankkund (pnr) values(p_pnr);
insert into konto(knr, saldo) values(p_knr, NULL);
insert into konto(knr, saldo) values(NULL, p_saldo);
insert into insättning(belopp, datum) values(p_belopp, NULL);
insert into insättning(belopp, datum) values(NULL, SYSDATE);
COMMIT;
dbms_output.put_line('Saldot är nu = ' || p_belopp + p_saldo);
end;
/
如果你想插入一行到一个单独的表(称为deposits
),那么你只需要一个INSERT
语句:
create procedure do_insättning (
p_radnr kontoägare.radnr%TYPE,
p_pnr bankkund.pnr%TYPE,
p_knr konto.knr%TYPE,
p_belopp insättning.belopp%TYPE,
p_saldo konto.saldo%TYPE
)
is
begin
insert into deposits(
radnr, pnr, knr, saldo, belopp, datum
) values (
p_radnr, p_pnr, p_knr, p_saldo, p_belopp, SYSDATE
);
dbms_output.put_line('Saldot är nu = ' || p_belopp + p_saldo);
end;
/
然后你可以使用:
EXECUTE do_insättning(
p_radnr => radnr_seq.NEXTVAL,
p_pnr => '540126-1111',
p_knr => 123,
p_belopp => 200,
p_saldo => 42
);
COMMIT;
注意:不要把COMMIT
语句放在过程中;
COMMIT
,因为它允许您在单个事务中将多个过程链接在一起,并将ROLLBACK
语句作为一个组应用于它们。
当我这样执行时,我得到一个错误的参数数错误:
EXECUTE do_insättning (radnr_seq.NEXTVAL, '540126-1111', 123, 200, sysdate);
这是因为你的过程需要6个参数,而你只提供了5个。