- ベストアンサー
OracleDatabaseのテーブル名
無償版のOracle Database 10g XEを使用しているのですが、 CSVファイルをロードして、テーブルを作成する過程で、テーブル名を付けるところで、 日本語を混ぜて、Shift-JISで「TBL_AAA_第01表_統計データ」と入力し、次へ進むと、 エラーとなりテーブルを作成できません。「TBL_AAA_第01表」とすると作成可能ですが、何のテーブルか分からなくなります。 Oracleの文字数制限は30バイトだと記憶しているのですが、入力したテーブル名は計算すると27バイトで制限以内になります。 このテーブル名は使用できないのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>あれから自分なりに調べたのですが、10g XEで使用できるキャラクタセットは西ヨーロッパ(WE8MSWIN1252)とユニバーサル(ALL32UTF8)の2つだけのようです。 参考までに、SJISで作成することもできますよ。 http://www.betatechnology.jp/pp/index.php?Oracle%20XE ですので、当初はデータベースの文字コードはSJISなのだろうと思ってしまいました。 もう少し早く気づければよかったです。
その他の回答 (4)
- yamada_g
- ベストアンサー率68% (258/374)
>短いテーブル名で作成した後、オラクルホームで名前を変更しようとすると >エラーが発生して、変更できません。 なんという名前で作成して、なんと言う名前に変更しようとしたのでしょうか? >エラーは先ほどとは異なりますが、結局文字数オーバーみたいです。 >文字数のカウント方法が特殊なのでしょうか? どのようなエラーになったのでしょうか? 具体的な情報を提示しないと具体的な回答はもらいづらいですよ。 データベースの文字コードは本当に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バイト)に変更することはできました。
お礼
返信が送れて申し訳ありません。 select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_CHARACTERSET'; の結果ですが、「ALL32UTF8」と表示されました。 あれから自分なりに調べたのですが、10g XEで使用できるキャラクタセットは 西ヨーロッパ(WE8MSWIN1252)とユニバーサル(ALL32UTF8)の2つだけのようです。 全角文字3バイトで計算し、名前を付けるとエラーの発生無く正常にテーブルを作成できました。 有難うございました。
- yamada_g
- ベストアンサー率68% (258/374)
連投すみません・・・ 主キーのほかに順序もテーブル名_SEQという名前で作成しようとするので、 "TBL_AAA_第01表_統計データ_SEQ”となり、31バイトになってしまいますね。 なのでエラーになってしまいます。 別名で作る他に、先にテーブルを作成しておくという方法もありますね。
補足
回答有難う御座います。 短いテーブル名で作成した後、オラクルホームで名前を変更しようとすると エラーが発生して、変更できません。 エラーは先ほどとは異なりますが、結局文字数オーバーみたいです。 文字数のカウント方法が特殊なのでしょうか? 全角であれば15文字まで付けることができると思うのですが・・・ 「_SEQ」を考慮しても13文字まで可能にはならないのでしょうか? 分からないです・・・
- yamada_g
- ベストアンサー率68% (258/374)
Application Expressでの話だったのですね。自分でも試してみました。 新規でテーブルを作成する場合、デフォルトで主キーをテーブル名_PKという名前で作成しようとするので、 そのタイミングで裏で動いているプログラム(PLSQLなのでしょう)でバッファがオーバーしてしまうようですね。 ("TBL_AAA_第01表"と入力して次の画面へ行くと"TBL_AAA_第01表_PK"となっていますよね?) ですので、一旦別のテーブル名で作成してから、ロード後にテーブル名を変更するしかないのではないでしょうか。
- yamada_g
- ベストアンサー率68% (258/374)
ORA-00972が発生するということなのでしょうか? どういう方法でテーブルを作成しようとしているのかわかりませんが、 sqlplusなどからCREATE TABLE文を実行してもエラーになるのでしょうか。 また、オブジェクト名に2バイト文字を使用するときは二重引用符でくくるのが基本ですよ。
補足
回答有難う御座います。 説明不足で申し訳御座いません。 エラー表示は 「ORA-06052 PL/SQL 数値または値のエラー: 文字列バッファが小さすぎます。 が発生しました。flowComp=P13_NEW_SEQUENCE」 です。 オラクルホームのユーティリティ→データのロード/アンロード→ロード→データのロードでの 操作になります。 ローカルPC内のCSVファイルをロードしてデータテーブルを作成する操作です。 作成する過程でテーブル名(表名)を入力する箇所があるのですが、ここにこのテーブル名を入力して次へ進むとエラーとなります。 プログラムやSQLでの操作はありません。 引き続き宜しくお願いします。
お礼
有難う御座いました。 とても勉強になりました。