2014-11-04 56 views
0

三種不同的功能。根據相同的數據類型返回到轉儲() 預言 - 到RAW添加RAW(或BINARY到BINARY)

select 
dump(utl_raw.cast_to_raw('j')), 
dump(utl_raw.cast_from_number(1)), 
dump(utl_raw.cast_from_binary_integer(1)) 
from dual; 

DUMP(UTL_RAW.CAST_TO_RAW('J')) 
----------------------------------------------------- 
DUMP(UTL_RAW.CAST_FROM_NUMBER(1)) 
----------------------------------------------------- 
DUMP(UTL_RAW.CAST_FROM_BINARY_INTEGER(1)) 
----------------------------------------------------- 
Typ=23 Len=1: 106 
Typ=23 Len=2: 193,2 
Typ=23 Len=4: 0,0,0,1 

...然而它們中的非可相加在一起。

select 
utl_raw.cast_to_raw('j') + 
utl_raw.cast_from_number(1), 
utl_raw.cast_from_number(1) + 
utl_raw.cast_from_binary_integer(1), 
utl_raw.cast_from_binary_integer(1) + 
utl_raw.cast_to_raw('j') 
from dual; 

ORA-00932: inconsistent datatypes: expected NUMBER got BINARY 

如何在RAW上執行算術運算,特別是 - 將RAW/BINARY添加到RAW/BINARY?

編輯:此問題源於需要遍歷字母表。我發現如何將1加入ascii代碼,然後以更大的字母返回,這並不那麼明顯,例如。 'a'+ 1 ='b'

+0

你會期望將多個'RAW'值加在一起的結果是什麼?如果你有一個結果,你會怎麼做? – 2014-11-04 21:10:33

+0

在回答你的問題時,我編輯了我的問題 – 2014-11-04 21:15:07

回答

1

您不想將二進制值加在一起。如果您只想遍歷字母表,只需使用ASCIICHR函數。例如

select ascii('a') ascii_code, 
     ascii('a') + 1 next_ascii_code, 
     chr(ascii('a') + 1) next_char 
    from dual 

會告訴你一個小寫的ASCII碼(這將是97假設你的數據庫字符集是US7ASCII的超集),下一個字符(98)的ASCII碼,而字符集中的下一個字符(小寫字母b)。如果你想遍歷循環中的字母表

FOR i IN 1 .. 26 
LOOP 
    dbms_output.put_line(chr(ascii('a') + i - 1)); 
END LOOP; 
+0

Justin,謝謝你的回答,但如果有人會展示如何添加RAW和BINARY數據類型,我會接受一個答案。如果數據類型相同,那麼我怎麼不能添加它們?也許「+」運算符期望NUMBER? – 2014-11-05 08:47:31

+0

@JakubPietkun - 添加兩個「原始」值會意味着什麼?這將如何有用?加法運算符只對數字數據類型有意義。 – 2014-11-05 15:58:02

+0

我明白了,我認爲這只是關於我只是固執,並且想表明有一種數據類型不能被歸結在一起。我認爲這是「加」運營商的問題。它期望數值,這就是錯誤的原因「預計NUMBER得到了BINARY」。接受答案。 – 2014-11-05 22:48:07