执行过程时参数的数目或类型错误



希望有人能帮助我,我一直得到这个错误,但我不确定我做错了什么。我创建了这个过程,它将以下信息插入到银行的"存款"表中:序列号、个人号码、账号、存款金额和日期)。该程序还应该打印出新存款后的总余额。

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,kontoinsättning)中,并在kontoinsä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个。

相关内容

最新更新