列定義を表示する

 今度もやんごとなき事由によって作ったのですが便利に使えたことのある、 簡単なTclスクリプトをご紹介します。 あれはまだ、私がジャングル戦の虎と呼ばれていた頃でした。 職場のOracleデータベースでカラムの数が100以上ある長ーいテーブルがいくつかあったのですが、 これを移管するときに、そのうち1コだけカラムを抜いてコピーする、

INSERT INTO NEW_TABLE (
  列名1,
  列名2,
  列名3,
  列名4,
  ...
  列名159
) ( SELECT
  列名1,
  列名2,
  列名3,
  列名4,
  ...
  列名159
FROM OLD_TABLE
);
というSQL文を作る必要が出てきました。 ここでテーブルの列定義を見ながら1つずつ書き写していくのはあほくさいので、 下のスクリプトの登場となったわけです。 これで、
列名1
, 列名2
, 列名3
...
というテキストが作られるので、適当に加工すればできあがりです。

package require Oratcl
set env(NLS_LANG) "Japanese_Japan.UTF8"

set con [oralogon URANO/URANO398@DWH02]
set st [oraopen $con]

set sql {SELECT * FROM SZ_GENKA_TRANSFER WHERE 1 = 2}
orasql $st $sql
set rc [oramsg $st rc]
set first 1
foreach s [oracols $st name] {
  if $first { puts "$s"; set first 0 } else { puts ", $s" }
}

oraclose $st
oralogoff $con
# end.

ちなみにこの頃から、Oratcl 4.0用になっています。 バージョン3台の場合はoramsgコマンドの文を適当に書き換えるか、削ってください。

?もしかして、このoramsgコマンド全く意味ない?(そそくさと、風のように逃げる準備)

拡張レビュー分室 top
(first uploaded 2002/11/03 last updated (not ever), MISUMI URANO)