「"テーブルA"."カラムA"の定義が、値より小さい」と言われているんだから、テーブル定義を直すしかありません。
文字数で意識した定義にしているなら、そのように定義する必要があります。
varchr2(17 char)
のように桁が文字の数を表しているという、指定(char
)が必要です
以下のSQLで作成された項目の定義を確認しました。
少なくともVarchar2(17)
であれば大丈夫そうですが。
SQL
1create table test as
2select to_char(systimestamp(3),'YYYYMMDDHH24MISSFF3') dummy
3from dual
多分、現状ではchar(17)
で定義しているんでしょうけど、char()
指定の桁はあくまでバイト数なので、格納できる文字数は、文字コードの長さでまちまちです。
態々、文字型で定義しなくても、TIMESTAMP
型で取る方が容量的には少なく済むし、利便性があると思いますけど。
訂正
列"テーブルA"."カラムA"の値が大きすぎます(実際:20、最大: 17)
実際で20バイトという事は内容的にマルチバイト文字で扱われている所がありそうなので、別な問題ですね。
解決するか分かりませんが、to_single_byteを挟んでみてはどうでしょうか。
SQL
1SELECT testtime
2 , length(testtime)
3 , lengthb(testtime)
4 , to_single_byte(testtime)
5 , length(to_single_byte(testtime))
6 , lengthb(to_single_byte(testtime))
7 , ASCIISTR (testtime)
8 , length(ASCIISTR (testtime))
9 , lengthb(ASCIISTR (testtime))
10from (
11 select TO_CHAR(SYSTIMESTAMP(3),'YYYYMMDDHH24MISSFF3') testtime
12 FROM DUAL
13) test
手元の環境では20バイトにはなりませんが、上記を実行すれば確認はできると思います。
※ASCIISTRも追加
timestamp
型にすれば回避はできそうですが、根本的な解決ではありませんしね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。