将LONG数据类型列分配给NUMBER数据类型列

时间:2012-08-29 14:21:25

标签: sql oracle type-conversion

我正在使用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列是我的新列N​​UMBER(10,0)

问题是,当将long分配给数字时,我会收到错误。这是在更新行(第2行)这我认为是因为数据截断。

错误是

SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got LONG

列中的所有数据都小于10000,所以我想强制oracle忽略任何数据截断(因为我不相信应该有任何数据)。如何将长数据分配给数字数据列?

由于

1 个答案:

答案 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