从删除pl/sql过程中的完整表中删除:ORACLE

从删除pl/sql过程中的完整表中删除:ORACLE,oracle,plsql,Oracle,Plsql,我需要使用pl/sql过程从数据库中删除选择性行。但它会删除所有行,而不考虑where子句中的内容 The student table is:- id name class 1 danial 9 2 patrick 9 3 paul 8 create or replace procedure delete_student (stId in NUMBER)

我需要使用pl/sql过程从数据库中删除选择性行。但它会删除所有行,而不考虑where子句中的内容

  The student table is:-
  id    name        class
  1    danial        9
  2    patrick       9
  3    paul          8

             create or replace procedure delete_student (stId in NUMBER)
             begin
                  delete from students where class = stId;
                  commit;
             end;

我从jsf应用程序发送调用这个过程,比如说9作为参数。但是,此过程实际上删除了学生表中的所有三行,而与DBMS_OUT控制台中正确输出的参数stId的值无关。我做错了什么。

参数的名称是否与表中列的名称一致


最好使用前缀(如p_、v_)命名参数和变量,这样在区分列名和变量/参数名时,SQL语句就不会有歧义。

您确定要传递9吗。您是否尝试在某处记录传递的值?是的,先生。100%. 发送9时打印9,发送8时打印8。但是删除所有三行,不管是8行还是9行。我甚至在过程中很难做到,它仍然会删除所有行。这很有趣,我没有复制您的案例。除非正在执行其他语句(您向我们展示的语句除外),否则它不应该删除所有行。我也会检查桌子上是否有任何触发器,或者等待更多的专家输入,先生,确实如此。我可以一步一步上传图片。这真是奇怪的行为。没有触发器。在pl/sql中,我写道,“从class=8的学生中删除”;并运行了删除所有三行的过程。这里显示的示例运行正常。所以问题出在其他地方。先生,这意味着我面临的行为不是真实的。这意味着我的pl/sql过程应该删除在参数中发送的内容,而不是整个表,对吗?但事实并非如此。这个答案应该是一个评论。