我正在开发一个使用Oracle 11g和ODP.NET,C#的应用程序,而且我是Oracle存储过程的初学者。 我需要的是写一个存储的函数,它将从表中删除一条记录。Oracle函数在成功或失败时返回bool值
让我们说功能fu_delete_user(p_user_id),它从表Users中删除具有该ID的用户。但是,也许是由于一个约束,delete语句抛出了一个异常。在这种情况下,我希望函数返回false,否则它应该返回true。
我该怎么写这个函数/从c#调用它? 谢谢!
我正在开发一个使用Oracle 11g和ODP.NET,C#的应用程序,而且我是Oracle存储过程的初学者。 我需要的是写一个存储的函数,它将从表中删除一条记录。Oracle函数在成功或失败时返回bool值
让我们说功能fu_delete_user(p_user_id),它从表Users中删除具有该ID的用户。但是,也许是由于一个约束,delete语句抛出了一个异常。在这种情况下,我希望函数返回false,否则它应该返回true。
我该怎么写这个函数/从c#调用它? 谢谢!
这里是代码的一个想法,在你的情况下使用函数会更好,因为它们总是返回一个值。 程序可以通过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;
希望它可以帮助...
非常感谢! @Ollie! – maephisto
除非你能保证这将只能在PL/SQL中使用,那么你可能想让返回值成为一个数字(1 = true,0 = false)。 SQL不理解布尔(除此之外,我的老同学的大脑认为是1s和0s)
你到目前为止有什么?你写了你的oracle函数吗?你有一个数据库连接? – c0deNinja
没有理由为什么Oracle **函数**不能返回布尔值。 C#能够识别这个吗?如果你所删除的只是一条记录,那么你根本不需要一个程序。 – Ben
@ c0deNinja是的,我有连接,我只需要一个示例如何编写函数 – maephisto