2011-12-06 147 views
0

我正在开发一个使用Oracle 11g和ODP.NET,C#的应用程序,而且我是Oracle存储过程的初学者。 我需要的是写一个存储的函数,它将从表中删除一条记录。Oracle函数在成功或失败时返回bool值

让我们说功能fu_delete_user(p_user_id),它从表Users中删除具有该ID的用户。但是,也许是由于一个约束,delete语句抛出了一个异常。在这种情况下,我希望函数返回false,否则它应该返回true。

我该怎么写这个函数/从c#调用它? 谢谢!

+0

你到目前为止有什么?你写了你的oracle函数吗?你有一个数据库连接? – c0deNinja

+0

没有理由为什么Oracle **函数**不能返回布尔值。 C#能够识别这个吗?如果你所删除的只是一条记录,那么你根本不需要一个程序。 – Ben

+0

@ c0deNinja是的,我有连接,我只需要一个示例如何编写函数 – maephisto

回答

3

这里是代码的一个想法,在你的情况下使用函数会更好,因为它们总是返回一个值。 程序可以通过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; 

希望它可以帮助...

+0

非常感谢! @Ollie! – maephisto

1

除非你能保证这将只能在PL/SQL中使用,那么你可能想让返回值成为一个数字(1 = true,0 = false)。 SQL不理解布尔(除此之外,我的老同学的大脑认为是1s和0s)

相关问题