2012-07-26 123 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