SQLの窓

2010年07月01日


SQLPlus : 置換変数の概要と使い方

変数と言うより結局「実行前の置き換え」です。

定義せずに使った場合

SQL> select * from &TABLE_NAME;
table_nameに値を入力してください:

※ 入力を求められる


事前に定義してデータをセット

SQL> DEFINE TABLE_NAME = 社員マスタ
SQL> select * from &TABLE_NAME;

※ 入力は求められません
※ 再設定でも使います


意図的に変数に入力する

SQL> ACCEPT TABLE_NAME


変数の内容表示

SQL> PROMPT &TABLE_NAME
社員マスタ


スクリプト内部での利用例
-- 置換変数による表定義表示
COLUMN COLUMN_NAME FORMAT A40 HEADING '列名'
COLUMN DATA_TYPE FORMAT A10 HEADING 'データ型'
COLUMN NULLABLE FORMAT A4 HEADING 'NULL'
select COLUMN_NAME,DATA_TYPE,NULLABLE from USER_TAB_COLUMNS where TABLE_NAME = '&TARGET_TABLE';


スクリプトへの引数
-- 置換変数による表定義表示
COLUMN COLUMN_NAME FORMAT A40 HEADING '&1.列名'
COLUMN DATA_TYPE FORMAT A10 HEADING 'データ型'
COLUMN NULLABLE FORMAT A4 HEADING 'NULL'
select COLUMN_NAME,DATA_TYPE,NULLABLE from USER_TAB_COLUMNS where TABLE_NAME = '&1';

置換変数に続けて文字列を指定したい場合は、.で繋げます( 変数の終わりをインタープリタに知らせる為です )
社員マスタ列名                           データ型   NULL
---------------------------------------- ---------- ----
社員コード                               VARCHAR2   N
氏名                                     VARCHAR2   Y
フリガナ                                 VARCHAR2   Y
所属                                     VARCHAR2   Y
性別                                     NUMBER     Y
作成日                                   DATE       Y
更新日                                   DATE       Y
給与                                     NUMBER     Y
手当                                     NUMBER     Y
管理者                                   VARCHAR2   Y
生年月日                                 DATE       Y

11行が選択されました。



タグ:Oracle sqlplus
posted by lightbox at 2010-07-01 12:36 | Oracle | このブログの読者になる | 更新情報をチェックする

2009年10月26日


Oracle : スキーマ作成前にテーブルスペースの情報を取得する

スキーマを作成するのに、テーブルスペースが必要です。サーバのディスク情報やその他の情報を収集します。
sqlplus.exe SYSTEM/MANAGER@//light/XE @chk_tbl_space > nul
chk_tbl_space.sql
SPOOL result.txt
SET TRIMSPOOL ON 
SET FEEDBACK OFF
SET LINESIZE 32767
SET PAGESIZE 1000
COLUMN テーブルスペース名 FORMAT A20
select 
	TABLESPACE_NAME テーブルスペース名,
	CONTENTS タイプ,
	EXTENT_MANAGEMENT エクステント管理,
	round(FSIZE/1000000) "サイズ(M)",
	(FSIZE-FREESIZE)/1000000 "使用量(M)"
from
	DBA_TABLESPACES,
(
	select 
		V$TABLESPACE.NAME TNAME1,
		sum(BYTES) FSIZE
	from V$TABLESPACE,V$DATAFILE
	where
		V$TABLESPACE.TS# = V$DATAFILE.TS#
	group by V$TABLESPACE.NAME
) TSIZE,
(
	select 
		TABLESPACE_NAME AS TNAME2,
		sum(BYTES) AS FREESIZE 
	from DBA_FREE_SPACE
	group by TABLESPACE_NAME
) TFREE
where
	TABLESPACE_NAME = TNAME1 and
	TABLESPACE_NAME = TNAME2;
COLUMN FILE_NAME FORMAT A40
COLUMN TABLESPACE_NAME FORMAT A20
select FILE_NAME,TABLESPACE_NAME,ONLINE_STATUS
	from DBA_DATA_FILES;
EXIT


テーブルスペース名   タイプ             エクステント管理      サイズ(M)  使用量(M)
-------------------- ------------------ -------------------- ---------- ----------
SYSAUX               PERMANENT          LOCAL                       451 445.054976
SYSTEM               PERMANENT          LOCAL                       357   345.7024
UNDO                 UNDO               LOCAL                        94  87.949312
USERS                PERMANENT          LOCAL                       105   1.703936

FILE_NAME                                TABLESPACE_NAME      ONLINE_STATUS
---------------------------------------- -------------------- --------------
C:\ORACLEXE\ORADATA\XE\USERS.DBF         USERS                ONLINE
C:\ORACLEXE\ORADATA\XE\SYSAUX.DBF        SYSAUX               ONLINE
C:\ORACLEXE\ORADATA\XE\UNDO.DBF          UNDO                 ONLINE
C:\ORACLEXE\ORADATA\XE\SYSTEM.DBF        SYSTEM               SYSTEM
関連する記事

SQL*Plusだけで CSV を作成する


posted by lightbox at 2009-10-26 23:53 | Oracle | このブログの読者になる | 更新情報をチェックする

2009年08月20日


Oracle : 既存スキーマの状態をチェック

Oracle 一般の話ですが、テストは 10g Express で行っています
REM *********************************************************
REM 1行に表示する文字の最大数
REM 32767 は、SET LINESIZE と入力すると、
REM linesizeオプション 0が範囲(1から32767)外です。
REM と表示される
REM *********************************************************
SET LINESIZE 160

REM *********************************************************
REM PAGESIZEを 0に設定すると、ヘッダー、
REM ページブレーク、タイトル、初期空白行
REM その他の書式設定情報をすべて非表示にできます
REM *********************************************************
SET PAGESIZE 50

REM *********************************************************
REM ONを指定すると、スプール行の終わりの空白が削除されます
REM ( コンソール表示とは無関係です )
REM *********************************************************
SET TRIMSPOOL ON

REM *********************************************************
REM レコード数表示や確認メッセージを非表示にします
REM *********************************************************
SET FEEDBACK OFF

REM *********************************************************
REM 出力を、画面に表示しません
REM *********************************************************
SET TERMOUT OFF

REM *********************************************************
REM 結果をファイルに格納します
REM *********************************************************
SPOOL 既存スキーマリスト.txt

COLUMN USERNAME FORMAT A20
COLUMN ACCOUNT_STATUS FORMAT A20
COLUMN DEFAULT_TABLESPACE FORMAT A20
COLUMN TEMPORARY_TABLESPACE FORMAT A20
COLUMN INITIAL_RSRC_CONSUMER_GROUP FORMAT A25

select USERNAME,ACCOUNT_STATUS,
DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,INITIAL_RSRC_CONSUMER_GROUP
 from DBA_USERS
/

REM *********************************************************
REM スプールを停止します
REM *********************************************************
SPOOL OFF

REM *********************************************************
REM SQL*Plus を終了します
REM *********************************************************
EXIT

実行は SQL*Plusだけで CSV を作成する を参照して下さい。

10g Express インストール直後の結果は以下のようになります


USERNAME             ACCOUNT_STATUS       DEFAULT_TABLESPACE   TEMPORARY_TABLESPACE INITIAL_RSRC_CONSUMER_GRO
-------------------- -------------------- -------------------- -------------------- -------------------------
SYS                  OPEN                 SYSTEM               TEMP                 SYS_GROUP
SYSTEM               OPEN                 SYSTEM               TEMP                 SYS_GROUP
ANONYMOUS            OPEN                 SYSAUX               TEMP                 DEFAULT_CONSUMER_GROUP
MDSYS                EXPIRED & LOCKED     SYSTEM               TEMP                 DEFAULT_CONSUMER_GROUP
OUTLN                EXPIRED & LOCKED     SYSTEM               TEMP                 DEFAULT_CONSUMER_GROUP
DIP                  EXPIRED & LOCKED     SYSTEM               TEMP                 DEFAULT_CONSUMER_GROUP
TSMSYS               EXPIRED & LOCKED     SYSTEM               TEMP                 DEFAULT_CONSUMER_GROUP
FLOWS_FILES          EXPIRED & LOCKED     SYSAUX               TEMP                 DEFAULT_CONSUMER_GROUP
CTXSYS               EXPIRED & LOCKED     SYSAUX               TEMP                 DEFAULT_CONSUMER_GROUP
DBSNMP               EXPIRED & LOCKED     SYSAUX               TEMP                 DEFAULT_CONSUMER_GROUP
FLOWS_020100         EXPIRED & LOCKED     SYSAUX               TEMP                 DEFAULT_CONSUMER_GROUP
XDB                  EXPIRED & LOCKED     SYSAUX               TEMP                 DEFAULT_CONSUMER_GROUP
HR                   EXPIRED & LOCKED     USERS                TEMP                 DEFAULT_CONSUMER_GROUP




posted by lightbox at 2009-08-20 00:19 | Oracle | このブログの読者になる | 更新情報をチェックする

2009年08月19日


サービス開始 : Oracle 10g Express

Oracel_start

Oracle 10g Express Edition のインストール で、サービスは停止状態にしています。
使用する場合は、プログラムメニューの「データーベースの起動」を実行する事になります

これは、パッチファイルなのですが、一般の Oracle とは少しだけ起動処理が変わっていて、
サービスを起動した後に、インスタンスの起動をするようです。
net start OracleXETNSListener
net start OracleServiceXE
@oradim -startup -sid XE -starttype inst > nul 2>&1

XE は sid です。-starttype は インスタンスとして起動するという意味のようで
他に [-STARTTYPE srvc|inst|srvc,inst] と選択できます。
[-PFILE filename | -SPFILE] で環境を調整もできるようです


タグ:ORADIM
posted by lightbox at 2009-08-19 22:50 | Oracle | このブログの読者になる | 更新情報をチェックする

2009年08月16日


Oracle 10g Express Edition のインストール

ダウンロードに関しては、
Oracle Database 10g Express Edition (Universal) のダウンロード をご覧下さい。


開始画面




この二つの画面は普通に次へ






SYSTEM ユーザのパスワード

慣例的に、ここでは MANAGER と入力したとします。
( Oracle 7 当時のデフォルトパスワードです )




以降は実際のインストール画面








Oracle のインストールが終わったら、サービスが自動起動になっているので、「手動」に必ず変更しておきます

Oracle は本来専用 PC で運用するものなので、メモリや CPU にとても負荷がかかります。普段は必要無いですし、必要な時のみ起動するようにします。


Oracel_service


起動用のバッチファイルが登録されたメニュー

Oracel_start


posted by lightbox at 2009-08-16 19:37 | Oracle | このブログの読者になる | 更新情報をチェックする

2009年07月13日


Oracle : 貴重な擬似列 ROWID

Oracle は全てのテーブルに ROWID という列を持っており、明示する事によって表示する事ができますが、常にその値を使って更新が可能です。

主キーを持たない全く同じデータを複数行持つテーブルでも、1行毎にユニークに値を持つので更新する事ができます

ユーティリィティ(ツール)を作る場合に重宝します。( ADO のような API 経由ですと、bookmark を使います )
select ROWID,社員コード,給与 from 社員マスタ

ROWID社員コード給与
AAAGlMAAFAAAAFfAAA0001270000.
AAAGlMAAFAAAAFfAAB0002300000.
AAAGlMAAFAAAAFfAAC0003250000.
AAAGlMAAFAAAAFfAAD0004250000.
AAAGlMAAFAAAAFfAAE0005150000.
AAAGlMAAFAAAAFfAAF0006300000.
AAAGlMAAFAAAAFfAAG0007170000.
AAAGlMAAFAAAAFfAAH0008240000.
AAAGlMAAFAAAAFfAAI0009290000.
AAAGlMAAFAAAAFfAAJ0010180000.
▼ 更新
update 社員マスタ
	set 給与 = 500000
where
	ROWID = 'AAAGlMAAFAAAAFfAAA'



タグ:Oracle 擬似列
posted by lightbox at 2009-07-13 17:12 | Oracle | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり