none
Utilização de SP com cursor em SQL Task no SSIS RRS feed

  • 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: False

     

    Parameter 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.

     

    Agradeço de antemão pela ajuda.

     

    segunda-feira, 23 de junho de 2008 16:51

Todas as Respostas

  • Guilherme,

     

    Pode ser algum tipo de problema com a conexão em relação ao Oracle!!!

    segunda-feira, 23 de junho de 2008 18:03
  • 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?

    segunda-feira, 23 de junho de 2008 20:40
  • 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

    segunda-feira, 23 de junho de 2008 20:47
  • 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!

    terça-feira, 24 de junho de 2008 20:52