2012-07-26 177 views
0

我有一个存储过程,如果它们存在更新记录,或者如果它们不存在,则添加一条新记录。如何在PL/SQL中使用`SELECT COUNT(*)`作为条件语句?

SQL:

CREATE OR REPLACE PROCEDURE ADDRECORD(ihost VARCHAR, iip VARCHAR) 
AS 
    rc VARCHAR(4000); 
    ROWCOUNT NUMBER; 
BEGIN 
    rc := 'select count(0) from myTable where physical_host = ihost and primary_ip = iip'; 
    ROWCOUNT := to_number(rc, '99'); 

    IF ROWCOUNT = 1 THEN 
     UPSERTRECORD(ihost, iip); 
    ELSE 
     INSERT INTO myTable(PHYSICAL_HOST, PRIMARY_IP) 
     VALUES (ihost, iip); 
     INSERT INTO IP (IP, IP_IND) VALUES (iip, 'V'); 
    END IF;  
END ADDRECORD; 

UPSERTRECORD是被调用另一个存储过程。它工作正常。实际上,错误发生在包含to_number的行上。错误是:

ORA-06502: PL/SQL: numeric or value error: character to number conversion error 

是否有另一种方法可以做到这一点?对不起,我对SQL没有超级经验,但我需要弄清楚这一点。

+1

你什么错误? – 2012-07-26 13:31:47

+0

@ aleksey.berezan我更新了附带错误的详细信息。 – amlane86 2012-07-26 13:36:47

+0

@HolgerBrandt我试过这样:'if rc = 1 then'仍然出错,所以我认为这不是正确的语法。 – amlane86 2012-07-26 13:38:04

回答

2

不要

DECLARE rowcount As Number(38) 
select count(*) INTO rowcount from myTable 
where physical_host = ihost and primary_ip = iip 
+0

谢谢你的建议。 'select count(*)into rowcount'完美运行。 – amlane86 2012-07-26 13:46:29