我正在使用Oracle并且有一个包含long数据类型的表。我已经发现这是遗产,我应该使用LOB。我现在也认为我可以使用NUMBER(10,0)。
我想将列从long数据类型转换为NUMBER数据类型。
到目前为止,这是我的SQL。
ALTER TABLE BUDGET ADD AMT2 NUMBER(10,0);
UPDATE BUDGET SET AMT2 = AMT;
ALTER TABLE BUDGET DROP COLUMN AMT;
ALTER TABLE BUDGET RENAME COLUMN AMT2 TO AMT;
AMT专栏很长 新的AMT2列是我的新列NUMBER(10,0)
问题是,当将long分配给数字时,我会收到错误。这是在更新行(第2行)这我认为是因为数据截断。
错误是
SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got LONG
列中的所有数据都小于10000,所以我想强制oracle忽略任何数据截断(因为我不相信应该有任何数据)。如何将长数据分配给数字数据列?
由于
答案 0 :(得分:4)
创建一个PL / SQL函数,将Long作为您需要的数据类型。
示例:
create or replace
function longtonumber( p_rowid in rowid)
return number
as
l_data long;
begin
select remarks into l_data from cr_claimheader where rowid = p_rowid;
return to_number(substr( l_data, 1, 4000 ));
end;
然后您需要做的就是在update语句中使用此函数进行更新: 更新am1 = longtonumber(amt2)......等等。
我从askTom得到了这个:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:839298816582