【发布时间】:2015-07-16 14:36:09
【问题描述】:
我对 oracle 数据库的东西很陌生。有一个其他人编写的 PL/SQL 过程并存储在我正在访问的数据库中。我希望我的程序执行它并检索结果。执行是有效的。但是我无法检索结果。显然我做得不对,但我在文档中找不到正确的方法。
这里是存储过程的要点(去掉了多余的行)
procedure ISDRAWINGVALID(DWGNO_IN in VARCHAR2) is
valid BOOLEAN;
begin
-- do some stuff to see if the drawing is valid
IF <some stuff> THEN
valid := TRUE;
ELSE
valid := FALSE;
END IF;
END ISDRAWINGVALID;
我的程序向数据库发出以下命令以执行并检索返回。
BEGIN ISDRAWINGVALID( <drawingnumber> ); END;
SELECT ISDRAWINGVALID.valid FROM DUAL;
第一行工作正常,程序执行并具有预期的效果。 第二行返回错误,无效标识符“ISDRAWINGVALID.valid”
显然我没有使用正确的方法来检索值。有人可以告诉我吗?
谢谢
【问题讨论】:
-
您发布的程序没有返回任何内容。一旦过程完成执行,局部变量就会超出范围。您无法在程序之外访问它。如果您希望该过程向调用者返回某些内容,则该过程需要执行诸如声明
OUT参数之类的操作。根据“做一些事情”是什么,您可能希望创建一个返回boolean而不是过程的函数。 -
您不能从过程中返回结果。您可以设置一个 OUT 参数而不是局部变量,然后您的调用者可以查看它。或者您可以改用函数,但 Oracle SQL 没有布尔类型,因此您仍然只能从 PL/SQL 调用它。一个函数看起来仍然更合适,除非你没有显示的代码正在修改任何数据;但是您是否坚持已有的程序,这似乎有点毫无意义?