これ何て呼びますか Part2

USER_TAB_COLUMNSから入力したテーブル名で構造を抽出し
SQL文を作成出来るものを作ろうとしています。

80%までうまく行くのですが、SELECT文でフィールドをカンマ付けで置いていく
所で最後のフィールドに来た時カンマが付加されてしまいます。
これを最後のフィールドに来た時カンマが付加されないでスペースで置くように
したいのですが。。

set pagesize 0
set linesize 1000
set trimspool on
set feedback off
set verify off

ACCEPT TABLE CHAR PROMPT 'TABLE NAME:'

set termout off
spool C:\TEST_csv.sql

SELECT 'SELECT ' FROM DUAL;
SELECT COLUMN_NAME || ','
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = UPPER( '&TABLE' )
ORDER BY COLUMN_ID;
SELECT 'FROM DUAL' FROM DUAL;

SPOOL OFF

A 回答 (3件)

2番目のクエリにCOLUMN_IDのMAXを取るサブクエリを作成し、


USER_TAB_COLUMNSと外部結合。
USER_TAB_COLUMNSのCOLUMN_IDがMAXでなかったら,を付加、
COLUMN_IDのMAXだったらスペースになるようにクエリを作ればいいのではないでしょうか。

試していませんがこんなかんじ↓

SELECT COLUMN_NAME || NVL2(ID,' ' ',' )
FROM USER_TAB_COLUMNS,
(
SELECT MAX(COLUMN_ID) ID
FROM USER_TAB_COLUMNS
) MAX_ID
WHERE TABLE_NAME = UPPER( '&TABLE' )
AND USER_TAB_COLUMNS.COLUMN_ID += MAX_ID.COLUMN_ID
ORDER BY COLUMN_ID;

この回答への補足

ヒントいただきありがとうございます。
最大のカラムIDになったらスペースをセットする
という事は考えたのですが、うまくいきませんでした。
実行すると最後のカラム名だけがセットされます。

ご教授頂きました、SQL文はエラーがあり
(まあテストしていないからですね)
下記のように直しましたが、うまくいきません。
Dual文を抜きます。↓
SELECT COLUMN_NAME || NVL2(ID,' ',',' )
FROM USER_TAB_COLUMNS,
(
SELECT MAX(COLUMN_ID) ID
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = UPPER('&TABLE' )
) MAX_ID
WHERE
TABLE_NAME = UPPER('&TABLE')
AND USER_TAB_COLUMNS.COLUMN_ID (+) = MAX_ID.ID
ORDER BY COLUMN_ID;

補足日時:2005/09/02 17:15
    • good
    • 0

なんか自分で解決する気ありますか?


ここまでくればGoogleで一発でしょ。

夏休みの宿題を手伝っている気がします。

外部結合の意味は調べたのですか?

参考URL:http://www.mitene.or.jp/~rnk/TIPS_ORCL_TBLLINK1. …
    • good
    • 0
この回答へのお礼

まぁー夏休みの宿題みたいなもんですね。
(おーテキビシー)(+_+)

結局、アドバイス頂いたSQLは、MAX列の項目した取れませんでしたので、(外部結合は理解しているつもりなのですが・・私の実力では無理でした)
それを生かして前半部を以前のままと後半部分をそのSQLでくっつけました。
もっと簡単なSQL文があるかもしれませんが、まー出来ればいいかということでこれでよしとします。
アドバイスありがとうございました。m(_ _)m

お礼日時:2005/09/05 10:47

No.1です。



外部結合がうまくいっていないようですね。

> AND USER_TAB_COLUMNS.COLUMN_ID (+) = MAX_ID.ID

の辺りを直してください。たぶんこんなかんじ↓

AND USER_TAB_COLUMNS.COLUMN_ID = (+) MAX_ID.ID

この回答への補足

>
AND USER_TAB_COLUMNS.COLUMN_ID = (+) MAX_ID.ID

これじゃー文法エラーですよ。
AND USER_TAB_COLUMNS.COLUMN_ID = MAX_ID.ID
これもダメですし、うまくいきませんね。
よろしくお願いします。

補足日時:2005/09/02 20:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報