Usando um ref cursor como tipo de entrada com ODP.NET
-
06-09-2019 - |
Pergunta
Eu estou tentando usar uma RefCursor
como parâmetro de entrada em um procedimento armazenado Oracle. A idéia é selecionar um grupo de registros, alimentá-los para o procedimento armazenado e, em seguida, os loops SP sobre a RefCursor
entrada, fazendo algumas operações para seus registros. Não, eu não posso selecionar os registros dentro do SP e assim evitar ter que usar o RefCursor
como um tipo de entrada.
Eu encontrei um exemplo de como fazer isso em (este aqui seria o link, mas parece que eu não posso usá-los ainda) a documentação da Oracle, mas ele usa um SELECT
simples para preencher o RefCursor
de entrada; e é aí que reside o problema:. Eu tenho que preenchê-lo a partir do código
Você vê, no código eu tenho este:
[OracleDataParameter("P_INPUT", OracleDbType.RefCursor, ParameterDirection.Input)]
private List<MiObject> cursor;
E, eu tentei preencher cursor com um List<T>
, um DataTable
, mesmo um conjunto simples de MyObject
e obras nada. Quando tento executar meus testes eu recebo um erro:
"Parâmetro inválido Linking"
Talvez não as palavras exatas, como eu estou traduzindo do espanhol, mas essa é a mensagem
Todas as idéias?
Solução
Eu também estou em contato com Mark Williams, o autor do artigo que eu tentei link no meu post, e ele tem kinly respondeu assim:
" Não é nenhum problema para me enviar e-mail; no entanto, eu acho que vai decepcioná-lo com a minha resposta em um presente.
Infelizmente você não pode fazer o que você está tentando fazer (criar um refcursor do cliente assim).
Um par de problemas com que são que uma refcursor refere-se a memória de propriedade da Oracle no servidor e Oracle não tem noção de itens de cliente como um DataTable ou uma lista NET, etc.
Você tem outras opções disponíveis à excepção de usar um refcursor? "
Então, basicamente eu estou ferrado, e esta questão está fechada. Obrigado pela leitura e / ou tentando ajudar, todos vocês.
Outras dicas
De memória, não há um lugar classe OracleCursor
na biblioteca ODP.NET que as obras?
este amostra para refcursor como entrada para pl / sql do TechNet oráculo.
O Clou é que o objeto refcursor entrada deve ser criado pela Oracle themself. Você não pode converter uma lista ou qualquer outra coisa para refcursor.