1

Oracle を使用しており、長いデータ型を含むテーブルがあります。その後、これがレガシーであり、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) の新しい列です

問題は、ロングを数値に割り当てるとエラーが発生することです。これは更新行 (line2) にあります。これは、データの切り捨てが原因であると推測されます。

エラーは

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

列内のすべてのデータは 10000 未満であるため、オラクルにデータの切り捨てを強制的に無視させたいと考えています (存在する必要があるとは思わないため)。長いデータを数値データ列に割り当てるにはどうすればよいですか?

ありがとう

4

1 に答える 1

4

必要なデータ型として Long を取得する PL/SQL 関数を作成します。

例:

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 ステートメントで次の関数を使用して更新するだけです: update am1=longtonumber(amt2)...etc.

私はaskTomからこれを得ました: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:839298816582

于 2012-08-29T14:34:13.197 に答える