SQLの窓

2009年11月19日


Oracle : 固定長データのSQL*Loader のサンプル

INFILE のオプションで固定レコードである事を指定しています。固定レコードのデータは、C 言語で出力した事を想定して作成しています。位置指定かデータ型指定でデータの位置が計算されて処理されます。

FILLER は、データベース列と関連しない列を明示する為に使用します( COBOL と同様 )

位置指定は N:N と N-N は同等で、位置番号を示すのでレコードレイアウトがある場合に簡単に指定できます。
▼レコードレイアウト例



関連する記事

Oracle : SQL*Loader のサンプル


位置指定には他にも以下のようなものがあります
* : 直前の位置から始まる
+N : 終了位置直後の位置から現行のフィールドをオフセットする
          0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
--------------------------------------------------------------------------
00000000 30 31 30 31 8E 52 93 63 8C 4E 00 00 00 00 00 00  0101山田君......
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030 00 00 00 00 00 00 FF B0 1E 04 00 32 30 30 39 2F  .......ー...2009/
00000040 30 31 2F 30 31                                   01/01
LOAD DATA
 INFILE '社員マスタ.dat' "FIX 69"

-- **************************************************
-- BADFILE  : 拒否レコード
-- **************************************************
 BADFILE 'lightbox.bad'
-- **************************************************
-- DISCARDFILE : 廃棄ファイル
-- **************************************************
 DISCARDFILE 'lightbox.dsc'
-- **************************************************
-- APPEND : 追加
-- REPLACE : 削除後追加( 削除トリガーが起動 )
-- TRUNCATE : TRUNCATE 後追加( 最大限のパフォーマンス )
-- **************************************************
 APPEND
 INTO TABLE "社員マスタ"
 WHEN "社員コード" != '0005'
-- **************************************************
-- ■ TRAILING NULLCOLS
-- 相対位置に指定した列がレコード中に存在しない場合
-- その列の値はNULLとして処理されます
-- **************************************************
 TRAILING NULLCOLS
--
--
--create table "社員マスタ2" (
--	"社員コード" VARCHAR2(4)
--	,"氏名" VARCHAR2(50)
--	,"フリガナ" VARCHAR2(50)
--	,"所属" VARCHAR2(4)
--	,"性別" NUMBER(15)
--	,"作成日" DATE
--	,"更新日" DATE
--	,"給与" NUMBER
--	,"手当" NUMBER
--	,"管理者" VARCHAR2(4)
--	,"生年月日" DATE
--)
--
--
(
"社員コード" CHAR(4)
,"氏名" POSITION(5:54) CHAR NULLIF "氏名"=BLANKS
,"不要部分定義" FILLER POSITION(55:55) CHAR
,"給与" POSITION(56-59) INTEGER(4) NULLIF "給与"=BLANKS
,"生年月日" POSITION(60-69) DATE "YYYY/MM/DD" NULLIF "生年月日"=BLANKS
)



▼ ログ

SQL*Loader: Release 10.2.0.1.0 - Production on 木 11月 19 15:46:04 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

制御ファイル:    syain.ctl
データファイル社員マスタ.dat
  ファイル処理オプション文字列: "FIX 69"
  不良ファイル:  lightbox.bad
  廃棄ファイル: lightbox.dsc
 (すべて廃棄できます)

ロード数: ALL
スキップ数: 0
許容エラー数: 50
バインド配列:    64行、最大256000バイト
継続文字:    指定なし
使用パス:      従来型

表"社員マスタ"、 ロード済 時 "社員コード" != 0X30303035(文字 '0005')
この表に対する有効な挿入オプション: APPEND
TRAILING NULLCOLSオプションは有効です。

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
"社員コード"                       FIRST    4        CHARACTER            
"氏名"                              5:54   50        CHARACTER            
    NULL if "氏名" = BLANKS
"不要部分定義"                     55:55    1        CHARACTER            
  (FILLERフィールド)
"給与"                             56:59    4        INTEGER              
    NULL if "給与" = BLANKS
"生年月日"                         60:69   10        DATE YYYY/MM/DD      
    NULL if "生年月日" = BLANKS


表"社員マスタ":
  1行のロードに成功しました。
  0行はデータ・エラーのためロードされませんでした。
  0行はWHEN句のエラーのためロードされませんでした。
  0行はすべてのフィールドがNULLのためロードされませんでした。

バインド配列に割り当てられた領域:     4736バイト(64行)
読取りバッファのバイト数:  1048576

スキップされた論理レコードの合計:           0
読み込まれた論理レコードの合計:             1
拒否された論理レコードの合計:               0
廃棄された論理レコードの合計:        0

実行開始木 11月 19 15:46:04 2009
実行終了木 11月 19 15:46:04 2009

実行時間:        00: 00: 00.17
CPU時間 :        00: 00: 00.10


関連する Oracle へのリンク

SQL*Loader : 制御ファイル・リファレンス
SQL*Loader : フィールド・リスト・リファレンス
Windows 限定



posted by lightbox at 2009-11-19 15:58 | Oracle : 環境 | このブログの読者になる | 更新情報をチェックする

2009年08月21日


Oracle : ローカル・ネーミング・メソッドによる接続( tnsnames.ora を直接変更 )

Oracle では通常、Net Configuration Assistant でローカルネット
サービス名を構成してその名前で接続します。

しかし、その結果は tnsnames.ora を直接テキストエディタで変更するのと
同じ事となります。Express Edition ですと、Net Configuration Assistant 
が付属していないので、この方法のほうが慣れておれば効率がとてもいいです。

場所は、インストールディレクトリの NETWORK\ADMIN 内にあります。
( 例: C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN )
NIGHT =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = PED0-007)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL)
    )
  )

※ HOST = で、PC名を指定します
※ ORCL は通常、インストール時に指定したグローバルDB名と同じ
※ ( Express Edition では、XE )
※ この変更は、すぐ反映されます。


これによって、sqlplus ユーザー/パスワード@night で接続可能になります

関連する記事・情報
Oracleのクライアント側で簡易ネーミングメソッドが使え無い場合の設定
Oracle 10g Express Edition の接続


関連する Oracle ドキュメント
ネーミング・メソッドの構成


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

2009年07月13日


Oracle : SQL*Loader のサンプル

CSV 形式のデータを制御ファイルに含めています。WHEN には、= のほか != も指定できるようですが不等式はエラーになりました。

BADFILE は、テーブルに適合しないデータが送られますDISCARDFILE は、WHEN に合致しないレコードです

TRAILING NULLCOLS があるので、CSV 側で列数が足りなくてもエラーにはなりません

NULLIF は、条件が合致すると NULL がセットされます。( DEFAULTIF もあります )


関連する記事
Oracle : 固定長データのSQL*Loader のサンプル


最終的に、通常データに関数指定ができます
※ 多くは試していませんが TO_DATE(:フィールド)+1 が可能だったので
※ いろいろできる可能性があります
LOAD DATA
 INFILE *
-- **************************************************
-- BADFILE  : 拒否レコード
-- **************************************************
 BADFILE 'lightbox.bad'
-- **************************************************
-- DISCARDFILE : 廃棄ファイル
-- **************************************************
 DISCARDFILE 'lightbox.dsc'
-- **************************************************
-- APPEND : 追加
-- REPLACE : 削除後追加( 削除トリガーが起動 )
-- TRUNCATE : TRUNCATE 後追加( 最大限のパフォーマンス )
-- **************************************************
 APPEND
 INTO TABLE "社員マスタ2"
 WHEN "社員コード" != '0005'
-- **************************************************
-- ■ TRAILING NULLCOLS
-- 相対位置に指定した列がレコード中に存在しない場合
-- その列の値はNULLとして処理されます
-- **************************************************
 TRAILING NULLCOLS
--
--
--create table "社員マスタ2" (
--	"社員コード" VARCHAR2(4)
--	,"氏名" VARCHAR2(50)
--	,"フリガナ" VARCHAR2(50)
--	,"所属" VARCHAR2(4)
--	,"性別" NUMBER(15)
--	,"作成日" DATE
--	,"更新日" DATE
--	,"給与" NUMBER
--	,"手当" NUMBER
--	,"管理者" VARCHAR2(4)
--	,"生年月日" DATE
--)
--
--
(
"社員コード" CHAR TERMINATED BY ','
,"氏名" CHAR TERMINATED BY ',' NULLIF "氏名"=BLANKS
,"フリガナ" CHAR TERMINATED BY ',' NULLIF "フリガナ"=BLANKS
,"所属" CHAR TERMINATED BY ',' NULLIF "所属"=BLANKS
,"性別" INTEGER EXTERNAL TERMINATED BY ','
,"作成日" CHAR TERMINATED BY ','  NULLIF "作成日"='//' "TO_DATE(:\"更新日\")+1"
,"更新日" CHAR TERMINATED BY ','  NULLIF "作成日"='//' "TO_DATE(:\"更新日\")+1"
,"給与" INTEGER EXTERNAL TERMINATED BY ','
,"手当" INTEGER EXTERNAL TERMINATED BY ','
,"管理者" CHAR TERMINATED BY ',' NULLIF "管理者"=BLANKS
,"生年月日" CHAR TERMINATED BY ',' "TO_DATE(:\"生年月日\")"
)
BEGINDATA
0001,浦岡 友也,
00002,山村 洋代,ヤマムラ ヒロヨ,0003,1,2005/06/17,2005/09/18,300000,,,
0003,多岡 冬行,タオカ フユユキ,0002,0,2005/08/14,2005/11/14,250000,,,
0004,高田 冬美,タカタ フユミ,0003,1,//,//,250000,,,
0005,内高 友之,ウチタカ トモユキ,0003,0,2005/09/12,2005/11/10,150000,,,
0006,森尾 正也,モリオ マサヤ,0002,0,2005/08/14,2005/12/17,300000,7000,0002,



タグ:Oracle SQLLoader
posted by lightbox at 2009-07-13 20:26 | Oracle : 環境 | このブログの読者になる | 更新情報をチェックする

2009年07月07日


リモートのOracle にsysdba で入る

リモート側の windows ユーザが ORA_DBA グループに所属していて、ローカルユーザに同じユーザが、同じパスワードで同程度の権限で存在している必要があると思われますが・・・
sqlplus /@PC名/サービス名 as sysdba

↓つまり、こんなかんじ

sqlplus /@night/orcl as sysdba

Oracle11g インスタント クライアントではこの方法は実行できません


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

2009年06月22日


Oracle : ディレクトリオブジェクト

前提条件
  • 該当ユーザでログインして、select * from USER_SYS_PRIVS で権限があるかを確認
  • 作成には CREATE ANY DIRECTORY 権限が必要
  • 既に権限を持つユーザで作成し、PUBLIC に対して利用権限を与えても良い
  • すべてのディレクトリは 1 つのネームスペースに作成される

権限のあるユーザで以下を実行して、ユーザに作成と削除の権限を与えます。
権限を与えるューザは、通常 SYSTEM で統一すると良いと思います。
権限が付与されたかどうかの確認は、そのユーザでログインして、
select * from USER_SYS_PRIVS を実行します
grant 
	CREATE ANY DIRECTORY 
	,DROP ANY DIRECTORY 
to ユーザ名


作成には、create or replace が使用できます。
ディレクトリオブジェクト名は、全体で重複できないので注意して下さい。
CREATE DIRECTORY ディレクトリオブジェクト名
   AS 'C:\user\php\plsql_builder\oracle'



作成は、SYSTEM で行って、権限のみユーザに与えます。
しかし、これでは SYSTEM ユーザでの作業が多くなるので、
ユーザ毎に作成権限を与えるか、ユーザ名を PUBLIC にします。
GRANT
	READ,WRITE
	ON DIRECTORY
	ディレクトリオブジェクト名 TO ユーザ名




関連する記事

ディレクトリオブジェクトの作成(1)
ディレクトリオブジェクトの作成(2)
ディレクトリオブジェクトの作成(3)

関連するOracleドキュメント

CREATE DIRECTORY



タグ:Oracle
posted by lightbox at 2009-06-22 10:58 | Oracle : 環境 | このブログの読者になる | 更新情報をチェックする

2009年04月24日


簡易ネーミングメソッドが使え無い

Net Configuration Assistant のネーミングメソッド構成で追加して下さい。インストールされていません。



関連する Oracle(11g) のドキュメント

8.3簡易接続ネーミング・メソッドの使用
構文要素説明

//


オプション : URLに//を指定します。

URLまたはJDBCに接続するには、接続識別子の前にダブル・スラッシュ(//)を付けます。たとえば、次のように指定します。

scott@//sales-server
Enter password: password

host

必須 : データベース・サーバー・コンピュータのホスト名またはIPアドレスを指定します。

port

オプション : デフォルトは、1521

service_name

オプション : データベースのサービス名を指定します。

サービス名を指定しない場合、リスナーはlistener.oraファイルのDEFAULT_SERVICE_listener_nameパラメータで指定されたデータベースに接続します

server

オプション : 使用するデータベース・サーバーのタイプを指定します。

SERVERパラメータの値は、dedicatedsharedおよびpooledです

instance_name

アクセスするデータベース・インスタンスを識別するために使用します。

インスタンス名は、初期化パラメータ・ファイルのINSTANCE_NAMEパラメータから取得できます。




posted by lightbox at 2009-04-24 21:30 | 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 ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり