• ベストアンサー

OracleDatabaseのテーブル名

無償版のOracle Database 10g XEを使用しているのですが、 CSVファイルをロードして、テーブルを作成する過程で、テーブル名を付けるところで、 日本語を混ぜて、Shift-JISで「TBL_AAA_第01表_統計データ」と入力し、次へ進むと、 エラーとなりテーブルを作成できません。「TBL_AAA_第01表」とすると作成可能ですが、何のテーブルか分からなくなります。 Oracleの文字数制限は30バイトだと記憶しているのですが、入力したテーブル名は計算すると27バイトで制限以内になります。 このテーブル名は使用できないのでしょうか?

  • INDES
  • お礼率37% (10/27)
  • Oracle
  • 回答数5
  • ありがとう数2

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.5

>あれから自分なりに調べたのですが、10g XEで使用できるキャラクタセットは西ヨーロッパ(WE8MSWIN1252)とユニバーサル(ALL32UTF8)の2つだけのようです。 参考までに、SJISで作成することもできますよ。 http://www.betatechnology.jp/pp/index.php?Oracle%20XE ですので、当初はデータベースの文字コードはSJISなのだろうと思ってしまいました。 もう少し早く気づければよかったです。

INDES
質問者

お礼

有難う御座いました。 とても勉強になりました。

その他の回答 (4)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.4

>短いテーブル名で作成した後、オラクルホームで名前を変更しようとすると >エラーが発生して、変更できません。 なんという名前で作成して、なんと言う名前に変更しようとしたのでしょうか? >エラーは先ほどとは異なりますが、結局文字数オーバーみたいです。 >文字数のカウント方法が特殊なのでしょうか? どのようなエラーになったのでしょうか? 具体的な情報を提示しないと具体的な回答はもらいづらいですよ。 データベースの文字コードは本当にShift_JISなのでしょうか? select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_CHARACTERSET'; の結果はどうなりますか? select lengthb('つけようとしているテーブル名') from dual; の結果はどうなりますか? 当方の環境ではデータベースの文字コードはUTF-8ですが、 ロード時に"TBL_AAA_第01表_統"(24バイト)という名前で作成し、 "TBL_AAA_第01表_統計デ"(30バイト)に変更することはできました。

INDES
質問者

お礼

返信が送れて申し訳ありません。 select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_CHARACTERSET'; の結果ですが、「ALL32UTF8」と表示されました。 あれから自分なりに調べたのですが、10g XEで使用できるキャラクタセットは 西ヨーロッパ(WE8MSWIN1252)とユニバーサル(ALL32UTF8)の2つだけのようです。 全角文字3バイトで計算し、名前を付けるとエラーの発生無く正常にテーブルを作成できました。 有難うございました。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

連投すみません・・・ 主キーのほかに順序もテーブル名_SEQという名前で作成しようとするので、 "TBL_AAA_第01表_統計データ_SEQ”となり、31バイトになってしまいますね。 なのでエラーになってしまいます。 別名で作る他に、先にテーブルを作成しておくという方法もありますね。

INDES
質問者

補足

回答有難う御座います。 短いテーブル名で作成した後、オラクルホームで名前を変更しようとすると エラーが発生して、変更できません。 エラーは先ほどとは異なりますが、結局文字数オーバーみたいです。 文字数のカウント方法が特殊なのでしょうか? 全角であれば15文字まで付けることができると思うのですが・・・ 「_SEQ」を考慮しても13文字まで可能にはならないのでしょうか? 分からないです・・・

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

Application Expressでの話だったのですね。自分でも試してみました。 新規でテーブルを作成する場合、デフォルトで主キーをテーブル名_PKという名前で作成しようとするので、 そのタイミングで裏で動いているプログラム(PLSQLなのでしょう)でバッファがオーバーしてしまうようですね。 ("TBL_AAA_第01表"と入力して次の画面へ行くと"TBL_AAA_第01表_PK"となっていますよね?) ですので、一旦別のテーブル名で作成してから、ロード後にテーブル名を変更するしかないのではないでしょうか。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

ORA-00972が発生するということなのでしょうか? どういう方法でテーブルを作成しようとしているのかわかりませんが、 sqlplusなどからCREATE TABLE文を実行してもエラーになるのでしょうか。 また、オブジェクト名に2バイト文字を使用するときは二重引用符でくくるのが基本ですよ。

INDES
質問者

補足

回答有難う御座います。 説明不足で申し訳御座いません。 エラー表示は 「ORA-06052 PL/SQL 数値または値のエラー: 文字列バッファが小さすぎます。 が発生しました。flowComp=P13_NEW_SEQUENCE」 です。 オラクルホームのユーティリティ→データのロード/アンロード→ロード→データのロードでの 操作になります。 ローカルPC内のCSVファイルをロードしてデータテーブルを作成する操作です。 作成する過程でテーブル名(表名)を入力する箇所があるのですが、ここにこのテーブル名を入力して次へ進むとエラーとなります。 プログラムやSQLでの操作はありません。 引き続き宜しくお願いします。

関連するQ&A

  • Express Editionに関して

    Oracle Database Express Edition 11g (Oracle Database XE)を使用していますが、 その際に、Application Expressを用いてユーザの作成をしましたが、画面では作成 されているものの、SQLPLUSでログインできません。 また、  SELECT * FROM ALL_USERS; にも表示されません。 Application Expressが正しく接続されてないかと思いきや、表を作成したところ、正しく 表は作成されました。。。 そもそもApplication Expressで作成されたユーザというのは、SQLPLUS等で接続できない ユーザなのでしょうか、、、 関係性がわからず、、、教えて頂きたいと思います。 よろしくお願いします。

  • OWNER名を指定せずにテーブルを検索方法

    こんにちは、Oracle初心者です。 ユーザーAで作成したテーブルを、ユーザーBで照会する方法を 教えてください。 新規に作成したユーザーBにDBA権限を与え、Oracleログイン後、 SELECT * FROM A.TABLE_NAME とすると問題ないのですが、 SELECT * FROM TABLE_NAME と、OWNER名を省略するとエラーが発生します。 (テーブルが存在しないというエラー) OWNER名を指定せずにテーブルを検索するにはどうすれば良いでしょうか?幼稚な質問で申し訳ございませんが、宜しくお願いします。 現在Oracle9iを使用しております。

  • 【Access】テーブルの参照について

    Accessでツール作成をしたいのですが当SWの使用経験が浅く使い方が分からず困っています。 AccessにはOracleでいうviewのような機能はAccessには存在するのでしょうか。 リンクテーブルという機能があるのは知っていますが、リンク元・先でデータベースが別でなければならないと理解しています。 私がやりたいことは、同じデータベース内に存在するテーブルを複数参照し、「一つのテーブルに見せる」といった動作です。 以下、参考に記載します。(やりたいこと) (1)TBL1(input):カラム1,カラム2 (2)TBL2(input):カラム3,カラム4,カラム5 (3)TBL3(TBL1+TBL2):TBL1.カラム1,TBL1.カラム2,TBL2.カラム5 →TBL3をOracleでいうviewの形で持ちたい 良い方法があればご教示ください。

  • オラクルのテーブルでの入力制限

    こんにちは。教えてください。 小職はオラクルデータベースを使って銀行振り込みファームバンキングをする プログラムを作成しています。 出力項目の振り込み名義人名カナは小文字のみ指定です。 そこでオラクルのテーブルに小文字しか入力できない制限を指定したいのですが ご存じの方は教えてください。 オラクル側で入力制限を行うのが一番堅いと思います。 よろしくお願いします。 (^^

  • Oracle 10g XE CSVからテーブル作成

    いつもお世話になっております。 無償版のOracleデータベースの10g XEでCSVファイルを読込み、テーブルを作成しているのですが、 すべての行を読込みできません。 エラーは発生しないです。CSVのファイルサイズは1,971KB、行数は16,436行、列数は28列。 すべての行を読込み、テーブルを作成する方法はないでしょうか? それとも、XEで制限があるのでしょうか?

  • Oracle Database XEの知名度

    いつもおせわになります 信頼性が高く大手の企業でよく導入されるオラクルですが フリー版、商用利用可の「Oracle Database XE」が存在します しかし、WEB系のアプリケーションを見ると 殆どがMySQLかPostgeSQLを使っていますが なぜ、「Oracle Database XE」を使わないのでしょうか? 多くの言語、技術を極めたいというような、学者肌の方たちは別ですが 一般的な、アプリケーションを作るというのが目的の人は、 十分動くのにコストをかけて別の技術を覚えたりしないと思うので それが原因なのでしょうか? もしくは、「Oracle Database XE」には実戦で運用するのは不都合な点があるのでしょうか? DBに詳しい方、「Oracle Database XE」を使って実際にWEBアプリケーションを運用したことがあるかた、お教え頂けると幸いです。

  • SQL 主キーによる自動的な表の結合

    複数の表を主キーで結合する際、そのままWHERE句に条件を列挙するのが普通ですが、 主キーの数が多いので、これを簡単に記述方法はないでしょうか? できれば Natural Join のようにテーブル名のみを記述し、 DBMS(Oracle)が主キーのみを自動的に結合してくれればベストです。 Natural Join を使用できない理由の1つは、複数の表に登録日という列があり、 Natural Joinすると主キーでない登録日まで結合してしまうからです。 SQLは次のようになっています SELECT * FROM TBL_A NATURAL JOIN TBL_B NATURAL JOIN TBL_C ... ※join using, join on 句は使用できないようです。 ※登録日の列名は変更できません。 Oracle Database 9.2.0.4

  • テーブルの項目名にコメントは付けられる?

    Oracleでは、テーブルの各項目にコメントは付けられないのでしょうか? 例えば、SYOUHIN_C には「商品コード」というコメントを振って、 後でテーブルレイアウト表を作成する際に、取得したいのです。 CREATE TABLE時 や 後からALTER でも構いません。 よろしくお願いします。

  • Oracleとは?

    私はエクセルなどは使えますがコンピュ-タ-言語などはほとんどわからないものです Oracleという言葉がわかりません 「リレーショナルデータベース管理システム」ということですが、ぴんときません そこで質問をまとめてみました 1、「Oracle」とは「Oracle Database」と同じものでしょうか? 2、「Oracle Database」とはソフト名でしょうか?それとも言語名なのでしょうか? 3、「Oracle Database」を使った有名な商品があれば教えてください ご存知の方よろしくお願いいたします

  • ACCESSとORACLEで抽出結果が異なる

    いつもお世話になっております。 ACCESS2000を扱っております。 ACCESSのデータベースにODBCを接続してORACLEの テーブルをリンクテーブルとしてインポートします。 そして、ACCESSのテーブルとORACLEのテーブルを LEFT JOIN を行いクエリーを作成したのですが、 正しい結果が抽出できません。 ただし、ORACLEのテーブル構成・データと全く同一の ACCESSのテーブルを作成し、クエリーを作成したところ 正常に動作しております。 SQLは以下のような内容となっております。 sSQL = SELECT TBL_1.A, TBL_1.B, TBL_1.C FROM TBL_1 LEFT JOIN TBL_2 ON TBL_1.A = TBL_2.A AND TBL_1.B = TBL_2.B AND TBL_1.C = TBL_2.C WHERE TBL_2.A IS NULL AND TBL_2.B IS NULL AND TBL_2.C IS NULL TBL_1がORACLEより引っ張ってきたリンクテーブル、 TBL_2がACCESSに存在するテーブルになります。 以上のSQLで、TBL_2に存在なくTBL_1に存在するレコード、及びTBL_1とTBL_2でキー項目は同じだが 内容が異なるレコードを抽出できると考えているのですが、TBL_2に存在なくTBL_1に存在するレコードしか 抽出できません。 個人的には、処理する件数が多大であることが影響しているのかとも考えているのですが・・・。 (両テーブルともに約20万件レコード) クエリーを分割することで解決はしたのですが、 原因究明を求められておりまして大変困っています。 皆様の知恵を借りたいです。宜しくお願いいたします。