Terei que desenvolver uns trabalhos no SQL*PLUS, e estou precisando executar uma procedure que contém duas querys sendo que em cada uma possui um cursor, e o resultado da execução dessa procedure gera um relatório. No banco funciona perfeitamente e gera a saída no output mas no SQL*PLUS não funciona. Segue abaixo o código que estou usando para executar no SQL*PLUS, porém não funciona e fala que está com INSTRUÇÃO SQL INVÁLIDA.
Então: tudo que está dentro de um BEGIN e END é código PLSQL.
Você não pode simplesmente colocar uma QUERY dentro de um BEGIN e END da mesma forma que faz direto no SQL*Plus.
Como você mencionou, a query se encontra dentro de um Cursor. Neste caso, pra saída ir pro SQL*Plus, você precisa colocar DBMS_OUTPUT dentro do LOOP:
Assim:
ALTERNATIVA 1 - COM CURSOR
Código do relatorio1.sql
ALTERNATIVA 2 - SEM CURSOR (Query direto no arquivo)
Caso você deseja colocar apenas a query dentro do relatório1, então deve ser assim:
Código do relatorio1.sql
Bom dia Amigo, valeu pela dica postada. Ajudou bastante. Agora tenho uma outra duvida;
Me deparei com seguinte problema:
Tenho relatório que contem o Cabeçalho e suas linhas. Existem duas querys sendo que uma retorna os dados do cabeçalho e outra retorna os dados das linhas correspondente a esse cabeçalho. Ambas as querys possuem parâmetros de entrada para filtragem dos dados. Esse relatório hoje é executado dentro do EBS via concorrente usando XML PUBLISHER.
Nosso cliente irá desativar o EBS ficando somente com a licença do banco, e ele nos solicitou que esse relatório seja desenvolvido em SQL*PLUS, e como sou novo no ramo n tenho muita ideia de como vou fazer isso para nosso cliente. Alguém tem alguma ideia de como vou executar esse relatório com essas duas querys e passar seus parâmetros no SQL*PLUS? E pós a execução gerar um arquivo texto contendo os dados formatados no layout correspondente.?
Espero que alguém possa me ajudar. Desde já muito obrigado
Bom, acredito que quando ele falou no SQL*Plus, ele esteja falando de Oracle puro.
Ou seja, a chamada pode ser feita no SQL*Plus, mas o programa pode ser uma Stored Procedure!
Veja vem com ele se é isso.
Numa stored procedure você consegue fazer cursores e usar DBMS_OUTPUT e fazer isso de forma bem mais fácil.