【问题标题】:How to return the amount of rows deleted (delete all statement) in a function?如何返回函数中删除的行数(删除所有语句)?
【发布时间】:2017-09-04 05:45:34
【问题描述】:

我目前正在尝试在 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;
 /

【问题讨论】:

  • 你不是在写 MySQL 代码,所以请不要使用[mysql] 标签。
  • 道歉 :( 下次不加这个了,有什么办法可以去掉这个帖子的标签吗?
  • 您可以编辑自己的问题。
  • 哦,是的,现在可以看到它了 - 看起来你继续修改它 - 谢谢!抱歉,有点菜鸟。

标签: sql oracle plsql


【解决方案1】:

你没有用任何东西填充v_count 变量,所以它返回一个空值。

有一个内置的 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%rowcount分配给一个变量
猜你喜欢
  • 1970-01-01
  • 2017-09-11
  • 2021-12-05
  • 2017-03-22
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多