【问题标题】:Oracle function that returns a bool value if succedeed or failed如果成功或失败返回布尔值的 Oracle 函数
【发布时间】:2011-12-06 08:02:18
【问题描述】:

我正在使用 Oracle 11g 和 ODP.NET、C# 开发应用程序,并且我是 Oracle 存储过程的初学者。 我需要编写一个存储函数,从表中删除一条记录。

假设函数 fu_delete_user(p_user_id) 从表 Users 中删除具有该 ID 的用户。但是,可能由于约束,delete 语句引发了异常。在这种情况下,我希望函数返回 false,否则它应该返回 true。

我应该如何编写这个函数/从 c# 调用它? 谢谢!

【问题讨论】:

  • 到目前为止你有什么?你写过你的oracle函数吗?你有数据库连接吗?
  • Oracle 函数没有理由不能返回布尔值。 C# 能识别这个吗?如果您要删除的只是一条记录,那么您根本不需要过程。
  • @c0deNinja 是的,我有连接,我只需要一个如何编写函数的示例

标签: c# .net oracle stored-procedures


【解决方案1】:

这是代码的一个想法,在您的情况下使用函数会更好,因为它们旨在始终返回一个值。 过程可以通过OUT 参数返回值(如我给出的示例)。

使用函数:

CREATE OR REPLACE
FUNCTION p_delete_user (
   p_user_id IN NUMBER
)
   RETURN BOOLEAN
IS
BEGIN
   DELETE FROM users
     WHERE user_id = p_user_id;
   --
   RETURN true;
EXCEPTION
   WHEN others
   THEN
      -- Log error
      RETURN false;
END p_delete_user;

使用过程:

CREATE OR REPLACE
PROCEDURE p_delete_user (
   p_user_id IN NUMBER,
   p_success OUT BOOLEAN
)
IS
BEGIN
   DELETE FROM users
     WHERE user_id = p_user_id;
   --
   p_success := true;
EXCEPTION
   WHEN others
   THEN
      -- Log error
      p_success := false;
END p_delete_user;

希望对你有帮助...

【讨论】:

    【解决方案2】:

    除非你能保证它只在 pl/sql 中使用,否则你可能想要将返回值设为一个数字(1=true,0=false)。 SQL 不理解布尔值(此外,我的老派大脑以 1 和 0 的形式思考;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 2021-10-21
      • 1970-01-01
      • 2023-03-20
      • 2013-11-07
      相关资源
      最近更新 更多