System.Data.OrcaleClient
を使用してC#でPL-SQLブロックを実行しようとしています。 PL-SQLブロックをoracleで実行すると、dbms.ouput
を使用して結果が出力されます。C#でPL-SQLブロックから返されたdbms.output値を取得する方法
「dbms.ouput
」の結果がC#コードに表示されます。
助けてください。
System.Data.OrcaleClient
を使用してC#でPL-SQLブロックを実行しようとしています。 PL-SQLブロックをoracleで実行すると、dbms.ouput
を使用して結果が出力されます。C#でPL-SQLブロックから返されたdbms.output値を取得する方法
「dbms.ouput
」の結果がC#コードに表示されます。
助けてください。
dbms_output
パッケージのget_line
機能を使用してみてください。出力を返すプロシージャを作成できます。このような何か(単なる例):
procedure call_with_output(p_output out varchar2) is
vret integer := 0;
vtxt varchar2(4000);
begin
dbms_output.enable;
-- here call code that generate lines
-- use the loop to retrieve info
while vret = 0 loop
dbms_output.get_line(vtxt, vret);
if vret = 0 then
if p_output is null then
p_output := vtxt;
else
p_output := p_output || chr(10) || vtxt;
end if;
end if;
end loop;
dbms_output.disable;
end;
私はあなたのソリューションが好きです。これは、 'get_lines'を(get_linesの代わりに)サーバーへの単一の呼び出しで使用するという単純さを組み合わせています。私が取り組んでいた答えは、ばかげた愚か者であるODP.NETを介して 'get_lines'を呼び出すことでした。 +1 –
+1ただし、これは出力の総量が32k以下の場合にのみ有効です。これが当てはまるかもしれませんが、デバッグ出力を得るには、dbms_outputに書き込むことができます(ループ内で生成する場合)。 –
32Kを取得するには、vtxtの宣言を 'vtxt varcahr2(32767)'に変更する必要があります。 –
私は次の方法で使用しています。システムでdbms_output.get_linesを呼び出すことに問題があるので
private string GetDbmsOutputLine()
{
OracleCommand command = new OracleCommand
{
Connection = <connection>,
CommandText = "begin dbms_output.get_line(:line, :status); end;",
CommandType = CommandType.Text
};
OracleParameter lineParameter = new OracleParameter("line",
OracleType.VarChar);
lineParameter.Size = 32000;
lineParameter.Direction = ParameterDirection.Output;
command.Parameters.Add(lineParameter);
OracleParameter statusParameter = new OracleParameter("status",
OracleType.Int32);
statusParameter.Direction = ParameterDirection.Output;
command.Parameters.Add(statusParameter);
command.ExecuteNonQuery();
if (command.Parameters["line"].Value is DBNull)
return null;
string line = command.Parameters["line"].Value as string;
return line;
}
は値をマルチストリングを取得するために数回、それを呼び出します。 Data.OracleClient。
なぜあなたは[機能](http://www.techonthenet.com/oracle/functions.php)にブロックし、結果を_返すのですか? – Ben
こんにちはベン、私たちはサードパーティと統合しており、必要な結果を得るためにPL-SQLブロックを提供しています – Dinu