2017-04-18 7 views
1

私はoracleクエリを実行しており、そのクエリの結果をtxtファイルに書き込みます。複数のクエリを使用した出力

今、私は、スキーマが変更され、クエリが実行されているが、いくつかの理由で、クエリの出力が書かれていません

(ブール値isCustomによって設定された)カスタムクエリが処理されている場合は、スキーマを変更する必要があります出力ファイルに追加します。

isCustomがfalseに設定されているとすべて正常に機能します。

私はどんな提案/ヒントにも感謝します。

public void OracleConnect(string queryString, string fileName, bool isCustom = false) 
    { 
     //downloaded oracle managed data access.dll 
     //changed reference 
     //changed connection to long unfunny one 
     //http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client#25412992 
     log.Debug("Task " + Task.CurrentId + ": executing " + queryString); 
     string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + host + ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" + instance + ")));User Id = " + oracleUser + "; Password =" + oraclePassword; 
     try 
     { 
      //create connection 
      OracleConnection conn = new OracleConnection(oradb); 
      conn.Open(); 

      OracleCommand cmd = new OracleCommand(); 
      //if a custom query is being handled change the schema 
      if (isCustom == true) 
      { 
       log.Debug("##Test executing custom query!"); 
       string changeSessionString = "ALTER SESSION SET CURRENT_SCHEMA = " + resultUser; 
       cmd.CommandText = 
        "begin " + 
         " execute immediate '"+ changeSessionString +"';" + 
         " execute immediate '"+ queryString+"';" + 
        "end;"; 
       log.Debug("##Test custom query command = " + cmd.CommandText); 
      } 
      else 
      { 
       queryString = queryString.Replace("%pumaUser%", resultUser); 
       cmd.CommandText = queryString; 
      } 

      cmd.Connection = conn; 
      cmd.CommandType = CommandType.Text; 

      OracleDataReader reader = cmd.ExecuteReader(); 

      //get and write content to file 
      List<string> columnName = new List<string>(); 
      columnName = GetColumnNames(reader); 
      using (StreamWriter writer = new StreamWriter(fileName)) 
      { 
       //write query command to file 
       writer.WriteLine(queryString + Environment.NewLine); 

       //write header/column names into first line 
       StringBuilder header = new StringBuilder(); 
       for (int i = 0; i < columnName.Count; i++) 
       { 
        header.Append(columnName[i].ToString()); 

        if (i != columnName.Count - 1) 
         header.Append("\t"); 

       } 
       writer.WriteLine(header); 

       //fill rest of lines with data 
       while (reader.Read()) 
       { 
        StringBuilder row = new StringBuilder(); 
        for (int i = 0; i < reader.FieldCount; i++) 
        { 
         row.Append(reader[i]); 

         if (i != reader.FieldCount - 1) 
          row.Append("\t"); 
        } 
        writer.WriteLine(row); 
       } 

      } 
      log.DebugFormat("Task: {0} Writing query result into file: {1}", Task.CurrentId, fileName); 

      conn.Dispose(); 
     } 
     catch (OracleException e) 
     { 
      log.ErrorFormat("Task {0} had an OracleError: {1}", Task.CurrentId, e.Message); 
      Helpers.writeErrorFile(fileName, e.Message); 
     } 
     catch (Exception e) 
     { 
      log.ErrorFormat("Task {0} Could not connect to database: {1} ", Task.CurrentId, e.Message); 
     } 
    } 

答えて

0
> -for pl/sql procedures: set serveroutput on 

は、私は私のクエリを変更

>  1.spool <location\xxx.txt> after finishing 
>  2.spool off 
+0

テキストファイルに出力を書き込むには: は 'cmd.CommandTextは= + は "始まり"「即時「SPOOLを実行\ "" + fileNameに+ "\" '; " + "execute immediate" + changeSessionString + "';" + "execute immediate" + queryString + "';" + "execute immediate 'SPOOL off';" + "end;"; ' – user2811630

+0

結果クエリーは 'OracleObject:10:24:48,949 [3] DEBUG - ##テストカスタムクエリコマンド=即時実行開始' SPOOL 'D:\ CHHC \ manual \ Debug \ output \ 20-Apr-2017--10-24-43 \ ATGRZSW2240_HOST153 \ custom1.txt "';即座に 'ALTER SESSION SET CURRENT_SCHEMA = HOST153'を実行してください。即座に 'SELECT COUNT(*)FROM project_2'を実行します。 immediate 'SPOOL off'; end; 'を実行しますが、出力はありません。 – user2811630

+0

Andにserveroutputを設定します。エコーをオンに設定すると役立ちます。 –

関連する問題