2012-11-27 38 views
0

LONGVARCHAR的兩列我有TABLE1COL1列,COL2定義爲甲骨文LongVarChar如何減去在Oracle

每當用戶將一條記錄加載到TABLE1時,COL1將具有舊值,COL2將具有舊值+新值。即

對於前:

COL1   COL2 
       Bat 
Bat    Bat Ball 
Bat Ball  Bat Ball Wicket 
Bat Ball Wicket Bat Ball Wicket Stump 

要獲得唯一的新價值,我計劃從COL1 contents..I刪除COL2的內容覺得這是一個非常糟糕的想法..

我嘗試了通常的「 - 」運營商,它說"Expected Numeric but received CLOB"

但沒有任何一個更好的主意或如何實現這一目標?

非常感謝

+1

'LongVarChar'不是Oracle中的數據類型。你的意思是'CLOB'?或'LONG'?或'VARCHAR2'?或者是其他東西? –

回答

2

假設你的意思是VARCHAR2,並(在你的例子),每個舊值由額外的空間分離,然後這樣的事情應該工作:

SELECT SUBSTR(col2, NVL(LENGTH(col1)+2,0)) "New Value" FROM TABLE1 

例如:

select substr('Bat', nvl(length(null)+2,0)) from dual; 

會導致 '蝙蝠'

select substr('Bat Ball', nvl(length('Bat')+2,0)) from dual; 

導致 '球'


但如果你實際上是在談論一個CLOB數據類型,然後代:

dbms_lob.substr(colX, 4000, 1) 

而不是COLX(其中X爲1或2)

[這會給你CLOB的第4000個字節 - 爲了獲得更多,你必須使用PL/SQL]

+0

優秀的Gerrat ..它在2分鐘內解決了問題..感謝您的時間 – javanoob