2009年5月27日水曜日

Oracle:sqplusでCSV出力したい。

テーブル名:カタログ

項目:物品コード,型式,品名,単価

のような表をCSV出力したい場合


1.まず、下記のような環境変数を設定。

SET LINESIZE 10000

→行のバイト数。決まりは無いが1行となるサイズを指定。

SET PAGESIZE 0

→ページの行数。

|
|カラム名
|------------
|値

|で示した単位で1ページになるので、0を指定した場合は「値」だけ出力される。

SET TRIMSPOOL ON

→ファイルへの行末のスペースをなくす。

SET FEEDBACK OFF

→件数などの結果を出さなくする。(xx row selectedとか)

SET TERMOUT OFF

→画面バッファに結果を送らない。

SPOOL test.csv

→抽出結果をtest.csvに吐く。

2.select文
select 物品コード||','||型式||','||品名||','||単価 from カタログ;

||でカラムとシングルクォーテーションでくくったコロンを連結する。

カラム間のコロンを入れる方法としては

set colsep ,

もあるが、ここではselect文の中に書くこととする。

3.スプールの終了とexit

SPOOL OFF
EXIT


4.まとめるとこう。

SET LINESIZE 10000
SET PAGESIZE 0
SET TRIMSPOOL ON
SET FEEDBACK OFF
SET TERMOUT OFF
SPOOL test.csv

select 物品コード||','||型式||','||品名||','||単価 from カタログ;

SPOOL OFF
EXIT

Oracle:エクスポートファイルのテーブル名などの情報が見たい。

方法としては2点あると思う。

(1)テキストエディタでエクスポートファイルを開き、文字列Createを検索する。
   
一応、エクスポートファイルの情報として見た目でわかりそうなものを見つけることができるが、非常に見づらい。

(2)impコマンドで確認する。
ユーザ/パスワードの確認が必要。

   imp [ユーザ]/[パスワード] show=y file=[エクスポートファイル名] full=y

   show=y とすることで、表へのインポートをスキップし情報の画面表示のみを行う動作となる。

2009年5月26日火曜日

Oracle:テーブルのコピー

tableAをtableBとしてコピー
※ただし、制約は引き継がない。
 必要に応じて、Oracle Enterprize Managerなどで設定すること。

CREATE TABLE tableB AS SELECT * FROM tableA;

コピーに要する時間は検証していないが、Xeon(2コア)のマシンで1行あたり最大700バイト程度の約2000行のテーブルを複製するのに待ちがほとんど感じられなかった。
複製の対象が数万行のテーブルでなければ、いい方法だと思う。

Oracle:BLOBの読み方。

読み方が判らず、以下のワードで検索してみる。
「ぶろぶ」→ホラー映画
「びーえるおーびー」→BLが多く抽出される。(ジャンル違い過ぎ)
「BLOB 読み方」→ 「びーろぶ」、「びーえるおーびー」

きっと企業内の方言があると思われるので一概にどれが正しいとは今時点でいえないが、
LOBの読み方が、「えるおーびー」なので、「びーえるおーびー」が有力か。

2009年5月19日火曜日

明日に備える。



GW中に福島か宮城かどっちかの漁港で撮った写真でナンチッテパノラマを作ってみた。

2009年5月13日水曜日

Oracle:パッケージをコンパイルしたとき、PLS-00201エラーが発生

このエラーは、テーブルを参照するときの権限に問題があったとき発生するらしい。
今回のケースでは、テーブルがdescで見えなかった状況があった。
で、エラーの内容から、ソースをよくよく確認すると、存在しないテーブルを参照していた。
なので、テーブルをexp/impした。

Oracle:インポート時に一意制約違反が発生した。

■状況
IMP-00019: Oracleエラー1により、行のインポートは拒否されました
IMP-00003: Oracleエラー1が発生しました。
ORA-00001: 一意制約(str.str)に反しています

desc table名 でテーブルの存在を確認するがエラーとなる。
OEMでスキーマ-該当ユーザ-表を確認すると存在している。

■対処
OEMで表を削除し、再度インポートした。

■原因
エラーそのものは既に存在している、制約されたテーブルにデータをインポートしようとしているため発生しているが、descで見えなくて、OEMで見える事象についてはよくわからない。

フォロワー