Hatena::ブログ(Diary)

四方山備忘録

2016-11-05

[]行列変換 15:46

行持ちテーブルを列変換して、csv表示する手法

------------------------------

テーブルA

文書ID   テスト

1   テスト

2   テスト2

3   テスト3

------------------------------

テーブルB

文書ID   社員コード

1   001

1   002

1   003

2   003

------------------------------

SELECT テーブルA.文書ID

,REPLACE((SELECT テーブルB.社員コード AS [data()]

FROM dbo.テーブルB

WHERE テーブルA.文書ID = テーブルB.文書ID

FOR XML PATH ('')), ' ', ',') AS 社員コード

FROM テーブルA

---------------------

結果

文書ID   社員コード

1   001,002,003

2   003

3   NULL

参考

no title

2016-06-21

[]IEURL制限 22:58

最近はまったことメモ。

https://support.microsoft.com/ja-jp/kb/208427

GET メソッドを使用する場合、最大文字数は 2,048 文字から実際のパスの文字数を減算した文字数に制限されます。

使用ブラウザIE固定のwebシステムで、

担当ではなかったが、エラーが解消のため

ヘルプ対応した。

解析した結果、上記が原因とわかった。

同時にPOSTも行っていたので、そちらで取得するよう

変更をして、事なきを得た。

結論が分かった後、

WEBサーバ側のアクセスログを見ればすぐにわかっていたというオチ・・。

視野が狭いと反省。

あと、IE以外の文字数制限はもっと多いようで、

IE批判される理由の一端が分かった気がする。

2016-05-02

[]指定フォルダ配下のファイル内置換 11:59

import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;

//引数:フォルダパス
//用途:読み込んだファイルを既定の内容に置換する。
class replace {

    public static void main(String args[]) {

        if ( args.length == 0 ) {
            System.out.println( "パラメータが不足" );
            return;
        }

    	Map<String,String> map = new HashMap<String,String>();

    //仮)置換内容
    	map.put("HOST","TSOH");
    	map.put("IP","PI");
    	
        // Fileクラスをインスタンス化
        File dir = new File( args[0] );
    	
    	File[] files = dir.listFiles();

    	for (int i = 0; i < files.length; i++) {
	        File file = files[i];
	    	
	    	//ファイルを読み込んで、変数へ一時格納。
	        String readText = fileRead( file );

	    	//読み込んだファイル内容を置換する。
	    	for(Map.Entry<String, String> hoge : map.entrySet()) {
			    readText = readText.replaceAll(hoge.getKey(),  hoge.getValue());
			}
	    	String replaceText =readText;
	    	fileWrite( file, replaceText );
	    }
    	System.out.println("完了");

    }

    private static String fileRead(File _file) {

        StringBuffer fileRead = new StringBuffer("");

        try {

            // FileReaderクラスをインスタンス化
            FileReader fr = new FileReader( _file );

            // BufferedReaderクラスをインスタンス化
            BufferedReader br = new BufferedReader( fr );

            String str = null;

            int count = 1;

            while ( ( str = br.readLine() ) != null ) {

                fileRead.append(str + "\r\n");
                count++;
            }

            // ファイルを閉じる
            br.close();

        } catch ( FileNotFoundException ex ) {
             System.out.println( ex );
        } catch ( IOException ex ) {
             System.out.println( ex );
        }
        return fileRead.toString();
    }

    private static void fileWrite(File _file, String _text){

        try {

            // FileWriterクラスをインスタンス化
            FileWriter filewriter = new FileWriter( _file );

            filewriter.write( _text );

            // ファイルを閉じる
            filewriter.close();

        } catch ( IOException ex ) {
             System.out.println( ex );
        }
    }
}

2015-09-04

[]expdmp METADATA_ONLYの落とし穴 23:14

expdmp をMETADATA_ONLYで行うと、統計をロックしてしまう。

データ・ポンプ・エクスポート

METADATA_ONLYを指定すると、データベースオブジェクト定義のみがアンロードされ、表の行データはアンロードされません。CONTENT=METADATA_ONLYを指定した場合、ダンプ・ファイルが後でインポートされるときに、ダンプ・ファイルからインポートされる索引または表の統計インポート後にロックされることに注意してください。

ロック解除を忘れていると、

統計情報取得で、

ORA-20005: object statistics are locked (stattype = ALL)

エラーが・・。

統計ロック確認方法

SELECT TABLE_NAME,STATTYPE_LOCKED FROM DBA_TAB_STATISTICS;

STATTYPE_LOCKEDがALLがロック。

■unlock方法

DBMS_STATS.UNLOCK_SCHEMA_STATS (ownname);

    • テーブル単位

DBMS_STATS.UNLOCK_TABLE_STATS (ownname,tabname);

参考:DBMS_STATS

しかし、不親切だな・・。

インポートのついでにやってくれれば良いのに・・。

2015-08-23

[]Oracle VIPについて。 21:57

Oracle RAC構成だと、VIP(仮想IP)を設定してつなげることが可能。

参考

ORACLE RAC データベースへの接続

no title

状態は以下のコマンドで見れる。

crsctl status resource -t

参考

11gR2 RACの起動と停止

Connection: close