0

Java ベースのアプリケーションを使用して、Oracle データベースに書き込まれる XML ファイルをデプロイします。データベース内の XML BLOB は、NCLOB データ型として格納されます。データベースから NCLOB XML データを取得して XML 形式に戻すにはどうすればよいですか? Java を使用する必要がありますか (私は完全な Java 初心者です)、またはここで PowerShell を使用できますか (私の好み)? また、方法によっては、これをどのように行うのでしょうか?

私がこれを行いたい理由は、主に展開前/展開後の検証 (展開前と展開後の XML コンテンツを比較する) のためです。

前もってありがとう、キース

4

2 に答える 2

2

ODACを使用してOracle CLOBでXMLを読み書きするために過去に行ったことは次のとおりです。これは、わずかな変更で NCLOB に対して機能するはずです。

# Load ODAC. This might fail if it is not installed or is the wrong bitness.
$assembly = [System.Reflection.Assembly]::LoadWithPartialName("Oracle.DataAccess")

# Connect to Oracle.
$connStr = 'Data Source=hostname:1521/sidname; User Id=sys; Password=password; DBA Privilege=SYSDBA;'
$conn = New-Object Oracle.DataAccess.Client.OracleConnection -ArgumentList $connStr
$conn.Open()

# Query the table.
$q = "select MY_CLOB_FIELD from My_Table"
$command = new-object Oracle.DataAccess.Client.OracleCommand($q, $conn)

# Process records.
$reader = $command.ExecuteReader()
while ($reader.Read()) {
    # Read the CLOB field and cast to an XML document.
    $xmlDoc = [xml] $reader.getstring(0) # XML

    #... XML Processing Here ....

    # Commit the updated XML.
    $sql = "UPDATE My_Table SET MY_CLOB_FIELD = :1"
    $updateCmd = New-Object Oracle.DataAccess.Client.OracleCommand ($sql, $conn)

    $param = New-Object Oracle.DataAccess.Client.OracleParameter (
        "xml", #Name
        [Oracle.DataAccess.Client.OracleDbType]::Clob, #Type
        $xmlDoc.OuterXml, #Data
        'Input' #Direction
    )

    $newParam = $updateCmd.Parameters.Add($param) 
    $result = $updateCmd.ExecuteNonQuery()
}
于 2012-02-16T02:09:54.797 に答える
0

これは私が最終的に使用したコードです:

$Assembly = [System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")

$conn = New-Object System.Data.OracleClient.OracleConnection( `
“Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=port)) `
(CONNECT_DATA=(SERVICE_NAME=SID)));User Id=username;Password=password;”);

$conn.Open()

# Query the table.
$q = "SELECT column FROM table WHERE column='something'"
$command = New-Object System.Data.OracleClient.OracleCommand ($q, $conn)

$xmlfile = "c:\temp\xml\temp.xml"
# Process records.
$reader = $command.ExecuteReader()
while ($reader.Read()) 
{
    # Read the NCLOB field and cast to an XML document.
    $xmlDoc = [xml] $reader.getstring(0) # XML
    $xmlDoc.Save($xmlfile)
}
$conn.Close()

@Andy、私を正しい方向に導いてくれてありがとう!:-)

于 2012-02-16T20:35:04.303 に答える