Oracle存储了删除程序

时间:2014-04-19 09:07:25

标签: sql oracle stored-procedures plsql

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的行,我的程序有什么问题?

3 个答案:

答案 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;