Inquiridor
Utilização de SP com cursor em SQL Task no SSIS

Pergunta
-
Bom dia,
Eu estou criando uma package no Integration Services e preciso roda uma SP escrita em Oracle 10g que utiliza cursores e armazenar o resultado em uma variável.
Oque eu fiz até agora foi criar as 3 variáveis das quais preciso: INVOICE_NUM String, STATUS Int32 e REQUEST_ID Int32.
A primeira delas é de input e as duas seguintes são de output. Elas são usadas pela SP cuja assinatura está a seguir:
MI_INTERFACE
.SP_INVOICE_NUMBERS_VALIDATE(INVOICE_NUM VARCHAR2, REQUEST_STATUS OUT NUMBER, REQUEST_ID OUT NUMBER);Como o banco em que devo roda a SP é um Oracle, estou usando uma conexão do tipo OLE DB, seguem as configurações das duas telas de configuração da task:
General:
Result Set: None
Connection Type: OLD DB
SQL Source Type: Direct Input
SQL Statement: MI_INTERFACE.SP_INVOICE_NUMBERS_VALIDATE(?, ?, ?);
ByPassPrepare: FalseParameter Mapping:
VARIABLE NAME | DIRECTION | DATA TYPE | PARAMETER NAME
User::INVOICE_NUM | Input | VARCHAR | 0
User:: STATUS | Output | FLOAT | 1
User::REQUEST_ID | Output | FLOAT | 2
E o erro que eu estou recebendo quando rodo a tarefa é o seguinte:
SSIS package "Package.dtsx" starting.
Error: 0xC002F210 at Execute SQL Task, Execute SQL Task: Executing the query "MI_INTERFACE.SP_INVOICE_NUMBERS_VALIDATE(?, ?, ?);" failed with the following error: "ORA-00900: invalid SQL statement
". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Task failed: Execute SQL Task
Já tentei diversas combinações de Result set e até agora não consegui resolver o problema.
Todas as Respostas
-
-
Na verdade não.
Eu fiz testes pensando que pudesse ser esse o erro, porém com uma query simples eu obtive sucesso. O erro, na minha opinião, deve estar em alguma configuração da própria task. Talvez na utilização dos parâmetros, porém eu fiz pesquisas por várias horas e para OLE DBs, diversos artigos diziam que a forma como colquei é a correta.
Algum outro problema que tu consigas enxergar na minha Task?
-
Guilherme,
Ele diz na mensagem que o problema pode ser conexão ou parametros ou resultset....
Crie uma procedure no oracle sem os parametros e execute da mesma forma que vc executando essa procedure.
Assim que se rodar é porque o erro esta nos parametros, senão é problema de conexão.
Abraço
-
Lucas,
Eu testei a conexão como tu disseste e ela está funcionando.
Oque eu li e reli a respeito me fez mudar o SQL para EXEC MI_INTERFACE.SP_INVOICE_NUMBERS_VALIDATE (?, ? OUTPUT, ? OUTPUT)
O banco é oracle, então eu acho que o EXEC está errado, mas enfim...
Os dois parametros de saida deveriam ser seguidos da palavra reservada OUTPUT para que o SSIS soubesse que são de retorno.
No entando, mesmo quando tento fazer o parse do SQL pelo botão de Parse query na interface, o retorno é de que o SQL está inválido... seja com ou sem colchetes envolvendo os nomes.
O SQL somente é interpretado corretamente quando eu uso @INVOICE_NUM, @STATUS e @REQUEST_ID no lugar dos '?', porém como estamos falando de um OLE DB, o tratamento correto seria a utilização dos '?'.
A minha conexão é do tipo Native OLE DB\Microsoft OLE DB Provider for Oracle. Isso é um OLE DB, certo?
estou cada vez mais inclinado a que seja um erro no meu SQL Query. Oque achas?
Te agradeço de antemão pela ajuda e tempo dispendido com o meu problema!