Qual é a sintaxe de um procedimento armazenado que gera um refcursor, um varchar2 e um número?
Gostaria de exibir todos os três no resultado, com o objetivo de exibir contagem, e uma mensagem que indica uma consulta bem-sucedida além da saída sys_refcursor, mas não consigo encontrar um bom exemplo disso.
Meu código C# atual é assim:
using Oracle.DataAccess.Client;
//...
OracleCommand myCmd = new OracleCommand();
myCmd.Connection = myConnection;
myCmd.CommandText = "mypackage.myprocedure"
myCmd.CommandType = CommandType.StoredProcedure;
OracleParameter param0 = myCmd.Parameters.Add("myinput", OracleDbType.Varchar2, myinput, ParameterDirection.Input);
OracleParameter param1 = myCmd.Parameters.Add("myretcursor", OracleDbType.RefCursor, ParameterDirection.Output);
myConnection.Open();
OracleDataReader resultReader = myCmd.ExecuteReader();
mydatatable.Load(resultReader, LoadOption.OverwriteChanges);
e o procedimento armazenado do Oracle se parece com isto:
PROCEDURE myprocedure (myinput IN Varchar2, myretcursor OUT sys_refcursor)
IS
BEGIN
OPEN myretcursor FOR
SELECT * FROM MYTABLE
END myprocedure
Acho que quero adicionar param2, param3 ao c# como parâmetros de saída adicionais e, de alguma forma, também produzi-los no procedimento armazenado? Eu não tinha certeza de como fazer isso e continuava encontrando erros. Idealmente, eu passaria, por exemplo, a contagem de seleção (*) como saída para o aplicativo c#, bem como uma mensagem de string varchar2 como 'Consulta bem-sucedida'.
Obrigada.
ATUALIZAÇÃO: A solução de Vincent funciona abaixo... em relação ao código C# por trás, a resposta ao link que ele forneceu recomenda colocar o leitor = executereader em um USING( ) para carregar a tabela e fechar o leitor antes de carregar as outras variáveis.
https://stackoverflow.com/q/6882690/613799
Dependendo do tamanho da string do oracle, o código c# de chamada pode precisar especificar o tamanho do varchar2 na definição do parâmetro de saída para a mensagem da string. Por fim, o link a seguir foi útil para converter a contagem de OracleDecimal para C# int:
Seu procedimento está faltando dois
OUT
parâmetros:Você também precisaria modificar seu
C#
código para registrar os novosOUT
parâmetros de acordo.