2012-05-16 35 views
0

我有一個pl/sql匿名塊的問題。雖然我可以顯示使用select查詢得到的變量,但如果在更新語句中使用它,則會出現轉換錯誤。PL/SQL:數字或值錯誤%s錯誤將字符轉換爲數字

我的代碼如下所示:

set serveroutput on 

DECLARE 

var1 scheme.table.column1%type; /* number[8,0] */ 
var2 scheme.table.column2%type; /* number[8,2] */ 

BEGIN 

/* return simple value */ 
select t.column1, t.column2 
into var1, var2 
from scheme.table t 
where <condition> 

DBMS_OUTPUT.PUT_LINE('Var1 is: ' || var1 || ' Var2 is:' || var2); /* fine!!*/ 

update scheme.table 
set scheme.table.column1 = var1 + 1 
where scheme.table.column2 = var2; /* that is line error*/ 

END; 

/* 
ORA-06502: PL/SQL: error : error de conversión de carácter a número numérico o de valor 
ORA-06512: en línea 58 
06502. 00000 - "PL/SQL: numeric or value error%s" 
*/ 

能somenone幫助我嗎?

+0

var1和var2的值是什麼給你一個錯誤? – shareef

+0

var1 = 9 var2 = 33 – dvdsantana

回答

0

代碼是正確的,與編譯器的SQLDeveloper問題。

+2

請指明什麼問題? – shareef

1

對於column2 = val2的記錄,難道是var1 + 1的結果數大於數[8,0]嗎?

您使用「條件」進行查詢,但使用「column2 = var2」進行更新。因此,你可能會更新更多的行,而不是你想象的那樣。

+0

謝謝Rene。我終於解決了它。代碼是正確的,但沒有sqldeveloper。我成功地編譯了相同的代碼,所以我找錯了地方。 – dvdsantana

0

ORA-06502:PL/SQL:數字或值錯誤字符串 原因:發生算術,數字,字符串,轉換或約束錯誤。例如,如果嘗試將值NULL分配給聲明爲NOT NULL的變量,或者嘗試將大於99的整數分配給聲明爲NUMBER(2)的變量,則會發生此錯誤。 操作:更改數據,操作方式或聲明方式,以便值不違反約束條件。

我認爲你的錯誤是第二選擇。

reference to you error ORA-06502

+0

@ user1398399請提供創建表腳本,特別是其約束 – shareef

+0

謝謝shareef。我終於解決了它。代碼是正確的,但沒有sqldeveloper。我成功地編譯了相同的代碼,所以我找錯了地方。 – dvdsantana

相關問題