• ベストアンサー

Oracle Nunber型の精度(桁数)について

Oracleデータベース上のテーブルにNUMBER(1,0)で定義した項目を追加し、 その項目にSQLで値(数値で1、または0)をセットしたところ、「ORA-01438: この列に許容される指定精度より大きな値です」のエラーが発生しました。 同じテーブル上に元々NUMBER(1,0)で定義された項目があり、そちらでは 同じエラーがでません。 何か原因として考えられる事はあるのでしょうか?

  • Oracle
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • sngPoi2
  • ベストアンサー率49% (468/939)
回答No.2

エラーが出る項目と出ない項目は項目定義が同じですか? 同じであれば、maiko04 さん記載のとおりだと思います。 一度下記SQLで項目の情報を確認してみれば如何ですか? SELECT TABLE_NAME -- テーブル名 , COLUMN_NAME -- カラム名 , DATA_TYPE -- データタイプ , DATA_LENGTH -- データ長 , DATA_PRECISION -- NUMBER 型の全桁数(精度) , DATA_SCALE -- NUMBER 型の小数点以下の桁数 , DATA_DEFAULT -- デフォルト値 , NULLABLE -- NULL許容/非許容 FROM ALL_TAB_COLUMNS WHERE OWNER = 'ここにスキーマ' AND TABLE_NAME = 'ここにテーブル' AND COLUMN_NAME LIKE '%%' -- 検索したい項目名(全体検索の場合はこのまま)

その他の回答 (1)

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

insertのときにNUMBER(1,0)の最大値9を超えた数を指定しているのでしょう。 insert前にその数を表示してみたらわかるでしょう。

関連するQ&A

  • Oracleのエクスポートでエラー

    Oracle9iでデータベース全体のエクスポートを取ろうとすると 以下のエラーが出てしまいます . クラスタ定義をエクスポート中 EXP-00056: Oracleエラー19206が発生しました。 ORA-19206: 問合せの値またはREF CURSORパラメータが無効です ORA-06512: "SYS.DBMS_XMLGEN", 行83 ORA-06512: "SYS.DBMS_METADATA", 行345 ORA-06512: "SYS.DBMS_METADATA", 行410 ORA-06512: "SYS.DBMS_METADATA", 行449 ORA-06512: "SYS.DBMS_METADATA", 行1156 ORA-06512: "SYS.DBMS_METADATA", 行1141 ORA-06512: 行1 EXP-00000: エラーが発生したためエクスポートを終了します。 見てみるとSYS.DBMS_XMLGENというテーブルは存在していませんでした。 どうすればデータベースのエクスポートが出来るでしょうか? 教えてください。

  • ORA-01438について

    OracleのPL/SQLの作成で "ORA-01438: 指定した精度を超えた値が列に指定されています"の エラーメッセージが出てしまいます。 PL/SQL上で、値が整数2桁+少数2桁 となるところを計算式を修正し 整数4桁になるようにしたところ、ORA-01438が出るようになりました。 ちなみに全てselectのはずです。 該当のカラムは副問い合わせを介してテーブルから呼んでいるのですが、 大本のカラムには精度(桁数)指定はありません。 いったいこれは何の精度指定に引っ掛かっているのでしょうか。 考えられる可能性を提示して頂けると大変助かります。

  • Oracleストアドの互換性について

    Oracleのストアドについて質問です。 32bit版ではコンパイルが通るのに、64bit版ではコンパイルが通りません。 Ora-00918列定義が未確定がでます。 列名ではなく、列番号で指定するとコンパイルが通るようになります。 ただし、きちんと値をとってきていない。 ・Oracle10.2.0.3 x32(windowsServer2003x32)でOK。 ・Oracle10.2.0.5 x64(windowsServer2008x64)ではコンパイルエラーになります。(Ora-00918) 列定義が未確定がでます。 同じくOracle11.0.1x64(windowsServer2008x64)でも同じエラーが出ます。 文字コードはS-JISです。 Oracle10.2.0.5にアップのパッチを当てています。 64bitでなにかあるのでしょうか?

  • ASPでのOracleへの接続

    いつもお世話になっています。 ASPでのOracleへの接続について質問させていただきます。 ASPファイルの中でOracleへ接続し、テーブルを更新するストアドファンクションを呼び出す処理を作成しているんですが、そのASPファイルを開くと 次のようなエラーが表示されてしまいます。 //////////////////////////////////////////////////////// エラー タイプ Microsoft OLE DB Provider for Oracle (0x80040E14) ORA-06550: 行1、列7: PLS-00221: 'TEST_T_FUNC'がプロシージャではないか、または未定義です。 ORA-06550: 行1、列7: PL/SQL: Statement ignored /test_asp.asp, line 113 //////////////////////////////////////////////////////// 呼び出し先がプロシージャの場合はテーブルは正常に更新されますが、 ファンクションだと上のエラーが起こってしまうようです。 ファンクションを呼び出しても正常に更新されるようにしたいのですが どのようにすればいいでしょうか? よろしくお願いします。

  • オラクルの初期化について

    OSはwindows2000serveを使用し、Oracle8.1.6をいれてます。 SQL*Plusを使ってデータベースにアクセスしようとしましたが、 ORA-01034 とエラーがでてオラクルを初期化して再試行しないといけないらしいのですが、どういう作業をすればよいのかわかりません。 初心者ですのでわかりやすくお願いします。

  • オラクルのSQLについて

    オラクルのSQLについて質問です。 開発環境はVB6.0です。 引継ぎをまかされたのですがオラクルは操作したことがないので困っています。 Set Ora = dbOra.CreateSql("begin EMPCRMI(:KA, :ROOM, :YMD, DATA1, :DATA2, :DATA3, :DATA4, :RET) ; end;", 0&) のEMPCRMIの部分が何なのかがわかりません>< 検索をかけてもVB構文ないで検索をかけてもヒットしません。 DATAの拡張を行うためにDATA5.DATA6と増やして実行したらエラーが起きました。 データベースのテーブルでは拡張領域は確保してあるので何が原因なのかわからないでいます、、、 お知恵をお貸しください。

  • オラクルのUPDATEで複数テーブル

    見ていただいてありがとうございます。 どなたか、方法がお分かりになる方、 ご教授いただけるよう宜しく御願いいたします。 ORACLEのSQL_PLUSを使用して以下のような SQLを実行するとエラーとなります。 UPDATE テーブル名1 , テーブル名2 SET テーブル名1.項目A = '2' , テーブル名1.項目B = '02' , テーブル名1.項目C = テーブル名2.項目A 当方、ACCESSとSQLサーバーでSQLの経験が若干あり、 そちらではこの記述方法で正常実行されるのですが、 オラクルでの記述方法がよくわかりません。 ネット等を利用し調べたのですが、打開策が見つからず、質問させていただこうと思った次第です。 どうか宜しく御願いいたします。

  • oracle 複数列を1列にまとめる

    oracle 複数列のデータ中身を別のテーブルの1列にインサートしたい ご存知の方、オラクルプロの方、 若輩者の私にアドバイス等ご指導受けたまりたく存じます。 以下のようなテーブルがあったとします。 テーブルA MID | K1 | K2 |K3 ------------------------- 011 |ああ |いい |うう  012 |ええ |おお |かか 特定の列を選択しての、Updateには成功しました。 update テーブルA set K1 = (select K1|| ' ' ||K2|| ' '||K3 from テーブルA where MID = '011') where MID = '011'; これを別のテーブルに全行Insertしたいのです。約5千行はあり、環境の制限によりSQL文のみしか使えません。 テーブルB MID |K1 ----------------------- 011 |ああ いい うう 012 |ええ おお かか 以下のようなSQLで正しいでしょうか? insert into テーブルA (K1) select K1|| ' ' ||K2|| ' '||K3 from テーブルB; 上記の方法で実施しましたが、下記のようなエラーメッセージが表示されます。MID項目が主キーのため、NULL不可なことはわかりますが、指定していないMIDが何故でてくるのでしょう? SQL Error: ORA-01400: テーブルA (MID) にはNULLは挿入できません。 環境情報: Oracle 10g  検証環境:Oracle SQL Developerあり 本番環境:Oracle SQL Developerなし、SQLのみ使用可

  • OracleのDATE型について

    ある海外製品のパッケージをインストールしています。Oracle 11gR2をWindows上で使用しています。 パッケージインストール時に、テーブル作成文の他、サンプルデータのinsertスクリプトが付属しているので実行したのですが、「SQLエラー: ORA-01843: 指定した月が無効です。」というエラーになってしまいます。カラムはDATEで定義されていて、挿入データが以下のようになっています。 TO_DATE('28-Jul-1948 12:00:00 AM', 'dd-Mon-yyyy HH:MI:SS AM') OSやOracleデータベースが英語の環境ではこのエラーは発生しなかったので、日本語環境で発生しているものと思われます(キャラクタセットはJA16SJISTILDEです)が、日本語環境にも問題なく上記サンプルデータを挿入するには、スクリプトをどのように修正するとよいでしょうか?ご存じの方、教えてください。宜しくお願いします。

  • oracle10gの精度について

    NUMBER(13.3)で定義されている項目に値1234567890.999を追加しました。 これをsqlplus 経由でselect文を発行して確認すると 1234567891 と表示されす。 また、PROCで確認すると 1234567890.00000 と表示されます。 これらを精度部分も正確に1234567890.999と取得する方法はあるのでしょうか? OS : RedHat Linux ES4(update3) Oracle:10g