2016-08-03 5 views
0

私はこれに対する解決策を知っていると思いますが、私は第二意見を得たいと思います。Oracle LONGデータ型を100文字に切り捨てるOLEDB

OracleデータベースからDataTableを取得して返すGet-Dataという関数があります。今、PowershellがSUPERに役立つため、Oracleから返されたレコードが1つだけの場合、この関数はDataTableではなくDataRowを返します。

この状況が発生し、列の1つがLONGデータ型の場合、フィールドは100文字に切り捨てられます。

明白な解決策は、$ dtを返して、それを処理するコードを修正することです。しかし、私が言ったように、私は二番目の意見が欲しかった。

function Get-Data 
    { 
     [Cmdletbinding()] 
     Param 
     (
      [Parameter(Position=0,Mandatory=$True)]$Conn, 
      [Parameter(Position=1,Mandatory=$True)]$sql 
     ) 
      #Open the connection to the DB if closed 
        if($Conn.state -eq 'Closed') 
      { 
       $Conn.open() 
      } 

      #Create objects for querying the DB 
      $readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$Conn) 
      $readcmd.CommandTimeout = '300' 
      $da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd) 
      $dt = New-Object system.Data.datatable 

      #Query the DB and fill the DataTabe with records 

      [void]$da.fill($dt) 

      return $dt 
    } 
+0

私は、返品、dt変更を無駄にしようとしました。この問題は、レコードが1つしか返されない限り持続します。 –

答えて

0

わかりましたので、私は、問題の原因を発見した:

は、データを取得します。

LONGデータ型を使用してテーブルから選択するには、このSQL文を使用します。同じのために代わりに次のクエリを利用する場合

Select * from [table] 

OLEDBは、ORACLE

からLONGフィールドの完全な内容を返します表:LONGフィールドの

Select distinct * from [table] 

OLEDB戻り、最初の100文字だけ

+0

Oracle SQL Developerで同じ問合せを実行すると、LONGフィールドの内容全体が表示されます。 –

関連する問題