■SI Object Browser 掲示板


ユーザの皆様、開発者、サポート担当者の交流のための掲示板です!

ユーザーの皆様同士で教え合ったりもできる交流の場にしたいと思っていますので、相互協力をよろしくお願いします。
なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。

discussion
※各投稿のカラーは対象となる製品に対応しています。【■…OB ■…OBER ■…全般 ■…その他】
※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。
※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。
※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。
最終カラムにデフォルト制約のある場合のSQL出力 2004/08/25 15:11 OBER 2
リバースエンジニアリングしたテーブルの最終カラムに、default 制約がついている場合、フォワードエンジニアリングでSQL出力すると、最終カラムと閉じ括弧の間に余分な空行が入るため、そのまま、SQL*Plusで流すとエラーになります。

最終カラムでない場合には問題ありません。

また、最終カラムであっても number 型の場合は、正常に出力されることがあります。

なお、リバースエンジニアリングでなく、直接、OBERでdefault制約を設定した場合には発生しません。

具体的には、次のとおりです。

1.テーブルを作成
CREATE TABLE TEST
( PRIMARY_KEY CHAR(10) PRIMARY KEY,
USER_DATA VARCHAR(10) DEFAULT '1'
)

2.リバースエンジニアリングする。

3.フォワードエンジニアリングでSQL出力する。
CREATE TABLE TEST
(
PRIMARY_KEY CHAR(10) NOT NULL,
USER_DATA VARCHAR(10) DEFAULT 1
←ここに空行が挿入されています。
)
(後略)

4.SQL*Plus でSQLを流すとエラー

SQL> @c:\forward
SP2-0042: 不明なコマンドです(")")。行の残りは無視されました・
USER_DATA VARCHAR(10) DEFAULT '1'
*
行4でエラーが発生しました。:
ORA-00907: 右カッコがありません。

現象を確認した環境は次のとおりです。

DBサーバ:Solaris8、Oracle9iR2(9.2.0.1.0)
クライアント:WindowsXP
バージョン:3.0.1.5
通りがかりのものです。

SQLスクリプト中の空白行はSQL*Plusの設定で無視することが可能です。
具体的には
set sqlblanklines on
とすると空白行による文法エラーを回避することが出来きます。

お試しください。
ご指摘ありがとうございます。
早速、試してみます!

>具体的には
>set sqlblanklines on
>とすると空白行による文法エラーを回避することが出来きます。

実は、マクロで空行を削除しようか、該当行は少しなので手で
直そうか悩んでいました。
便利なオプションがあるんですね。