SQLの窓

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 | このブログの読者になる | 更新情報をチェックする

VBS : SQLExpress(SQLServer) テーブルの正しい CREATE 文を取得する

概要

有償版の SQLServer ならばこんな苦労はしなくてもいいはずですが、SQL-DMO はこれ以外にも有用な処理がたくさんあるので、使えるにこした事はありません。

バックアップやリストアは、SQL から実行したほうが便利なので BCP と共に最も良く使う SQL-DMO の処理だと思います
if exists(select * from sysobjects where name = '商品マスタ' and type = 'U')
	drop table 商品マスタ
;
CREATE TABLE [商品マスタ] (
	[商品コード] [varchar] (4) COLLATE Japanese_CI_AS NOT NULL ,
	[商品名] [nvarchar] (50) COLLATE Japanese_CI_AS NULL ,
	[在庫評価単価] [int] NULL ,
	[販売単価] [int] NULL ,
	[商品分類] [varchar] (3) COLLATE Japanese_CI_AS NULL ,
	[商品区分] [varchar] (1) COLLATE Japanese_CI_AS NULL ,
	[作成日] [datetime] NULL ,
	[更新日] [datetime] NULL ,
	 PRIMARY KEY  CLUSTERED 
	(
		[商品コード]
	)  ON [PRIMARY] 
) ON [PRIMARY]
;


これは、出力した結果ですが if 文と削除のところは自前で作成しています。SQLExpress( SQLServer )のSQL実行は、セミコロンで文を区切って一度に実行できるので、上記 SQL は一回の呼び出しで実行可能です

関連する記事

PHP : SQLExpress(SQLServer) : SQL-DMO(COM) による CSV 出力

Set Fso = CreateObject( "Scripting.FileSystemObject" )
' ****************************************
' 定義テキスト取得
' ****************************************

Server = "NIGHT_TCP"		' 別名
Db = "lightbox"
User = "sa"
Pass = "passwordpassword"

ListTable = "社員マスタ,商品マスタ,得意先マスタ"
List = Split( ListTable, "," )

Dim objServer,objDatabase,objTable

' ****************************************
' オブジェクト作成
' ****************************************
on error resume next
Set objServer = CreateObject("SQLDMO.SQLServer")
if Err.Number <> 0 then
	Wscript.Echo "SQL-DMO はインストールされていません"
	Wscript.Quit
end if
on error goto 0

' ****************************************
' 接続
' ****************************************
on error resume next
Call objServer.Connect( Server, User, Pass )
if Err.Number <> 0 then
	Wscript.Echo "接続に失敗しました [" & Err.Description & "]"
	Wscript.Quit
end if
on error goto 0

' ****************************************
' データーベースオブジェクト取得
' ****************************************
on error resume next
Set objDatabase = objServer.Databases(Db)
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0


' ****************************************
' テキストファイル
' ****************************************
Set OutObj = Fso.OpenTextFile( "create_script.sql", 2, True )


' ****************************************
' テーブルオブジェクト
' ****************************************
on error resume next
For i = 0 to Ubound( List )

	Set objTable = objDatabase.Tables(List(i))
	if Err.Number <> 0 then
		Wscript.Echo Err.Description
		Wscript.Quit
	end if

	strDrop = "if exists(select * from sysobjects where name = '"
	strDrop = strDrop & objTable.Name & "'" & " and type = 'U')" & vbCrLf
	strDrop = strDrop & "	drop table " & objTable.Name & vbCrLf
	strDrop = strDrop & ";" & vbCrLf

	OutObj.Write strDrop 
	OutObj.Write Replace( objTable.Script() & "", "GO", ";" ) & vbCrLf

Next
on error goto 0

OutObj.Close()

' ****************************************
' 切断
' ****************************************
Call objServer.DisConnect()



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

2009年10月25日


PHP : SQLExpress(SQLserver) : COM による接続処理

概要

要するに ADO です。ADO はかなり信頼性のある安定した Windows におけるDB 処理の為の
選択肢です。PHP における COM は完璧ではありませんが、PHP 側のインターフェイスを使
うより、慣れている者にとっては問題点が容易に予想でき、既存のコードもあるていど
そのまま利用できるという長所があります。

一部日本語列名を使った参照に問題が出るので、連想配列に入れなおす必要がありますが、
この部分で他のキャラクタセットの対応が出来ますし、オリジナルオプションを付加する
チャンスでもあります
posted by lightbox at 2009-10-25 22:33 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2009年10月24日


PHP : PDO : SQLExpress(SQLServer)の読み込みと同時更新

前提条件
Visual Studio をインストール時にインストールされた SQLExpress の
設定は以下を参考にして下さい
SQLExpress 2005 の接続設定

単独でダウンロードしてインストールした場合は、上記ページと以下を参考にして下さい
SQLExpress 2005 のインストールから最速設定 

その上で以下よりデータとスクリプトをダウンロードしてテーブルを作成して下さい
VBS : SQLExpress(SQLServer) に 販売管理B を作成する 

上記販売管理Bの社員マスタには、生年月日が無いので以下の SQL を実行して下さい
alter table [社員マスタ] add 
	[生年月日] DATETIME

概要
PHP でデータベースにアクセスする場合、PDO を使用すると接続部分を変更するだけで、
一般的な処理ならば他のDBでも同じコードで済むというメリットがあります。
ただ、PHP は フリーソフトなので、データベースに対する対応については、利用する側
が十分に考察する必要があります。

PDO の SQLServer に対する見解として、オンラインマニュアルで以下のような記述を
見る事ができます
Windows では、Microsoft SQL Server や Sybase データベースにアクセスする際には
PDO_ODBC ドライバを使用すべきです。 Windows 版のネイティブの DB-LIB は時代遅れになっており、
スレッドセーフではない上に Microsoft にもサポートされていません。
要するに、PDO で SQLExpress で接続する場合は ODBC を使えという事です。
実際問題として、Windows では COM を使っても十分動きますし、SQLServer 特有の
処理は、おそらく SQL-DMO を COM 経由で処理すると動くと思いますし、一般的
な処理であれば、ODBC を使うのが最も安全でしょう
posted by lightbox at 2009-10-24 23:11 | SQLExpress | このブログの読者になる | 更新情報をチェックする

2009年10月22日


VB.net : 自分自身(というか元々プロテクトメソッド)を呼び出す遅延処理用プライベートタイマークラス

Convert VB.NET to C#

概要

Windows APIというか、C++ なら PostMessage するような処理ですが、VB.NET でざっと見当たらないのでてっとり早いタイマーを使いました。

最初フォームにコントロールを貼り付けて作ってテストすると、記述が分散してしまってまとまり悪いのでサブクラスを作成しました。

Start メソッドを呼び出すことは、Enabled を true に設定することと同じです。 同様に、Stop メソッドを呼び出すことは、Enabled を false に設定することと同じです。
Private tm As myTimer = New myTimer()
' **************************************************
' 遅延フォーカス用プライベートクラス
' **************************************************
Private Class myTimer
	Inherits System.Windows.Forms.Timer

	Private _col As Integer
	Private _row As Integer

	' ******************************************
	' タイマーによって呼び出される
	' ※ ここでフォーカス処理を実行
	' ******************************************
	Protected Overrides Sub OnTick(ByVal e As System.EventArgs)
		MyBase.OnTick(e)

		' タイマーを止める
		Me.Enabled = False
		' フォーカス処理
		Form1.LboxGrid1.CurrentCell = Form1.LboxGrid1(_col, _row)
	End Sub

	' ******************************************
	' ここを呼び出して、タイマーを起動させる
	' ※ しかしここではフォーカス処理は実行なし
	' ******************************************
	Public Sub setCellFocus(ByVal row As Integer, ByVal col As Integer)

		_col = col : _row = row
		Me.Interval = 50
		Me.Enabled = True

	End Sub
End Class

元々の記事

伝票入力に最適化した DataGridView


posted by lightbox at 2009-10-22 21:58 | VB.NET : テクニカル | このブログの読者になる | 更新情報をチェックする

ODBC 用 JDBC : 動的接続 / SQLExpress(SQLServer) / 読み込みながらの行更新

概要

結局更新する為に接続が二つ必要でした。
フィールド単位のデータセットはうまくいかず、結局SQLを作成する
のがやはり無難という結果です

列データの取得、保存、読み出し等はクラスにすべきですが、
この先はサンプルとしては効果が薄いのではしょりました。
posted by lightbox at 2009-10-22 17:34 | SQLExpress | このブログの読者になる | 更新情報をチェックする
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 ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり