2011-10-12 31 views
1

我试图更新表时,l_num等于2和一定的条件得到满足。该条件实际上没有针对定义的ID的单个记录。异常没有数据发现从选择1从双重

因为我使用了从双选择1。问题是l测试总是返回0(意味着没有找到数据)。

任何帮助将受到欢迎。

下面的代码:

CASE l_num 
    WHEN 2 
    THEN 
     BEGIN 
      SELECT 1 
      INTO l_test 
      FROM DUAL 
      WHERE NOT EXISTS (
        SELECT 1 
         FROM table t1, table t2 
        WHERE t1.id = l_id 
         AND t1.status = 'D' 
         AND t1.code = t2.code); 
     EXCEPTION 
      WHEN NO_DATA_FOUND 
      THEN 
      l_test := 0; 
     END; 
                          DBMS_OUTPUT.put_line (' l_test when pr l_num =2 :' || l_test); 
     IF l_test = 1 
     THEN 
      UPDATE .... 

感谢名单

回答

2

你不能指望只在您的表匹配的数量?

(另外,你应该开始使用ANSI SQL语法不老的SQL-86)

 SELECT count(1) 
     INTO l_test 
     FROM table t1 
     INNER JOIN table t2 USING (code) 
     WHERE t1.id = l_id 
     AND t1.status = 'D'; 

如果计数为零,则没有匹配的ID的,如果它大于零,则匹配存在。

这也简化了您的代码,因为您不必检查NO_DATA_FOUND,因为count始终会返回一个值(零个或多个)。

希望它有帮助...

+0

我会改变count(1)来计算(*),并添加rownum <= 1。 –