【Oracle】指定日から連続した日付を取得

SQLで指定日から連続した日付を取得します。
集計画面で日ごとの合計を表示したい場合の親テーブルとして利用できます。

  • 例1(ALL_CATALOGを利用)

    1SELECT TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 AS DCOL FROM ALL_CATALOG WHERE TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 <= TO_DATE('20150131', 'YYYYMMDD')ORDER BY 1;

    FROM句には指定日から連続した日付の範囲分の行を持っている必要があります。
    今回の例では「ALL_CATALOG」を利用していますが、
    そもそも参照権限がない場合もあるので、1~31までのNoだけを持つ空テーブルを利用します。

  • 例2(ALL_CATALOGの代わりに1~31までのNoだけを持つ空テーブルを利用)

    1SELECT TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 AS DCOL FROM (SELECT LEVEL id FROM DUAL CONNECT BY LEBEL <= 31) WHERE TO_DATE('20150101', 'YYYYMMDD') + ROWNUM -1 <= TO_DATE('20150131', 'YYYYMMDD')ORDER BY 1;

【Oracle】SQLで表記揺れ

住所の登録システムを作っているときにたまに要件で出てくる表記揺れ。
ひらがなは全て半角カタカナに変換したり、
括弧も全て()に変換したりします。

Oracle10gからの機能であるUTL_I18NパッケージのTRANSLITERATEファンクションを利用します。
下記に例を示しておきます。

テキトーな仕様
全角英数字:全て半角英数字に変換
全角ひらがな、カタカナ:全て半角カタカナに変換
前後の中間の空白:全角、半角問わず削除
全角半角の括弧{}、「」、<>、():全て()に変換
全角記号:半角記号に変換
全角半角のハイフン:全て-に変換
1CREATE OR REPLACE FUNCTION CONVERSION_TEST(
2    IN_CHAR VARCHAR
3) RETURN VARCHAR
4IS
5BEGIN
6RETURN
7    UTL_I18N.TRANSLITERATE(
8        TRANSLATE(
9            UPPER(TO_SINGLE_BYTE(REPLACE(REPLACE(IN_CHAR,' '),' ')))
10            ,'{}「」<>()ー-!#$%'
11            ,'()()()()--!#$%'
12            )
13        ,'kana_hwkatakana')
14    ;
15END CONVERSION_TEST;

記号、括弧、ハイフンは全部書くとキリないので、省略しています。
「kana_hwkatakana」の部分は他にも色々あるようです。

【ファイルサーバ】Samba導入

タブレットを買ったこともあり、
会社作業を2つのPCで行うことが増えたので、
NUCにSambaを構築します。

  • Samba設定

    1mkdir /home/share
    2chmod 777 /home/share
    3vi /etc/samba/smb.conf
    下記内容を[global]の下に追加
    # Linux側文字コード
    unix charset = UTF-8
    # Windows側文字コード
    dos charset = CP932
    # ローカルLAN内からのみのアクセスを許可
    hosts allow = 192.168.XXX.
    
    下記内容を変更
    # Windowsのマイコンピュータの「プロパティ」-「ワークグループ」を指定
    workgroup = MYGROUP
    ↓
    workgroup = WORKGROUP
    
    # 認証を行なわない(ローカルLAN内からのアクセスのみ許可しているため)
    security = user
    ↓
    security = share
    
    # プリンタの共有
    load printers yes
    ↓
    load printers no
    
    [printers]の部分を全てコメントアウト
    
    下記内容を最終行に追加
    # テキトーに好きな名前指定
    [Share]
    # 共有フォルダを指定
     path = /home/share
    # 書き込み許可
    writable = yes
    # ゲストユーザ許可
    guest ok = yes
    # 全てゲストユーザとして扱う
    guest only = yes
    # フルアクセスでファイル作成
    create mode = 0777
    # フルアクセスでディレクトリ作成
    directory mode = 0777
    # 複数人が同時アクセス許可
    share modes = yes
    
  • Samba用のファイアウォール設定
    ファイアウォールの設定を行う。
    外部からは接続できないようにするため、ルーターのポートは開けません。

    1iptables -I INPUT 12 -p tcp --dport 445 -j ACCEPT
    2iptables -I INPUT 12 -p tcp --dport 139 -j ACCEPT
    3iptables -I INPUT 12 -p udp --dport 138 -j ACCEPT
    4iptables -I INPUT 12 -p udp --dport 137 -j ACCEPT
    5service iptables save
  • Samba起動

    1/etc/rc.d/init.d/smb start
    2/etc/rc.d/init.d/nmb start
    3chkconfig smb on
    4chkconfig nmb on

    smb:ファイル転送の機能を提供する。
    nmb:ネットワークでマシンをブラウジングする機能を提供する。

    Windowsからエクスプローラーで「\\192.168.XXX.XXX\」とうって
    shareディレクトリが確認でき、複数PCでファイルやり取りができれば問題なし。

【メールサーバ】Postfix設定その5(再送)

【メールサーバ】root宛メール

  • root宛メール削除
    「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが増えていたので、
    mailコマンドで確認してみたところ

    No mail for root
    

    メールがないと記載されたが、ファイルサイズがあって気持ち悪いので、
    内容を待避し、削除することにしました。

    1cat /var/mail/root > /home/ユーザ名/mail.txt
    2cat /dev/null > /var/mail/root

    これで「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0になりました。

  • root宛メール転送確認

    「/var/mail/root」と「/var/spool/mail/root」のファイルサイズが0KBのままで
    プロバイダのメールアドレスにテストメールが届きます。

【Java】セッションとクッキーについて

セッションとクッキーについてメモ。

  • クッキーについて

    • 保存場所

      C:\Users\ユーザ名\AppData\Local\Microsoft\Windows\Temporary Internet Files
      
    • ファイル名

      Cookie:ユーザ名@サイト名/
      
    • ブラウザメモリに保存されているクッキーの値が最優先
      ファイルに保存されたクッキーの値を変更しても
      ブラウザを閉じない限り、異なるIEで繋いでもブラウザで取得済の
      ブラウザメモリのクッキーの値を使用する。
      ブラウザを閉じて繋ぎなおすと、ファイルに保存されたクッキーの値を使用する。

      ただしクッキーの値の変更はツールを使用しないと有効にならない。
      手書きで変更しても読み取れずに2番目の動作時にクッキーの値がNULLとなる。

  • セッションについて

    • 保存場所
      ブラウザメモリまたはクッキーのファイルに保存。
      キー名はJSESSIONIDであり、クッキーの値が優先される。
    • セッションハイジャック
      セッションIDはサーバーとやり取りしている中でブラウザが自動でサーバーへ送信しているが、
      下記の記述で明示的に直接指定することも可能。

      変更前
      セッションIDはブラウザメモリまたはクッキーの値を自動でサーバーへ送信

      http://z-area.net/コンテキスト名?request1=test1&request2=test2
      

      変更後
      セッションIDはURLの値をサーバーへ送信

      http://z-area.net/コンテキスト名;jsessionid=12345?request1=test1&request2=test2
      

      12345のセッションIDが正規のユーザのものである場合、
      変更後のリクエストは正常に処理される。

      ログイン画面を表示した時点でセッションIDが採番されるので、
      セッションハイジャックを防ぐにはログイン成功後にセッションIDを採番し直す。

  • ツール
    クッキー書き換え:IECookiesView(日本語化可能)
    HTTP情報参照:ieHTTPHeaders

【APサーバ】Tomcat削除

Tomcatが停止できない原因はファイアウォールだったわけですが、
原因特定前にTomcatを再インストールしたので、
Tomcatの削除手順を記載しておきます。