HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

DB2

SQLの比較演算子

唐突に、「プログラム言語を学んだ後でSQLを学ぶと、"not equal"を"!="と書きたくなる人が多いんじゃないか」、「SQLでは"<>"」と考えたところで、どこかの実装で"!="が使えたものがあったような記憶がよみがえってきた。 そこで、次の本を参照してみた。SQL…

java.sql.Array を使ってみる

DB2 v9.5 から ARRAY 型がサポートされるようになった。ただし、自分が認識している範囲では次の制限がある。 プロシジャ(Procedure)のパラメータでのみ指定できる。 (DB2 v9.7以降)関数(Function)のパラメータか戻り値にも指定できる。(とオンラインマニュ…

型付表の定義

DB2 で型付表を作ろうとするときに必要な手順を、いつもいつも忘れるのでメモ。 まぁ、DB2のオンラインマニュアルには書いてあるんだけど‥探すといつも見つからない‥(ちなみに、キーワード「CREATE SEQUENCE」で探すと何番目かに出てくる。) CREATE TYPE "TY…

悩みがちなLOBデータの挿入手順メモ

JDBCで表にデータを格納するとき、INT型とかVARCHAR型とかなら自信を持って「こうやるんだ」と言えるんだけど、LOBデータ(CLOB、BLOB、XML)となると途端に「え、えと‥」となってしまう自分がいる。単なるcharacter stream、byte streamなんだけどね。 そんな…

外部結合とある条件を満たす副照会の合わせ技で発現するバグ

DB2

DB2 9.1/9.5/9.7の特定バージョンで、間違った結果が返るバグ | Unofficial DB2 BLOG IBM リダイレクト用ページ - Japan 対象バージョンが「DB2 for LUW V9.1 FP(Fix Pack)7/FP7a/FP8, V9.5 FP4/FP4a, V9.7 GA」ということで、手元にあるバージョン DB2 Expr…

SQLクエリメモ - 表定義の情報を出力するクエリ

DB2

DB2のコントロール・センターで表を選択したときに下に表示される表定義の情報(+外部キーの情報)を得るためのクエリ。 テキストとして得られればいろいろと使えるので。 SELECT CASE WHEN P.TABLE_SCHEM IS NOT NULL AND P.TABLE_NAME IS NOT NULL AND P.CO…

コマンドメモ - ログの出力先などを表示する

Windows 環境で稼動する DB2 のログファイルに関する情報を得るためのコマンドメモ。UNIX/Linux だったら grep を使うところ。 db2 GET DB CFG FOR データベース名 | FINDSTR "ログ・ファイルのパス 最初のアクティブ・ログ・ファイル LOGPRIMARY LOGSECOND"…

Re:XMLEXISTSを使う場合の注意点(だと思う)

XMLEXISTSを使う場合の注意点(だと思う) - HHeLiBeXの日記 正道編 一応、記録のため(何)に、実験を再現するためのクエリとかを残しておく。(普段はそうするんだけど、なぜか今回はすっかり忘れていた‥) まずはデータ。そのまんま載せるととんでもないことに…

XMLEXISTSを使う場合の注意点(だと思う)

発端 2年近く前に、次のようなクエリが原因でアプリケーションのレスポンスが悪いという状況に出くわした。 xquery count( for $doc in db2-fn:sqlquery(" select xmlquery('for $doc in $root/hoge return $doc' passing DOCUMENT.DATA as ""root"") from D…

XMLTABLE関数の謎な挙動

DB2

やっていることはものすごくシンプル。 CREATE DATABASE HOGE USING CODESET UTF-8 TERRITORY JP COLLATE USING SYSTEM PAGESIZE 32 K ; CONNECT TO HOGE USER db2admin USING admin ; CREATE TABLE DOCUMENT ( ID VARCHAR(8) NOT NULL, DATA XML NOT NULL, …

パラメータマーカーに指定する文字列が長すぎるとSQLエラー(続き)

パラメータマーカーに指定する文字列が長すぎるとSQLエラー - HHeLiBeXの日記 正道編 これを受けて、「じゃあどうするべきなのか」という話を書こうとしたんだけど、眠くて力尽きたというか(ごにょごにょ)。 DB2はPREPAREする時点でパラメーターマーカーの型…

DB2 Express-C 9.7の導入

DB2

無料のDB2 Express-C 9.7 リリース&Django対応アダプタリリース!ということで、早速ダウンロードしてインストール。 ひとつ忘れちゃいけないのは、DB2 v9.1/v9.5/v9.7の混在環境になるため、「DB2 インスタンスの構成」でポート番号を変更すること。ちょっ…

XMLデータを格納する表の定義

OracleでXMLデータを格納する表を作成する場合のSQL文。比較のためにDB2のものも。 とりあえず、Epictetusというツールで流したクエリ。Oracle CREATE TABLE HOGE(ID INTEGER, DATA XMLType) ; INSERT INTO HOGE(ID, DATA) VALUES(1, '<root>hoge</root>') ; SELECT * FRO…

パラメータマーカーに指定する文字列が長すぎるとSQLエラー

以下のような表を作成する。 CREATE TABLE HOGE(ID SMALLINT, NAME VARCHAR(10)) ポイントは「VARCHAR(10)」。 で、JDBCを使って以下のようなクエリを発行してみる。 SELECT ID, NAME FROM HOGE WHERE NAME = '0123456789a' INSERT INTO HOGE(ID, NAME) VALU…

Text Searchインデックスの削除を忘れてしまった場合の対処

DB2

DB2 v9.5のText SearchもNSEと同様にテキスト検索用インデックスを管理するためのものだが、やはりNSEと同様に、テキストインデックスをDROPする前にテーブルやデータベースをDROPしてしまうと、自動更新スケジュールの定義だけが残りひどい目にあう。 で、…

IMPORTとLOADとcodepageの指定

DB2

データをデータベースにインポート/ロードする際には、コードページの指定は当然だと思っているが、コードページを指定していないスクリプトファイルに出くわしたことがきっかけで、ちょっと調べてみようと思った。 ちなみに、DB2 v9.5からLOADコマンドでXML…

幻のsun.io.MalformedInputException

SunのJava VM(j2sdk1.4.2_18、jdk1.5.0_11、jdk1.6.0_01で確認)で、以下の処理を実行させると、エラーが発生することなく終了する。(もちろん、いわゆる文字化け状態になるが‥) byte[] b_Shift_JIS = { (byte) 0x8b, (byte) 0x43, // き (byte) 0x82, (byte)…

DB2 Express-C v9.5.2のインストール

以下のブログエントリに、DB2 Express-C v9.5.2に関することが記述されていて、唐突に「そういえば、ベータ版が出たのを確認してから後にチェックしてなかった」ということを思い出す。 DB2 for Windows クイックインストールを更新しました | Unofficial DB…

JDBCでのXML型データの取得

DB2のXML型のデータをJDBCで取得する方法を探ってみる。 JDK 5.0 (JDBC 3.0)の場合 まず、getObjectして、実装されているインタフェースを調べてみる。 String queryStr = "SELECT XMLDOCUMENT(XMLELEMENT(NAME \"res\", T.VAL)) AS DATA FROM TABLE(VALUES(…

コマンド・ウィンドウ(管理者)の起動用ショートカット

DB2

状況: Windows Vista環境で、UACが有効になっている。 DB2のv9.1とv9.5(共にExpress-C)が混在している。 管理者として実行しないと、コマンド・ウィンドウ他が機能しない。 DB2 v9.5のBINなどがシステムの環境変数PATHに含まれている。 で、v9.5には「コマ…

NSEインデックスの削除を忘れてしまった場合の対処

DB2

DB2のNSE(Net Search Extender)は、テキスト検索用インデックスを管理するためのものだが、DB2のインスタンスとは別サービスのため、DB内のデータを更新した際にテキストインデックスは即時更新されなかったりするし、テキストインデックスを削除する前にテ…

トランザクション内でユニークなTIMESTAMP値を取得する試みの実践

「トランザクション内でユニークなTIMESTAMP値を取得する試み」をDB2 v9.5で実践してみる。 その際の考慮点は以下のとおり。 GLOBAL TEMPORARY TABLEを作成するにはUSER TEMPORARY TABLESPACEが必要。 GLOBAL TEMPORARY TABLEは必ず"SESSION"スキーマに作成…