当前位置: 首页 > 面试题库 >

检查SYS_REFCURSOR是否为空的最佳方法

董嘉祯
2023-03-14
问题内容

我有一个游标,带有来自选择的值,我想根据我是否发现任何行来做点什么。

recs_Table SYS_REFCURSOR;

begin

    open recs_Table for
       select * from table1, table2;


    if recs_Table%found then
        --do this
    else
        --do that
    end if;

end;

这似乎不起作用,有帮助吗?


问题答案:

您需要在使用%FOUND属性之前对游标执行FETCH。将您的代码更改为类似

DECLARE
  recs_Table SYS_REFCURSOR;
  nTable_1_value  NUMBER;
  nTable_2_value  NUMBER;
begin

    open recs_Table for
       select * from table1, table2;


    FETCH recs_Table INTO nTable_1_value, nTable_2_value;

    if recs_Table%found then
        --do this
    else
        --do that
    end if;

end;

请注意,您可能需要将变量添加到FETCH语句的INTO子句中,在TABLE1和TABLE2中的每一列都需要添加一个变量。还要注意,编写此游标的方式可能会获得比预期更多的返回行。因为没有指定连接条件,所以您将获得所谓的笛卡尔连接,其中TABLE1中的每一行都被连接到TABLE2中的每一行-
因此,您将获得的行数是(TABLE1中的行数)* (表2中的行数)。

一个可能更简单的方法是使用游标FOR循环,如下所示:

DECLARE
  bData_found  BOOLEAN := FALSE;
begin
  FOR aRow IN (select * from table1, table2)
  LOOP
    -- If the program gets here, it means a row was fetched

    -- do this

    bData_found := TRUE;

    EXIT;  -- if you only care if data was found and don't want to 
           -- process all the rows
  END LOOP;

  IF NOT bData_found THEN
    -- do that
  END IF;
end;

分享并享受。



 类似资料:
  • rank ▲ ✰ vote url 15 789 144 1269 url 检查列表是否为空的最好方法 例如,传递下面: a = [] 我怎么检查a是空值? if not a: print "List is empty" 用隐藏的空列表的布尔值才是最Pythonic的方法.

  • 我们使用ArrayList、hashmap等集合&更多。 另外有时候我们也需要检查列表是否为空,所以我们通常会通过以下几种方式进行检查 哪种情况是最好的,或者考虑到程序执行的性能,我们需要将这些情况进行一些组合吗?

  • 问题内容: 哪种方法可以更好地检查属性是否存在? Jarret Hardie提供了以下答案: 我看到它也可以通过以下方式完成: 一种方法通常比其他方法使用更多吗? 问题答案: 没有“最佳”方法, 因为您永远不会仅仅检查属性是否存在;它始终是某些较大程序的一部分。有几种正确的方法,一种值得注意的不正确的方法。 这是演示此技术失败的演示: 输出: 大多数情况下,您不想惹恼。这是用于执行特殊操作的特殊属

  • 问题内容: 在调用对象的函数之前,我需要检查对象是否为null,以避免引发。 最好的方法是什么?我考虑过这些方法。 哪一种是Java最佳编程实践? 问题答案: 方法4是最好的。 将使用短路评估,这意味着如果a的第一个条件为假,则评估结束。

  • 我试图检查某个是否为元音。做这件事最好的方法是什么?