如何在表类型表(矩阵表)中使用EXISTS方法来查找是否存在值

时间:2017-08-11 10:20:28

标签: sql oracle plsql

以下脚本用于为表类型的表创建和添加值。 如何在此表中使用EXISTS方法来确定单元格中是否存在值?

DECLARE
   TYPE RecType IS RECORD
   (
      value1   NUMBER,
      value2   NUMBER,
      value3   NUMBER
   );
   TYPE TblType IS TABLE OF RecType INDEX BY PLS_INTEGER;  
   TYPE TblOfTblType IS TABLE OF TblType INDEX BY PLS_INTEGER;
   matrix   TblOfTblType;

BEGIN
   /*Writing the data*/
   FOR i IN 4 .. 6 LOOP
      FOR j IN 1 .. 3 LOOP
         matrix (i) (j).value1 := i * j;
         matrix (i) (j).value2 := i + j;
         matrix (i) (j).value3 := i - j;
      END LOOP;
   END LOOP;
END;

1 个答案:

答案 0 :(得分:2)

您需要首先检查该行是否存在,然后才检查该行中是否存在该列(或者x是y,还是i,然后是j,或者您想要识别一个单元格)。

例如,要检查示例中是否存在单元格(1,2):

  if matrix.exists(1) and matrix(1).exists(2) then
    dbms_output.put_line('Yes');
  else
    dbms_output.put_line('No');
  end if;

输出'否'。

并检查是否存在单元格(6,3):

  if matrix.exists(6) and matrix(6).exists(3) then
    dbms_output.put_line('Yes');
  else
    dbms_output.put_line('No');
  end if;

输出'是'。

请注意,这是两个步骤;如果matrix.exists(1)为假,则您不会尝试查找matrix(1).exists(2)。如果你没有进行第一次检查,只做了:

  if matrix(1).exists(2) then
    dbms_output.put_line('Yes');
  else
    dbms_output.put_line('No');
  end if;

您获得ORA-01403: no data found个例外。