sql - 如何在函数中返回删除的行数(删除所有语句)?

标签 sql oracle plsql

我目前正在尝试在 pl/sql 中创建一个函数,该函数从 Customer 表中删除所有 Customer 行,然后返回删除的总行数的值。然后是一个程序来运行它,但是目前我在 DOPL 中得到的结果(成功时)是“删除所有已删除的客户行”,我该如何更改它以便程序中的 DOPL 返回已删除的行数函数中的值,例如“删除了 5 行”

这是我当前的代码(提前致谢):

CREATE OR REPLACE FUNCTION DELETE_ALL_CUSTOMERS_FROM_DB RETURN NUMBER 
AS vCount NUMBER;
BEGIN
     DELETE FROM Customer;
     RETURN vCount;
EXCEPTION
     WHEN OTHERS THEN
         RAISE_APPLICATION_ERROR(-20000, SQLERRM);
END;
 /

CREATE OR REPLACE PROCEDURE DELETE_ALL_CUSTOMERS_VIASQLDEV AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('--------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Deleting all Customer rows');
    DBMS_OUTPUT.PUT_LINE(DELETE_ALL_CUSTOMERS_FROM_DB || ' rows deleted');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
 /

最佳答案

您没有用任何东西填充 v_count 变量,所以它返回 null。

有一个 Oracle 内置的 SQL%ROWCOUNT,它给出了受前面的 DML 语句影响的行数。因此,您只需将删除功能更改为:

CREATE OR REPLACE FUNCTION DELETE_ALL_CUSTOMERS_FROM_DB
 RETURN NUMBER 
AS 
BEGIN
     DELETE FROM Customer;
     RETURN sql%rowcount;
EXCEPTION
     WHEN OTHERS THEN
         RAISE_APPLICATION_ERROR(-20000, SQLERRM);
END;
/ 

关于sql - 如何在函数中返回删除的行数(删除所有语句)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46030930/

相关文章:

java - 将 PROPAGATION_REQUIRED_NEW 与两个单独的 spring bean 一起使用时的 Oracle 数据库锁定

sql - 生成 PL/SQL 脚本以从许多相关表中创建记录副本

plsql - dbms_output 语句中的单引号?

sql - Oracle - WHERE 子句中的列 NUMBER(38) - 数据包含逗号

MySQL让玩家在日期之间排名

oracle - PL/SQL oracle管理访问控制

sql - Oracle SQL,使用 &input 的 SELECT 子句

sql - 从 bool 列 postgresql 创建 varchar 列

mysql - 繁重的存储过程可以等待另一个 SP 完成吗?

sql - 1Z0-007 考试题