1

我正在使用 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 列是 LONG 新的 AMT2 列是我的新列 NUMBER(10, 0)

问题是当将 long 分配给一个数字时,我得到一个错误。这是在更新行 (line2) 我认为这是因为数据截断。

错误是

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

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

谢谢

4

1 回答 1

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

于 2012-08-29T14:34:13.197 回答