sql - 执行过程时参数的数量或类型错误
问题描述
希望有人可以帮助我,我一直收到这个错误,但我不确定我做错了什么。我创建了这个程序,它将以下信息插入到银行的“存款”表中:序列号、个人号码、帐号、存款金额和日期)。该程序还应该在新存款后打印出总余额。
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;
/
我收到“数字或值错误:字符到数字的转换错误”。
解决方案
我创建了这个程序,将以下信息插入银行的“存款”表中
不,它不会将数据插入到一个表中;它将它插入到四个不同的表(kontoägare
、和)中bankkund
,并在每个表和表中创建 2 行。konto
insättning
konto
insättning
您的查询实际上是:
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 个。
推荐阅读
- regex - 查找使用带有替代方法的正则表达式
- python - 如何在Python中的同一窗口位置依次显示图像?
- python - 删除 Pandas 列名中的小数
- java - org.apache.poi.hssf.record.RecordFormatException:未找到WINDOW2
- python - 在 Estimator SessionRunHook 中更改 tf.Variable 值
- javascript - JSON.parse无效字符与有效JSON?
- json - 在按钮单击时更改特定项目的值
- sql - 在 sql 中 PIVOT 下表
- javascript - 如何从 React.FormEvent 中检索表单值
? - android - 如何减小 android 本机共享库(.so 文件)的大小?