Technical

DB

DAO Data Access Objects
   アプリケーションから、Jetデータベース・エンジンとODBC経由の
データベースを制御するためのデータ・オブジェクト
Jetを使った小規模アプリケーションに向いています。
ODBCドライバーを経由させればSQLServerやOracleなども
RDBMSに接続できるが、データベース・エンジンのパフォーマンスを
十分に生かすことはできません。
RDO Remote Data Objects
ODBCドライバーを介したRDBMSとの接続機能を充実させ、
SQLServerやOracleなど大規模システム向けのRDBMSを使って
クライアント/サーバー環境を構築する目的で開発された。
基本的な機能はDAOと同様だが、Jet接続には不向きです。
ADO ActiveX Data Objects
  DAOとRDOの機能を統合し、Jetを使った小規模な開発から
SQLServerなどによる大規模なクライアント/サーバー環境の
開発までカバー出来るように開発された。OLEDBによってRDBMS
にネイティブに接続でき、各種データベース・エンジンに対する適応性
も高く、処理効率も向上しています。
oo4o Oracle Object for OLE
 
手法 SDI
 
 
DAO Data Access Objects
○利点
■すべて、AccessのSQL文で統一できる
×欠点
■トータルでみると、SELECT文の発行回数が2倍になっている
■主キーがないテーブルは更新できない
■主キーが10個以上あるテーブルは更新できない(Jetエンジンの制限)
■AccessSQLからPL/SQLに変換するときのオーバーヘッド
■カーソルの2重管理のオーバーヘッド
■Jetエンジンのカーソル管理でメモリ不足が発生したときのオーバーヘッド
RDO Remote Data Objects
○利点
■PL/SQLに基づいたSELECT文を記述できる
■レコードセット作成およびレコード取得などのオーバーヘッド軽減
■更新可能なレコードセットが作成できる
×欠点
■性能的に有利なサーバーカーソルではバージョンによって動作不能となる
■安定しているODBCカーソルでは、更新件数が増加すると性能が急激に劣化する
ODBC Direct RDO2.0がロードされる
○利点
■PL/SQLに基づいたSELECT文を記述できる
■レコードセット作成およびレコード取得などのオーバーヘッド軽減
■更新可能なレコードセットが作成できる
×欠点
■性能的に有利なサーバーカーソルではバージョンによって動作不能となる
■安定しているODBCカーソルでは、更新件数が増加すると性能が急激に劣化する
*DAO3.5からODBC Directを使うときは、CreateWorkspaceメソッドで
ODBC Directワークスペースを作成する
DB PostgreSQL 7.3.4 ユーザガイド
DB2 インフォメーション・センター
   
i5 SELECT T2.COLUMN_NAME, T2.COLUMN_HEADING, T2.ORDINAL_POSITION,
T2.DATA_TYPE, T2.LENGTH, T2.NUMERIC_SCALE
FROM QSYS2.SYSTABLES T1, QSYS2.SYSCOLUMNS T2
WHERE T2.TABLE_SCHEMA = T1.TABLE_SCHEMA AND ((T1.TABLE_SCHEMA='SX'||'DLIB')
AND
 (T2.TABLE_NAME=T1.TABLE_NAME) AND (T1.TABLE_NAME='SXB000T'))
ORDER BY T2.ORDINAL_POSITION
   
sql SELECT SUM(CAST(SKIRO AS NUMERIC)) FROM xx.xxxxxxx
   
sql SELECT * FROM xx.xxxxxxx with(nolock) sqlserver / with ur UDB
   
sql SUBSTR(CHAR(CURRENT DATE - 3 MONTHS,ISO),1,4) || SUBSTR(CHAR(CURRENT DATE - 3 MONTHS,ISO),6,2)
   
sql UPDATE Reserve SET ResFlag = '1',TMS = CURRENT TIMESTAMP WHERE 
TO_CHAR(DateTime,'HH24:MI:SS') >= '08:00:00' AND 
TO_CHAR(DateTime,'HH24:MI:SS') < '23:00:00'
   
sql select xxx,CONVERT(VARCHAR(8), 作成日時, 112) AS 日付,count(*) AS 件数
from tbl
GROUP BY xxx,CONVERT(VARCHAR(8), 作成日時, 112)
order by xxx,CONVERT(VARCHAR(8), 作成日時, 112)
   
sql RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 
select NAME, SAL, rank() over(order by SAL desc) rank from temp; 
NAME SAL RANK 
---------- ---------- ---------- 
AAA 5000 1 
BBB 3000 2 
CCC 3000 2 
DDD 2975 4 
DENSE_RANK ( ) OVER ( [query_partition_clause] order_by_clause ) 
select NAEM, SAL, dense_rank() over(order by SAL desc) rank from temp; 
NAME SAL RANK 
---------- ---------- ---------- 
AAA 5000 1 
BBB 3000 2 
CCC 3000 2 
DDD 2975 3
   
sql select * fromReserve where char(updtms) like '2003%'
   
sql full outer join
   
sql WITH
CALENDAR(HIDUKE) AS
(
SELECT CAST('2012/02/01'AS DATETIME)
UNION ALL
SELECT DATEADD(dd,1,A.HIDUKE) FROM CALENDAR A
WHERE A.HIDUKE < DATEADD(DAY,-1,DATEADD(MONTH,1,CAST('2012/02/01'ASDATETIME)))
)
SELECT
HIDUKE,DATENAME(WEEKDAY,HIDUKE)
FROM
CALENDAR
   
sql 【結合を含んだデータの更新】
・SQL-Serverの場合
UPDATE table1 
SET COL1 = B.COL1
FROM table1 A
INNER JOIN table2 B ON 
A.CD1 = B.CD1 

・Oracleの場合
UPDATE
(SELECT 
A.COL1 A_COL,
B.COL2 B_COL
FROM
table1 A
INNER JOIN 
table2 B
ON 
A.CD1 = B.CD1)
SET A_COL = B_COL
   
sql 【重複データの更新】
・SQL-Serverの場合
UPDATE tblDATA
SET ERR = 1
FROM tblDATA as t1
WHERE exists
(SELECT *
FROM tblDATA as t2
WHERE t1.DATA1 = t2.DATA1
AND t1.DATA2 = t2.DATA2 
AND t1.DATA3 = t2.DATA3 
having count(*) > 1)
   
sql WITH
U008 AS (SELECT KEY,NAME FROM M WHERE TBLID ='U008'),
U058 AS (SELECT KEY,NAME FROM M WHERE TBLID ='U058')
SELECT U052.KEY,U008.NAME,U058.NAME FROM M AS U052
LEFT JOIN U008 ON U052.ITEM03 = U008.KEY
LEFT JOIN U058 ON U052.ITEM12 = U058.KEY
WHERE U052.TBLID ='U052'
   
sql NULLIF 関数 - 値が等しいときに NULL を返す -
   
sql COALESCE(aaa,0) null -> zero
   
sql  select aitecd,'1' as shrjcd  from TBL1
where not exists(select aitecd from TBL2 where TBL1.aitecd =TBL2.aitecd)
   
sql WITH
 AAA (AA,BB,CC) AS
  (SELECT SYO,NEN,NO FROM xxx.xxxxT)
SELECT AA,BB,CC FROM AAA
   
sql SELECT CCD, GCD, KTYYM
FROM TBL1 AS A
WHERE A.KTYYM>="200604"
AND
NOT EXISTS (
SELECT CCD, GD, KTYYM
FROM TBL2 B
WHERE KTYYM="200604" AND A.GCD=B.GCD)

select * from dept A
where not exists( select 'X' from emp B where A.dept_id = B.dept_id );
   
sql CASE KBN
     WHEN '1' THEN 'グー'
     WHEN '2' THEN 'チョキ'
     WHEN '3' THEN 'パー'
     ELSE NULL END,
   
sql select no,
sum(case month(aat.ysnymd) when 04 then gk else null end) as
"4月",
sum(case month(aat.ysnymd) when 05 then gk else null end) as
"5月",
sum(case month(aat.ysnymd) when 06 then gk else null end) as
"6月",
sum(case month(aat.ysnymd) when 07 then gk else null end) as
"7月",
sum(case month(aat.ysnymd) when 08 then gk else null end) as
"8月",
sum(case month(aat.ysnymd) when 09 then gk else null end) as
"9月",
sum(case month(aat.ysnymd) when 10 then gk else null end) as
"10月",
sum(case month(aat.ysnymd) when 11 then gk else null end) as
"11月",
sum(case month(aat.ysnymd) when 12 then gk else null end) as
"12月",
sum(case month(aat.ysnymd) when 01 then gk else null end) as
"01月",
sum(case month(aat.ysnymd) when 02 then gk else null end) as
"02月",
sum(case month(aat.ysnymd) when 03 then gk else null end) as
"03月",
from
waa002t
   
db2cmd -c 
コマンドを実行してから終了します。たとえば、"db2cmd /c dir" というコマンドを使用すると、
 "dir" コマンドがコマンド・ウィンドウに呼び出されてから、コマンド・ウィンドウがクローズします。 
-w 
cmd.exe プロセスが終了するまで待機します。たとえば、"db2cmd /c /w dir" というコマンドを使用すると、
 "dir" コマンドが呼び出され、コマンド・ウィンドウがクローズするまで、 db2cmd.exe は終了しません。 
-i 
同じコンソールを共用し、ファイル・ハンドルを継承して、コマンド・ウィンドウを実行します。たとえば、
"db2cmd /c /w /i db2 get dbm cfg > myoutput" を使うと、 cmd.exe が起動して DB2 コマンドを実行し、
完了を待機します。新しいコンソールは割り当てられず、stdout がファイル "myoutput" にパイプ接続されます。 
-t 
"DB2 CLP" をコマンド・ウィンドウのタイトルに使用する代わりに、起動ウィンドウからタイトルを継承します。
これは、たとえば "db2cmd /t" を起動する異なるタイトルでアイコンを設定したい場合などに役立ちます。 
   
 bat
a.bat
db2cmd /c /w /i C:\temp\bat\b.bat > aaa.txt
b.bat
db2 -tvf connect.sql
db2 -tvf reset.sql
   
 export EXPORT TO C:\exp\tbl1 OF DEL MESSAGES C:\exp\tbl1.log SELECT * FROM tbl1;
   
 export export.bat
db2cmd /c /w /i db2 -tvf D:\export.txt
export.txt
connect to DB user USER using PASS;
export to D:\100t_hon.ixf of ixf messages D:\msgs.txt
select * from 100t where ktyym in('200302','200303');
 
 import import.bat
db2cmd /c /w /i db2 -tvf D:\import.txt
import.txt
connect to DB user USER using PASS;
import from D:\100t_hon.ixf of ixf messages D:\msgs.txt
replace into 100t;

import Linux->Win NT 文字化け回避
IMPORT FROM I:\temp\xxxx300t.ixf OF IXF MODIFIED BY forcein
indexschema=ADMINISTRATOR MESSAGES I:\temp\xxxx300t_imp.txt REPLACE
INTO xx.xxxx300T
replaceはimport内容ですべて置き換える

IMPORT FROM "xxx.ixf" OF IXF MODIFIED BY IDENTITYIGNORE COMMITCOUNT 10000 
MESSAGES "msg.txt" INSERT INTO xxx; IDENTITYIGNOREを無効
 
 オプション ・フラグ 説明:デフォルト設定 
    -a SQLCA データを表示します。 :OFF 
    -c SQL ステートメントを自動的にコミットします。 :ON 
    -e{c|s} SQLCODE または SQLSTATE を表示します。この 2 つのオプションは相互に排他的です。 :OFF 
    -f filename コマンド入力を標準入力ではなくファイルから読み取ります。 :OFF 
    -l filename コマンドをヒストリー・ファイルに記録します。 :OFF 
    -n 単一の区切りトークン内の改行文字を除去します。このオプションを指定しない場合、
改行文字はスペースで置換されます。このオプションは、-t オプションと共に使用する必要があります。 :OFF 
    -o 出力データおよびメッセージを標準出力に表示します。 :ON 
    -p 対話型入力モードのときにコマンド行プロセッサー・プロンプトを表示します。 :ON 
    -r filename コマンドが生成した報告をファイルに書き込みます。 :OFF 
    -s バッチ・ファイルまたは対話式モードでコマンドを実行中にエラーが発生した場合、実行を停止します。 :OFF 
    -t セミコロン (;) をステートメント終了文字として使用します。 :OFF 
    -tdx x をステートメント終了文字として定義し、使用します。 :OFF 
    -v コマンド・テキストを標準出力にエコーさせます。 :OFF 
    -w SQL ステートメント警告メッセージを表示します。 :ON 
    -x 列名などのヘッダーなしでデータを戻します。 :OFF 
    -z filename すべての出力をファイルにリダイレクトします。
これは -r オプションと似ていますが、出力の他にメッセージやエラー・コードも含まれます。 :OFF 

・複数行にまたがるSELECT文を実行する -> 改行の前に '\' を記述する。
 
 
sql SELECT T1.GRPCD FROM xx.T0 T0 JOIN xx.T0 T1 ON
T0.CORPCD = T1.CORPCD AND T0.GRPCD = T1.KKKGRPCD
WHERE T0.CORPCD = 'xx' AND T0.KENGEN = '0000'
 
sql i5
sql(1) = "SELECT T2.COLUMN_NAME, T2.COLUMN_HEADING, T2.ORDINAL_POSITION, "
sql(2) = "T2.DATA_TYPE, T2.LENGTH, T2.NUMERIC_SCALE "
sql(3) = "FROM QSYS2.SYSTABLES T1, QSYS2.SYSCOLUMNS T2 "
sql(4) = "WHERE T2.TABLE_SCHEMA = T1.TABLE_SCHEMA AND ((T1.TABLE_SCHEMA='" & wlib & "') AND "
sql(5) = " (T2.TABLE_NAME=T1.TABLE_NAME) AND (T1.TABLE_NAME='" & wtbl & "')) "
sql(6) = "ORDER BY T2.ORDINAL_POSITION "

udb
sql(1) = "SELECT T2.NAME,T2.REMARKS,T2.COLNO,COLTYPE,LENGTH,SCALE FROM "
sql(2) = "SYSIBM.SYSTABLES T1, "
sql(3) = "SYSIBM.SYSCOLUMNS T2, "
sql(4) = "SYSIBM.SYSTABAUTH T3 WHERE "
sql(5) = "T2.TBCREATOR = T1.Creator "
sql(6) = "AND T2.TBNAME=T1.NAME "
sql(7) = "AND T1.CREATOR=T3.TCREATOR "
sql(8) = "AND T1.NAME=T3.TTNAME "
sql(9) = "AND T1.NAME = '" & UCase(Worksheets("main").Cells(31, 3).Value) & "' "
sql(10) = "AND T3.GRANTEE = 'DB2INST1' "
sql(11) = "ORDER BY T2.COLNO"

sqlserver
sql(1) = "SELECT T1.name,T1.max_column_id_used,T2.name,T2.user_type_id,T2.column_id,T2.max_length FROM "
sql(2) = "sys.tables T1,sys.columns T2 WHERE "
sql(3) = "T1.object_id = T2.object_id AND T1.name = '" & strTbl & "'"
sql(4) = "ORDER BY T2.column_id"

167 varchar
56 int
106 dec
61 datetime
select T1.name,T1.max_column_id_used,T2.name,T2.user_type_id,T2.column_id,T2.max_length FROM
sys.tables T1, sys.columns T2 WHERE
T1.object_id = T2.object_id AND T1.name = 'xxxx'
ORDER BY T2.column_id
 
sql LOCK TABLE DEPARTMENT IN EXCLUSIVE MODE
 
sql INSERT INTO テーブル SELECT * FROM テーブル1
 
sql INSERT INTO xx.T0 (aaa,bbb,ccc,ddd) VALUES (?,?,?,?)
 
sql CASE WHEN XXX IS NULL THEN '' ELSE XXX END AS YYYY,
 
sql WITH HOLDは、カーソルを生成したトランザクションが終了した後でも
そのカーソルを続行できることを指定します。 
WITHOUT HOLD
は、カーソルを生成したトランザクションの外部では、
そのカーソルを使用できないことを指定します。
 WITH HOLDWITHOUT HOLDも指定されない場合、WITHOUT HOLDがデフォルトとなります。
 
sql INSERT INTO xx.T0 (aaa,bbb,ccc,ddd)
SELECT aaa, 'bbb',ccc,ddd FROM xx.T0
WHERE aaa ='xx' AND bbb='xx' AND ccc='xx' AND dd='xx'
 
sql >=#2003/04/24# WHERE (T.CRETMS>={ts '2003-04-24 00:00:00'})
 
 
sql SELECT xxxt.id,
case (month(xxxt.ymd))
 when 04 then 0
 when 05 then 0
 when 06 then 0
 when 07 then 0
 when 08 then 0
 when 09 then 0
 else 1 end as hanki
from
 
sql select row_number()  over(order by act.aitecd desc) ,
 
sql select * from sys.databases 
 
sql Oracle 追加 SQL 日付 変換to_date('" & wrow & "', 'yyyy/mm/dd hh24:mi:ss')
 
sql TRUNCATE TABLE (Transact-SQL)
 
sql select * from tbl where id>=100 fetch first 5 rows only

SELECT TOP(Z) * FROM X
EXCEPT 
SELECT TOP(Z-1) * FROM X

update aa a set a.c3=coalesce(a.c3,a.c3) 
where (a.c1, a.c2 ) in ( select c1,c2 from aa b 
where b.c1=0 order by c2 fetch first 5 rows only

SELECT Y FROM (SELECT Y,ROW_NUMBER() OVER (ORDER BY Y) 
AS RowNumber FROM X ) AS T WHERE RowNumber = Z )
 
sql 例:この EXCEPT の例は、T1 に存在し、T2 に存在しない行をすべて生成します。
(SELECT * FROM T1) EXCEPT ALL (SELECT * FROM T2)
NULL 値が含まれていない場合、この例は次の例と同じ結果を戻します。
SELECT ALL * FROM T1 WHERE NOT EXISTS (SELECT * FROM T2
WHERE T1.C1 = T2.C1 AND T1.C2 = T2.C2 AND...)

例:この INTERSECT の例は、表 T1 と T2 の両方にあるすべての行を生成し、
重複した行を除去します。

(SELECT * FROM T1) INTERSECT (SELECT * FROM T2)

NULL 値が含まれていない場合、この例は次の例と同じ結果を戻します。
SELECT DISTINCT * FROM T1
WHERE EXISTS (SELECT * FROM T2
WHERE T1.C1 = T2.C1 AND T1.C2 = T2.C2 AND...)

ここで、C1、C2、などは T1 と T2 の列を表します。
 
sql DECLARE CURSORのWITH HOLDオプション 
CLOSEカーソルのWITH RELEASEオプション 
SELECTのFETCH n ROWS ONLY 
SET CURRENT ISOLATION (V8.1FP2) 
SET LOCKTIMEOUT (V8.2) 
SET KEEP UPDATE LOCKS (V8.2) 
 
alter ALTER  TABLE xxx.xxxA100T
  ADD  abc   DEC    (  5,2  ) NOT NULL WITH DEFAULT
  ADD  efg   DEC    (  5,2  ) NOT NULL WITH DEFAULT;
COMMENT ON  xxx.xxxA100T (
       abc IS  '(計画)',
       ehf IS  '(実績)') ;
 
CALENDAR WITH
CALENDAR(HIDUKE) AS 
(
SELECT CAST('2012/02/01'AS DATETIME)
UNION ALL
SELECT DATEADD(dd,1,A.HIDUKE) FROM CALENDAR A
WHERE A.HIDUKE < DATEADD(DAY,-1,DATEADD(MONTH,1,CAST('2012/02/01'ASDATETIME)))
)
SELECT 
HIDUKE,DATENAME(WEEKDAY,HIDUKE)
FROM
CALENDAR
 
参照制約
sql
select constname, tabname, refkeyname, reftabname, 
colcount, deleterule, updaterule,fk_colnames from syscat.references order by reftabname
where tabname='xxx'
 
参照制約
sql
select t2.constname, t2.tabname, t2.refkeyname, t2.reftabname, t2.colcount, t2.deleterule, t2.updaterule,t2.fk_colnames
FROM SYSIBM.SYSTABLES T1, syscat.references T2 where T1.Creator ='xxx' AND 
T1.NAME=t2.tabname and t1.tbspace='xxxSPACE' order by t2.reftabname
 
参照制約
sql
外部キー制約のチェック・ペンディング状態の確認と解消
select TABNAME,STATUS,ACCESS_MODE from SYSCAT.TABLES where STATUS='C'
 
参照制約
alter
ALTER TABLE xxx ADD 
CONSTRAINT xxx000 FOREIGN KEY(xxx_001,xxx_002)  REFERENCES xxx (xxx_001,xxx_002) ON DELETE CASCADE;
 
参照制約
alter
ALTER TABLE xxx DROP CONSTRAINT xxx000;
ALTER TABLE xxx DROP FOREIGN KEY xxx000 ;;
 
create CREATE SEQUENCE ORG_SEQ
     START WITH 1
     INCREMENT BY 1
     NO MAXVALUE
     NO CYCLE
     CACHE 24

INSERT INTO seiseq (NEXTVALUE,COLNAME)
  VALUES (NEXTVAL FOR ORG_SEQ, 'test1')
CREATE TABLE xxxxt
     (
     systblno             VARCHAR(4)   NOT NULL  ,
     systblcd             VARCHAR(20)  NOT NULL  ,
     systblnm             VARCHAR(100)           ,
     systblfree           VARCHAR(200)           ,
     pms_i_ymd            TIMESTAMP    DEFAULT CURRENT TIMESTAMP NOT NULL,
     pms_i_usr            VARCHAR(32)  DEFAULT USER NOT NULL,
     pms_i_class          VARCHAR(128)           ,
     pms_u_ymd            TIMESTAMP              ,
     pms_u_usr            VARCHAR(32)            ,
     pms_u_class          VARCHAR(128)           ,

     CONSTRAINT PRI PRIMARY KEY (systblno, systblcd));

insert into xxxxt (systblno,systblcd,systblnm)  values ('test','ak','')
select * from waz010t where systblno = 'test' and systblnm = ''

update waz010t set systblnm = null where systblno = 'test'
select * from xxxxt where systblno = 'test' and systblnm is null
command db2 list applications
db2 list applications show detail/more
db2 list applications for database XXdb show detail
db2 'force application(Appl.Handle1, Appl.Handle2, ・・・)'
db2 force applications all
db2 ? force
db2 list node directory
db2 ATTACH to TCP0000 user inst1 using db2
command db2 "load from /dev/null of del replace into TABLE nonrecoverable"
command C:\>db2look -d nnDB -u nn -a -e -t KOJIN -o aaa.sql -i db2admin -w db2admin
command db2 BACKUP DATABASE XXDB ONLINE TO /home/java/data
db2 RESTORE DATABASE XXDB FROM /home/java/data TAKEN AT 20040317143138
db2 ROLLFORWARD DATABASE XXDB TO END OF LOGS
command インスタンス開始 db2start
インスタンス終了 db2stop db2stop force db2stop -kill 
command db2 list tables
db2 describe table tablename
command get snapshot for locks on tbl;

照会系のロック:IN(Intent None), IS(Intent Share), NS(Next Key Share), S(Share)
更新系のロック:IX(Intent Exclusive), SIX(Share with Intent Exclusive), U(Update),
NW(Next Key Weak Exclusive), X(Exclusive), W(Weak Exclusive), Z(Superxclusive)
 
command get snapshot for database on XXXX | grep ロック
   
ログ SQL Server トランザクションログ
  データベース 'データベース名' のトランザクション ログがいっぱいです。
ログの領域を再利用できない理由を確認するには、
sys.databases の log_reuse_wait_desc 列を参照してください。
SQL Server 2005
   
Oracle ローダー
  コマンド
sqlload user/pass@bfdb.xxx.co.jp c:\bhi501f.ctl

コントロールファイル
LOAD DATA
INFILE
c:\hmload01.txt
APPEND
INTO TABLE
APSIRMST
FIELDS TERMINATED BY "
,"
(
SIR_KAI_CODE
CONSTANT "TEST1",
SIR_CODE
CHAR,
SIR_SH_KNR_CODE CONSTANT "0000000000",
SIR_BNR_CODE CONSTANT "    ",
SIR_NAME
VARCHAR,
SIR_NAME_K VARCHAR,
SIR_NAME_S VARCHAR,
SIR_JYOUTAI_KBN CONSTANT "1",
SIR_ZAN_KNR_KBN CONSTANT "0",
SIR_SH_TUTI_KBN CONSTANT "0",
SIR_FC_HENKAN_CODE CONSTANT "          ",
SIR_MAX_KIN CONSTANT 0,
SIR_IN_USR_ID CHAR,
SIR_IN_STS_NO DECIMAL EXTERNAL,
SIR_IN_DATE
DATE "YYYY/MM/DD",
SIR_RPL_USR_ID CHAR,
SIR_RPL_STS_NO DECIMAL EXTERNAL,
SIR_RPL_DATE DATE "YYYY/MM/DD",
SIR_SPOT_KBN CONSTANT "0"
)
   
データ型 SQL Server には、Oracle より多数のデータ型を使用できます。
以下に、SQL Server で使うことのできるデータ型を示します。
 
リンク 表の結合を極めるチューニング・テクニック(1-4) − @IT
 → ネステッド・ループ結合
オラクルが好き! - RDBMS入門
 → FROM 句の後ろは大きい表順に記述しましょう!
表の結合(JOIN:ジョイン)
 → AND条件については、記述の逆順に実行されます
ORACLE/オラクルSQLリファレンス(チューニング)
SQLを速くするぞ―お手軽パフォーマンス・チューニング
 → サブクエリを引数に取る場合、IN述語よりもEXISTS述語を使う
抽出条件、JOIN句とWHERE句どっちに書きますか? - Database Expert会議室
Oracle tips
SQL チューニング編1 - チューニングの方向、プログラムチューニング - SAK Streets
パフォーマンス差異〜その2〜
SQL Serverデータパーティショニングで巨大DBも楽々管理
付加列インデックスの作成