1

この問題について私を助けてくれませんか(Teradataのドキュメントでは見つかりませんでしたが、正直言って少し圧倒されます):私のテーブルにはこの列-BAN DECIMAL(9,0)-があり、今は次のように変更したいと思います--BAN DECIMAL(15,0)COMPRESS 0.-どうすればよいですか?とにかく、COMPRESS制約0またはその他の意味は何ですか?これが可能であることを願っています。新しいテーブルを作成してから、古いテーブルからデータをコピーする必要はありません。テーブルは非常に大きいです-そのテーブルからCOUNT(*)を実行すると、次のエラーが発生します:計算中に2616の数値オーバーフローが発生しました

4

3 に答える 3

2

次の 3 つの異なる質問をしました。

  1. DECIMAL(9,0)列のデータ型を からに変更することはできませんDECIMAL(15,0)。最善の策は、新しい列 (NEW_BAN) を作成し、古い列から値を割り当て、古い列を削除して、NEW_BAN の名前を BAN に戻すことです)。

  2. COMPRESS 0は制約ではありません。これは、「ゼロ」の値がテーブルから圧縮され、ディスク容量を節約することを意味します。

  3. テーブルに2,147,483,647COUNT(*)行 (INTEGER の最大値) を超える行があるため、そのエラーが返されます。結果を BIGINT としてキャストします (Catcall で示されます)。

そして、ドキュメンテーションは圧倒される可能性があることに同意します。ただし、辛抱強く、正確なリリースの SQL タイトルだけに注目してください。彼らは本当によく書かれています。

于 2012-08-10T13:47:37.073 に答える
2

ALTER TABLE の構文図は、列のデータ型を直接変更することをサポートしていないようです。( Teradata SQL DDL ドキュメント)。COMPRESS 0ゼロを圧縮します。Teradata は、さまざまな種類の圧縮をサポートしています。

ここでの数値オーバーフローは、おそらく整数の範囲を超えたことを意味します。その部分を機能させるには、より大きなデータ型にキャストしてみてください。(これを行うために列のデータ型を変更する必要はありません。)

select cast(count(*) as bigint) 
from table_name;
于 2012-08-10T12:25:19.210 に答える
1

テーブルに値を格納するために必要なバイト境界を超えているためALTER TABLE、データ型をからに変更するために使用するDECIMAL(9,0)ことはできません。DECIMAL(15,0)Teradata 13.10の場合、列データ型の変更に使用する方法の詳細については、 SQLデータ定義言語の詳細トピックに関するTeradataマニュアルの61〜65ページを参照してください。ALTER TABLE

于 2012-08-10T13:31:46.583 に答える