CREATE TABLE kategorijos(
kat_id number(11) not null,
kat_pavadinimas varchar(255),
CONSTRAINT kategorijos_pk PRIMARY KEY(kat_id)
);
create or replace procedure delete_kategorijos (kat_id number)
is
begin
delete from kategorijos where kat_id = kat_id;
end;
我打电话给程序:
BEGIN
delete_kategorijos(1);
END;
此过程删除数据库中的所有记录,但它确实必须只删除kat_id = 1的行,我的程序有什么问题?
答案 0 :(得分:3)
您正在使用以下代码行删除记录
delete from kategorijos where kat_id = kat_id;
在有条件的情况下,您可以找到
where kat_id = kat_id;
这总是正确的,因为您正在比较相同的值,这就是删除所有记录的原因
答案 1 :(得分:1)
最好为参数指定另一个名称,如下所示:
创建或替换程序delete_kategorijos(l_kat_id number) 是 开始 从kategorijos删除kat_id = l_kat_id; 端;
但请考虑以下事项: - 如果kat_id = 1不存在怎么办? - 如果记录被另一个交易锁定怎么办?
答案 2 :(得分:1)
最佳做法是始终使用别名。
create or replace procedure delete_kategorijos (kat_id number)
is
begin
delete from kategorijos k where k.kat_id = delete_kategorijos.kat_id;
end;