簡體   English   中英

獲取ORA-06502:PL / SQL:數字或值錯誤:SQL觸發器中的字符到數字轉換錯誤

[英]Getting ORA-06502: PL/SQL: numeric or value error: character to number conversion error in SQL trigger

我在具有MIH_TRIGGER的表上的Web方法適配器中遇到以下錯誤。

(65000/6502)ORA-06502:PL / SQL:數字或值錯誤:字符到數字的轉換錯誤ORA-06512:在“ B2B_OPS_BUILD_ADMIN.MIH_TRIGGER”,第2行ORA-04088:執行觸發器“ B2B_OPS_BUILD_ADMIN.MIH_TRIGGER”時出錯

以下是MIH_TRIGGER的前參考,每當OFFSET列更新時,該參考就會將數據從OPS_BUILD_MIH表更新到OPS_BUILD_AUDITLOG表。

OPS_BUILD_MIH中的OFFSET列為NUMBER

OPS_BUILD_AUDITLOG中的OLD_VALUE和NEW_VALUE列為VARCHAR2(100)。

我試圖在OLD_VALUE和NEW_VALUE varchar2列中插入OFFSET列中的數值,並得到此錯誤。

create or replace TRIGGER "B2B_OPS_BUILD_ADMIN"."MIH_TRIGGER" 
AFTER UPDATE OF OFFSET
ON OPS_BUILD_MIH
FOR EACH ROW
BEGIN
 if ( nvl(:OLD.OFFSET,'xYz#@!0') != nvl(:NEW.OFFSET,'xYz#@!0')) then
  INSERT INTO OPS_BUILD_AUDITLOG
    (TABLE_NAME,
     COLUMN_NAME,
     OLD_VALUE,
     NEW_VALUE,
     UPDATED_BY,
     UPDATED_DTM,
     UUID)
  VALUES  
    ('OPS_BUILD_MIH',
     'OFFSET',
     :OLD.OFFSET,
     :NEW.OFFSET,
     :NEW.LAST_UPDATED_BY,
     :NEW.LAST_UPDATED_DTM,
     :OLD.MIH_ID);
 end if;

END; 

您能否為此提出建議,以便我可以相應地修改上述觸發器。

提前感謝您的幫助。

問候帕尼

正如Gaj所指出的那樣,問題出在您的NVL上-您試圖將非數字字符串與數字進行比較,這是行不通的。

盡管您可以更改NVL來檢查您永遠不會遇到的數值,但是最好將條件更改為:

:OLD.OFFSET != :NEW.OFFSET
or (:OLD.OFFSET is not null and :NEW.OFFSET is null)
or (:OLD.OFFSET is null and :NEW.OFFSET is not null)

這樣,您就不必組成一個實際數值永遠不可能達到的幻數; 假設這個數字甚至存在!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM