小编典典

删除语句不删除记录

sql

任何人都知道为什么它不从学生表中删除记录。当表为空并且我先运行匿名块时,它运行良好,但是随后当我再次运行它时,我会得到有关重复主键的错误,但这无关紧要,因为每次我运行该块时,它都应该从中删除所有记录桌子??我是SQL的新手,所以可以提供任何帮助。

我应该补充,该程序似乎运行良好,因为在运行代码时出现dopl。

这是我的功能:

 CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
    BEGIN
    DELETE FROM STUDENTS;
    END;

这是我的程序:

 create or replace PROCEDURE DELETE_ALL_STUDENTS_VIASQLDEV AS
    BEGIN
    dbms_output.put_line('--------------------------------------------');
    dbms_output.put_line('Deleting all student rows');

    END;

这是我正在运行的匿名块,以查看是否起作用:

begin
DELETE_ALL_STUDENTS_VIASQLDEV;
ADD_STUDENT_VIASQLDEV(1,'Fred   Smith');
ADD_STUDENT_VIASQLDEV(2,'Sue    Davis');
ADD_STUDENT_VIASQLDEV(3,'Emma   Jones');
end;

阅读 192

收藏
2021-04-15

共1个答案

小编典典

“我的功能不执行删除吗?”

如果您调用它,它会,但是a,您不会。

这不是SQL问题,而是逻辑问题。如果我们不洗碗,那碗就很脏。同样,如果您不调用删除记录的例程,则不会删除记录。

您需要在过程中调用该函数。不知道为什么要使它成为函数,并且无论如何它都不会编译,因为它没有RETURN子句。所以,我们也修复它。

CREATE OR REPLACE FUNCTION DELETE_ALL_STUDENTS RETURN NUMBER AS
BEGIN
    DELETE FROM STUDENTS;
    return sql%rowcount; -- how many rows were deleted
END;
/

现在我们称之为:

create or replace PROCEDURE DELETE_ALL_STUDENTS_VIASQLDEV AS
    n number;  
BEGIN
    dbms_output.put_line('--------------------------------------------');
    dbms_output.put_line('Deleting all student rows');
    n := DELETE_ALL_STUDENTS;
    dbms_output.put_line('No of students deleted = '|| to_char(n));
END;

因此,当您运行匿名块时,现有学生将被删除并用新学生替换。

2021-04-15