7

次のテーブルを作成しました

CREATE TABLE Customers(
  CustomerID varchar2(9) PRIMARY KEY, 
  Customer_Contact varchar2(40) NOT NULL, 
  Address varchar2(20) NOT NULL,
  Post_Code varchar2(7) NOT NULL, 
  Telephone_Number varchar2(11) NOT NULL)

現在、INSERT VALUES ステートメントを使用しようとしています。私は次の声明を書いた

INSERT INTO Customers VALUES(
  501623129, 
  'John Petterson', 
  '-- Singleton Close London', 
  '--- ---', 02082860222)

ステートメントを実行しようとすると、次のエラー メッセージが表示されます。

コマンドの 4 行目から始まるエラー: INSERT INTO Customers VALUES(501623129, 'David Patterson', '30 Singleton Close London', 'SW17 9JY', 02082860642) エラー レポート: SQL エラー: ORA-12899: 列の値が大きすぎます" DJ"."CUSTOMERS"."ADDRESS" (実際: 25、最大: 20) 12899.00000 - "列 %s の値が大きすぎます (実際: %s、最大: %s)"

4

6 に答える 6

20
ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 2

エラーの内容を示します。アドレスは最大 20 文字を保持できます。25 文字を渡します。

于 2010-12-03T17:00:01.280 に答える
10

前述のように、エラー メッセージは正確な問題を示しています。20 を保持するように設定されたフィールドに 25 文字を渡しています。列をもう少し正確に定義することを検討することもできます。VARCHAR2 列に特定のバイト数または文字数を格納するかどうかを定義できます。将来、マルチバイト文字をフィールドに挿入しようとすると、問題が発生する可能性があります。たとえば、これは長さが 5 文字ですが、5 バイトに収まりません: 'ÀÈÌÕÛ'

次に例を示します。

CREATE TABLE Customers(CustomerID  VARCHAR2(9 BYTE), ...

また

CREATE TABLE Customers(CustomerID  VARCHAR2(9 CHAR), ...
于 2010-12-03T17:13:14.233 に答える
4

この回答は、たとえ古いものであっても、ORA-12899 と上記の多くの役に立たないコメントのリストの上位に表示されます。最も役立つコメントは、データをロードするときにこれが発生する理由を見つけようとしている専門家にとって #4 でした。

一部の文字の長さは 1 バイトを超えます。特に SQL Server ではそうです。また、SQLServer の varchar(20) に収まるものは、Oracle の同様の varchar2(20) には収まりません。

昨日、SSIS が Attunity ドライバーを使用して Oracle データベースをロードしているときにこのエラーに遭遇し、時間を節約できると思いました。

于 2015-12-10T16:21:14.460 に答える
0

Google のトップ結果としてここで共有したかっただけです...

このような仮想列を追加しようとしていました

alter table t1 add (
    export_code varchar2(3 char) as (case when country is null then code else substr(code, 3) end) virtual
);

そしてオラクルは不平を言いました:

ORA-12899: value too large for column "EXPORT_CODE" (actual: 12, maximum: 480)

問題は、私のcodeコラムが120文字までであるvarchar2(120)ことです。substr

一時テーブルを作成すると、次のことがわかります。

create table t2 as
    select case when country is null then code else substr(code, 3) end as export_code from t1;

そしてdesc戻る

Name        Null? Type          
----------- ----- ------------- 
EXPORT_CODE       VARCHAR2(120) 

私が気づいたら、解決策はexport_code varchar2(120 char)キャストを使用または実行することです:

alter table t1 add (
  export_code varchar2(3 char) as ( cast (case when country is null then code else substr(code, 3) end as varchar2(3 char) ) ) virtual
);
于 2021-06-16T16:48:41.820 に答える
-2

例 : 1 と 2 のテーブルが利用可能です

1 つのテーブルはエントリを削除し、2 つのテーブル レコードを選択せず​​、1 つのテーブルに挿入しません。時間のない1テーブルを削除すると、2番目のテーブルレコードがありません例emp idが利用できない場合、このエラーが発生したことを意味します

于 2016-09-29T09:22:47.243 に答える