首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的if语句返回语句句柄未执行错误

嵌套的if语句返回语句句柄未执行错误
EN

Stack Overflow用户
提问于 2012-05-06 04:37:34
回答 1查看 2.1K关注 0票数 0

我有一个具有两个输入、两个输出参数和5个sys_refcursors的存储过程。我有一个成功的IF/ELSE,我通过调用不同的存储proc打开了这些游标,但现在需要第三个选项,即另一个存储proc调用。第三种选择实际上与第二种选择相同,只是有一点不同。

我非常确定我的嵌套if语句是正确的,但当它试图从this new调用中获取游标时,我总是得到未执行的ora-24338语句句柄。

有问题的存储过程调用是中间的调用。

代码语言:javascript
复制
create or replace Procedure  procedure_name (
    OutVar out varachar2,
    Outvar2  out number,
    inParam1 date,
    REf-Cur1 in out sys_refcursor,
    REf-Cur2 in out sys_refcursor,
    REf-Cur3 in out sys_refcursor,
    REf-Cur4 in out sys_refcursor,
    REf-Cur5 in out sys_refcursor
) 
is
  tIsBindVar1 varchar2(100);
  tIsBindVar2 varchar2(100);
  tOutVar1    varchar2(100);
  TOutVar2    varchar2(100);
Begin
  Select Max(T.Var1) 
    into tIsBindVar1
    From table1 
   where T.aField = inParam1;

Select Function_Name (inParam1) 
  into tIsBindVar2 
  from Dual;

IF tIsBindVar1 is NOT NULL 
THEN
  Select P.Field_A P.Field_B 
    INTO tOutVar1, tOutVar2
    FROM table1 
  WHERE P.Field_A = inParam1;

  Stored_Proc_One (tInParam => tOutVar1, 
                   inParam1 => inParam1, 
                   5 cursors => 5 cursors);
ELSE 
  IF tIsBindVar2 = 'Y' 
  THEN
    Stored_Proc_Two (inParam1 => inParam1, 
                     5 cursors => 5 cursors);
  ELSE 
    Stored_Proc_Three ();
    Stored_Proc_Two ( inParam1 => inParam1, 5 cursors => 5 cursors);
  END IF;
END IF;

SELECT tOutVar1, tOutVar2 
  INTO OutVar1, OutVar2 
  FROM DUAL;

一些快速的额外注解。

Stored_procs 1和2是直接的数据抓取,没什么特别的,存储的proc 3根据一些输入参数(没有列出)生成一些数据,存储的proc 2被调用来收集。

我可以更改这些存储的proc调用,但我总是从中间的调用中得到相同的错误。这包括以任何顺序更改条件。

我试图简化代码,因为我不是在寻找任何人来为我做这项工作,而是试图了解问题是什么。

希望我没有遗漏任何重要的东西,但我认为问题在于我如何做嵌套的if。我当然不认为问题出在存储过程本身,因为我说过,当我改变顺序时,它们就会工作。

所以如果是长篇大论,很难读懂代码。我会试着找出他们保存编辑信息的地方,并把它清理干净。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-06 04:52:52

tIsBindVar1tIsBindVar2的值是什么

您真的希望IF语句的结构与我格式化的一样吗?还是你真的想

代码语言:javascript
复制
IF  tIsBindVar1 is NOT NULL 
THEN
  <<do something>>
ELSIF tIsBindVar2 = 'Y' 
THEN
  <<do something else>>
ELSE 
  <<do one more thing>>
END IF;

如果您希望确保在所有情况下至少遵循一条路径,则需要一个IF ELSIF ELSE

顺便说一句,不需要所有这些SELECT FROM dual语句。您可以在PL/SQL中简单地赋值变量

代码语言:javascript
复制
tIsBindVar2 := Function_Name (inParam1);

代码语言:javascript
复制
tOutVar1 := OutVar1;
tOutVar2 := OutVar2;

更加传统。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10465798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档