在 Oracle 动态 SQL 之后如何继续

Posted

技术标签:

【中文标题】在 Oracle 动态 SQL 之后如何继续【英文标题】:How to continue after in Oracle Dynamic SQL 【发布时间】:2016-06-13 13:14:41 【问题描述】:

是否可以在引发异常后继续。 我生成了一个与我想要执行的代码类似的代码示例。我只能从第一个查询中获取空值,其他查询总是让我得到一些回报。

Case Username = InUser Then
Execute Immediate 
'select Username from Users where Fullname = ' || '''' || InUser || '''' into Varuser;
<< go_on >>
Execute Immediate    
'select Orderno from orders where requester = ' || '''' || VarUser || '''' into VarOrderno

--这里会发生其他事情和案例。

End Case;

EXCEPTION WHEN NO_DATA_FOUND THEN
VarUser := InUser;
Goto go_on;

我知道,如果第一个动态 sql 没有提供任何内容,那么我使用 InUser。 有什么可能吗?

【问题讨论】:

【参考方案1】:

用 begin/end 包装动态选择并在那里处理异常:

  Case Username = InUser Then

    begin
      Execute Immediate 
        'select Username from Users where Fullname = ' || '''' || InUser || '''' into Varuser;
    EXCEPTION WHEN NO_DATA_FOUND THEN
      VarUser := InUser;
    end;

    Execute Immediate    
      'select Orderno from orders where requester = ' || '''' || VarUser || '''' into VarOrderno

  End Case;

【讨论】:

以上是关于在 Oracle 动态 SQL 之后如何继续的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 如何使用动态绑定参数定义动态 SQL?

如何在 oracle 中使用动态 sql 创建记录类型?

如何在oracle存储过程中执行动态sql语句

如何在 sqlplus 中调试 Oracle 动态 sql?

Oracle - 如何使用动态绑定参数定义动态SQL?

如何在 Oracle SQL 语句中重用动态列?