を使用してc#でPL-SQLブロックを実行しようとしていますSystem.Data.OrcaleClient
。PL-SQL ブロックを Oracle で実行すると、 を使用して結果が出力されますdbms.ouput
。
dbms.ouput
その " " 結果を C# コードで取得したいと考えています。
助けてください。
を使用してc#でPL-SQLブロックを実行しようとしていますSystem.Data.OrcaleClient
。PL-SQL ブロックを Oracle で実行すると、 を使用して結果が出力されますdbms.ouput
。
dbms.ouput
その " " 結果を C# コードで取得したいと考えています。
助けてください。
パッケージget_line
の機能を使ってみてください。dbms_output
出力を返すプロシージャを作成できます。このようなもの(ほんの一例):
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;
私は次の方法を使用しています:
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;
}
System.Data.OracleClientでdbms_output.get_linesを呼び出す際に問題があるため、マルチストリング値を取得するために数回呼び出します。