こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

OracleDatabaseのテーブル名

無償版のOracle Database 10g XEを使用しているのですが、
CSVファイルをロードして、テーブルを作成する過程で、テーブル名を付けるところで、
日本語を混ぜて、Shift-JISで「TBL_AAA_第01表_統計データ」と入力し、次へ進むと、
エラーとなりテーブルを作成できません。「TBL_AAA_第01表」とすると作成可能ですが、何のテーブルか分からなくなります。

Oracleの文字数制限は30バイトだと記憶しているのですが、入力したテーブル名は計算すると27バイトで制限以内になります。

このテーブル名は使用できないのでしょうか?

投稿日時 - 2011-03-25 13:09:22

QNo.6619449

困ってます

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

>あれから自分なりに調べたのですが、10g XEで使用できるキャラクタセットは西ヨーロッパ(WE8MSWIN1252)とユニバーサル(ALL32UTF8)の2つだけのようです。
参考までに、SJISで作成することもできますよ。
http://www.betatechnology.jp/pp/index.php?Oracle%20XE

ですので、当初はデータベースの文字コードはSJISなのだろうと思ってしまいました。
もう少し早く気づければよかったです。

投稿日時 - 2011-03-29 18:17:41

お礼

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

投稿日時 - 2011-03-30 18:15:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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バイト)に変更することはできました。

投稿日時 - 2011-03-25 17:29:58

お礼

返信が送れて申し訳ありません。

select * from NLS_DATABASE_PARAMETERS where PARAMETER = 'NLS_CHARACTERSET';
の結果ですが、「ALL32UTF8」と表示されました。

あれから自分なりに調べたのですが、10g XEで使用できるキャラクタセットは
西ヨーロッパ(WE8MSWIN1252)とユニバーサル(ALL32UTF8)の2つだけのようです。

全角文字3バイトで計算し、名前を付けるとエラーの発生無く正常にテーブルを作成できました。

有難うございました。

投稿日時 - 2011-03-29 17:29:09

ANo.3

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

別名で作る他に、先にテーブルを作成しておくという方法もありますね。

投稿日時 - 2011-03-25 14:51:18

補足

回答有難う御座います。

短いテーブル名で作成した後、オラクルホームで名前を変更しようとすると
エラーが発生して、変更できません。

エラーは先ほどとは異なりますが、結局文字数オーバーみたいです。
文字数のカウント方法が特殊なのでしょうか?

全角であれば15文字まで付けることができると思うのですが・・・
「_SEQ」を考慮しても13文字まで可能にはならないのでしょうか?

分からないです・・・

投稿日時 - 2011-03-25 16:06:59

ANo.2

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

ですので、一旦別のテーブル名で作成してから、ロード後にテーブル名を変更するしかないのではないでしょうか。

投稿日時 - 2011-03-25 14:45:39

ANo.1

ORA-00972が発生するということなのでしょうか?
どういう方法でテーブルを作成しようとしているのかわかりませんが、
sqlplusなどからCREATE TABLE文を実行してもエラーになるのでしょうか。

また、オブジェクト名に2バイト文字を使用するときは二重引用符でくくるのが基本ですよ。

投稿日時 - 2011-03-25 13:35:39

補足

回答有難う御座います。
説明不足で申し訳御座いません。

エラー表示は
「ORA-06052 PL/SQL 数値または値のエラー: 文字列バッファが小さすぎます。
が発生しました。flowComp=P13_NEW_SEQUENCE」
です。

オラクルホームのユーティリティ→データのロード/アンロード→ロード→データのロードでの
操作になります。
ローカルPC内のCSVファイルをロードしてデータテーブルを作成する操作です。

作成する過程でテーブル名(表名)を入力する箇所があるのですが、ここにこのテーブル名を入力して次へ進むとエラーとなります。

プログラムやSQLでの操作はありません。

引き続き宜しくお願いします。

投稿日時 - 2011-03-25 14:04:39

あなたにオススメの質問