あなたがそれを呼んだらそうなるでしょう、しかし残念ながらあなたはそうしません。
これは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;
したがって、匿名ブロックを実行すると、既存の生徒が削除され、新しい生徒に置き換えられます。