< August 2003 | September 2003 | October 2003 >

September 30, 2003

複数列のVLOOKUP

Excelで、別シートから1つの項目をキーにして、他の項目を参照したりするのに、VLOOKUP関数は便利だよね。

VLOOKUP(検索値,範囲,列番号,検索の型)

でも、たとえば、DB設計書を作る場合を考えてみよう。
DB設計って、1つの項目、たとえば在庫管理システムなら、品種のコードなんて項目、品種マスタ表にも、在庫表にもあって、同じデータ型、同じ桁数、同じデータ範囲だよね。
じゃあ、テーブルで必要な列の各属性をまとめたシートを1つ作って、各表の設計書は列名をキーにそのシートを参照しようって思ったとしよう。列名は項目一覧ってシートのB列。
とりあえずデータ型を参照する式をC2のセルに入力するとこんな感じとする。
=IF($B2="","",VLOOKUP($B2,'項目一覧'!$A$1:$E$100,2,FALSE))

で、次は桁数。セルはD2。
=IF($B2="","",VLOOKUP($B2,'項目一覧'!$A$1:$E$100,3,FALSE))

で、次はデータ範囲
=IF($B2="","",VLOOKUP($B2,'項目一覧'!$A$1:$E$100,4,FALSE))

みての通り、列番号以外は同じ式。でも、列番号が違うばっかりに、オートフィルで式を入力したりできなくって、コピーしたあと各列に合わせて列番号を修正する羽目に。間にやっぱり項目の日本名もいれなきゃってなったら、またやり直しだ。
そこで以下のように配列数式で上手にできないかなーと考えてみた。

続きを読む...

September 29, 2003

私家版QuickSort

私家版VB用QuickSort関数です。

私家版といってももともとはWeb上のソースで、それに手を加え、手を加えしながら暖めているものです。
もう出展も忘れてしまいましたが、このロジックそのものは有名なので、まあいいでしょう。

続きを読む...

September 26, 2003

実行計画を調べる(SQLServer編)

SQLServerやMSDEの場合は、SHOWPLAN_ALLまたはSHOWPLAN_TEXTオプションを設定すると、以降発行するSQLはすべて実際には実行されず、実行計画を表示する、という感じになります。

C:\>osql -U username -P password -S servername
1> SET SHOWPLAN_TEXT ON
2> GO 
1> 
通常の実行モードに戻すのは、ONをOFFに変えて、同じ操作を行います。
SHOWPLAN_TEXTより、SHOWPLAN_ALLの方が情報量が多いですが、OSQLでSHOWPLAN_ALLを使用すると、列数が多いため表示が折り返してわけがわからなくなります。
SHOWPLAN_TEXTを使用するか、Common SQL Environment等、実行結果をグリッドに表示できるようなSQL実行ツールを使用するのがお勧めです。

実行計画を調べる(Oracle編)

Oracleの場合はPLAN_TABLEをあらかじめ作っておく必要があります。

C:\>cd %ORACLE_HOME%\rdbmsxx\admin
C:\...\admin>sqlplus sys/oracle@mylisner

SQL*Plus: Release 9.2.0.1.0 - Production on 金 Sep 26 11:14:17 2003

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL>@utlxplan.sql
.
.
SQL>GRANT SELECT ON SYS.PLAN_TABLE TO PUBLIC;
SQL>GRANT INSERT ON SYS.PLAN_TABLE TO PUBLIC;
SQL>GRANT UPDATE ON SYS.PLAN_TABLE TO PUBLIC;
SQL>GRANT DELETE ON SYS.PLAN_TABLE TO PUBLIC;
SQL>CREATE PUBLIC SYNONYM PLAN_TABLE FOR SYS.PLAN_TABLE;
SQL>
実際に実行計画を取得するのは以下のようにします。
/* 実行計画をPLAN_TABLEに取得します */
TRUNCATE PLAN_TABLE;
EXPLAIN PLAN SET STATEMENT_ID='PLANTEST' FOR		-- コマンドの構文(文頭部)
	SELECT e.empno, e.ename, d.dname FROM scott.emp e, scott.dept d WHERE e.deptno=d.deptno;	-- ターゲットSQL文

/* テーブルの中身を整形して表示します。 */
SELECT DECODE(id,0,'', LPAD(' ',3*(level-1))||level||'.'||position)||' '||operation||' '||options||' '||object_name||' '||
       object_type||' '||DECODE(id,0,'Cost = '||position) QUERY
  FROM plan_table CONNECT BY PRIOR id = parent_id AND statement_id = 'PLANTEST'
  START WITH id = 0 AND statement_id = 'PLANTEST';

September 25, 2003

SQL*Plus のデフォルトエディタ

よくあるTipsですが、EDコマンドで起動するエディタを変更するには

SQL>SET define_editor = '任意のエディタ'
とします。
つねに同じエディタを使用する場合は %ORACLE_HOME%/sqlplus/admin/glogin.sql に下記の一行を追加します

define_editor = '任意のエディタ'

September 22, 2003

INDEXについての基本的なこと

今頃何言ってんだいというかんじだが、よく考えたらINDEXに関して正しい知識がなかった。

そんなもん知ってる気でいたんだけど、先週、あれ、そうだったの?ってことを指摘されて気付いた。

てなわけで、今日はインデックスのお勉強。

まずはテーブルを定義

CREATE TABLE m_struct(
	struct_id	CHAR(4), 
	struct_name	VARCHAR2(64), 
	module_name	VARCHAR2(24), 
	add_date	CHAR(8)	DEFAULT TO_CHAR(SYSDATE, 'YYYYMMDD'), 
	add_time	CHAR(6)	DEFAULT TO_CHAR(SYSDATE, 'HHMISS'), 
	CONSTRAINT pk_m_struct PRIMARY KEY(struct_id) 
)

CREATE TABLE m_struct_member(
	struct_id	CHAR(4), 
	member_id	CHAR(4), 
	member_name	VARCHAR2(64), 
	member_type	VARCHAR2(64), 
	add_date	CHAR(8)	DEFAULT TO_CHAR(SYSDATE, 'YYYYMMDD'),
	add_time	CHAR(6)	DEFAULT TO_CHAR(SYSDATE, 'HHMISS'),
	CONSTRAINT pk_m_struct_member PRIMARY KEY(struct_id, member_id)
)

うーん、なにか、構造体の情報を格納するテーブルらしいですね。

続きを読む...

リンク追加

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/tsqlref/ts_tsqlcon_6lyk.asp
http://homepage2.nifty.com/sak/
http://www.oracle.co.jp/interactive/Techniques/VLDB/
http://www.roboken.esys.tsukuba.ac.jp/~satofumi/damebu/project/dProject/sqlText_06.html
http://www.arsys.co.jp/Oracle/p-1.html
http://www.hi-ho.ne.jp/tsumiki/
http://tsubosak.hp.infoseek.co.jp
http://rina.jpn.ph/~rance/om/
http://www.amy.hi-ho.ne.jp/yoshiko/oracle/tech/
↓indexチューニング
http://www.ad.cyberhome.ne.jp/~milmil/oracle/index-tuning1.html
http://www.int21.co.jp/pcdn/oracle/
http://ash.jp
↓関数インデックスなど
http://cgi.html.ne.jp/~nika/orcl_mst/
http://hiracle.hp.infoseek.co.jp/tech/techmain.htm

Sosumi

Mac OS 7 からの警告音で、涼やかな「シャン!」という音は愛用したものですが、
語源は「so sue me」(訴えてみな)なんだって。
詳しくはスラドの記事のコメントで。

September 21, 2003

ADOを使用してEUC-JPのファイルをShift_JISに変換する

EUCの文字コード変換を行う場合、NKF For Win32、またはNKF32.DLLを使用するのが一般的でしょう。

これはこれで、VBから使用するサンプルも多く、特に難しいと言うこともないのですが、ADOを使用可能なら、もっと簡単にできちゃいます。

サンプルはASPなのでVBScriptですがVBからもほぼ同じ。Server.CreateObjectをCreateObject関数に置き換えるか、参照設定して

    Set oEucStream = New ADODB.Stream
とすれば動かすことができます。

続きを読む...

September 19, 2003

OracleのテーブルをAccessよりリンクすると・・・?

今日、出た話。
OracleのテーブルをODBCでAccessよりリンクテーブルとして参照すると・・・
VARCHAR2の列はCHAR(固定長文字列)型として認識されてしまう、とか。
現象としては、hogehoge VARCHAR2(10)と定義された列に、
と定義された列に、'Oracle'という文字列を格納したとして、
Accessより参照すると

0----+----1----+----2
'Oracle '

となってしまうそうな。
今手元に実験のできるOracle環境がないため未確認だが、
機会があれば他のデータ型も含め、Accessから何型として認識されるか試してみたい。

September 17, 2003

WinPcap

http://winpcap.polito.it

マニュアル
構造体、関数があるようだ。VBからコールできるかな?

ついでにWindumpはここ

続きを読む...

ログイン関連のストアドプロシージャ

Transact-SQLリファレンス参照

--ログインの追加
sp_addlogin [ @loginame = ] 'login'
    [ , [ @passwd = ] 'password' ]
    [ , [ @defdb = ] 'database' ]
    [ , [ @deflanguage = ] 'language' ]
    [ , [ @sid = ] sid ]
    [ , [ @encryptopt = ] 'encryption_option' ]
--ログインをDBにアクセス可能にする
sp_grantdbaccess [@loginame =] 'login'
    [,[@name_in_db =] 'name_in_db' [OUTPUT]]
--ログインをロールのメンバに追加する
sp_addrolemember [ @rolename = ] 'role' ,
    [ @membername = ] 'security_account'

September 12, 2003

データバインドに関するドキュメント

MSDN Japan Home
 > 
MSDN Library Japan
 > 
ダイナミック HTML
 > 
データバインド

http://msdn.microsoft.com/library/default.asp?url=/workshop/database/tdc/tabular_data_control_node_entry.asp

September 11, 2003

XML/XSLを勉強しよう

http://www18.tok2.com/home/koumori27/xml/

続きを読む...

起動時にNumLockをONに

Windows 2000/Xpで、NumLockがONの状態で起動する方法。
毎回調べるけど、ぜんぜん覚えられないので。


キー:HKEY_USERS\.DEFAULT\Control Panel\Keyboard
文字列値:InitialKeyboardIndicators
0ならOFF
2ならON

September 10, 2003

MSDEで統合Windows認証<->SQLServer認証を切り替える

レジストリを編集することで、変更可能です。

以下を拡張子regで保存して、レジストリに追加するか、
該当キーをレジストリエディタで変更し、MSDEを再起動します。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
"LoginMode"=dword:00000002

LoginModeの値は、

認証
統合Windows認証 1
SQL Server認証 2
となります。

September 9, 2003

MSDEにSPを適用する

仕事で使用するにあたり、MSDEの環境を作成することになりました。 セキュリティーホールがあるとのことで、SPを適用する段になり、SP3を入手しました。
SP3は2003/9/9現在、ここからダウンロードすることができます。
(jpn_sql2kdesksp3.exe)

続きを読む...

September 5, 2003

UML

http://www.asahi-net.or.jp/~dp8t-asm/java/