2012-04-19 64 views
0

在Oracle中,我有一个存储过程查询表并将2个字段写入变量。问题是Oracle在没有任何返回时会抛出错误。这里是我的代码计数为null合计

SELECT COUNT (empno),Name 
    INTO empcount,empname 
    FROM lv_request_header 
    WHERE empno = emp 
    AND request_id = rqid 
    GROUP BY empname 

使用NVL与计数仍然抛出一个错误

ERROR位于第1行:ORA-20000:lv_request_header没有找到ORA-06512:在第13行

+0

它如何可以把一个空白记录到一个变量? – user1345246 2012-04-19 22:51:49

+0

错误在第1行: ORA-20000:找不到lv_request_header ORA-06512:在第13行 – user1345246 2012-04-19 22:54:55

回答

0

错误你发布表明问题在于表lv_request_header不存在,或者该过程的所有者无权访问该表。如果过程所有者以外的用户拥有此表,则可能需要使用模式名称限定表名或为该对象创建同义词。

一般来说,如果您想要处理返回0行的SELECT ... INTO语句,您需要指定您希望两个局部变量在这种情况下具有的值。如果你想empcount为0,empname为NULL,你可以做这样的事情

BEGIN 
    SELECT COUNT (empno),Name 
    INTO empcount,empname 
    FROM lv_request_header 
    WHERE empno = emp 
    AND request_id = rqid 
    GROUP BY empname 
EXCEPTION 
    WHEN no_data_found 
    THEN 
    empcount := 0; 
    empname := NULL; 
END; 
+0

我有更多的代码在select into查询之后。我的问题是异常处理是否一直在程序的底层,或者我的代码是否会在异常处理之后出现? – user1345246 2012-04-19 23:05:50

+0

@ user1345246 - 异常处理程序是'BEGIN ... END'块的一部分。因此,假设您将'SELECT'语句包装在自己的PL/SQL块中,那么执行会继续执行下一行代码,就像我在这里所做的那样。 – 2012-04-19 23:10:27