0

レコードが存在する場合は更新し、存在しない場合は新しいレコードを追加するストアド プロシージャがあります。

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の経験が豊富ではありませんが、これを理解する必要があります.

4

1 に答える 1

2

行う

DECLARE rowcount As Number(38)
select count(*) INTO rowcount from myTable 
where physical_host =  ihost and primary_ip = iip
于 2012-07-26T13:33:33.717 に答える