oracle pl / sql比较函数中的数据库值

时间:2013-06-18 17:40:17

标签: oracle function exception

我有几个名字,如:

john arnold 
edward albert 

我有一个这样的名字词典:

name 
---------------------------  
john   
arnold 
edward 

我写了一个函数来将名称分成几部分,并将每个部分与字典进行比较(因此edward与字典进行比较,然后albert将与字典进行比较)。

我的问题是我想返回字典中不存在的所有名称的连接字符串,例如,如果名称到达如下:

john albert adam gerard

它应该返回:

adam gerard

我把这些名字放在一个数组中并像这样搜索它们:

select name into name_base from usr_pre_pub.nd where name=names(ix);

但是当在字典上找不到名称时,执行会暂停,并且不会继续分析数组中的以下名称。

john (found)  albert(found) adam (not found, exception no data found) gerard (not analysed)

我删除了捕获部分功能的异常:

   exception     
   when no_data_found then
       return ix;
     when others then
     return 'others';
       -- consider logging the error and then re-raise
       raise;

但是它会停止并且不会返回值。

我不知道从哪里开始,希望你能帮助我解决这个问题。

1 个答案:

答案 0 :(得分:2)

看起来你没有在循环中捕获异常。假设你有一个循环迭代遍历数组中的每个名称,你的循环应该看起来像这样。

LOOP
   BEGIN
      SELECT name
        INTO name_base
        FROM usr_pre_pub.nd
       WHERE name = names (ix);
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         --store the name in variable/array for returning, as not found
      WHEN OTHERS
      THEN
         --do something else
   END;
END LOOP;