Existe algum comando PL/SQL para fazer o parse de uma querie

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Pessoal,

Eu estou desenvolvendo uma aplicação (em APEX) onde estou armazenando as queries de validações de dados em tabelas do oracle, ao invés de dentro da rotina PL/SQL.

Estas queries depois são executadas por meio de cursores dinâmicos (EXECUTE IMMEDIATE), existentes dentro das rotinas PL/SQL que estou desenvolvendo.

O problema é que só detecto um problema na sintaxe das queries armazenadas em tabelas quando executo um comando de EXECUTE IMMEDIATE na querie.

Como estas queries serão cadastradas por analistas de negócio que não são muito experts em SQL, gostaria de saber se haveria um meio de eu fazer um PARSE da querie armazenada, de forma a identificar - no momento do cadastramento - se ela está sintaticamente correta.

Por acaso algum de vocês já passou por um problema parecido com o que estou descrevendo?

Abraços a todos,

Sergio Coutinho
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

Opa Sérgio.

Não tenho uma resposta pronta mas tenho uma alternativa.
Suponho que as queries cadastradas pelos AN são queries "simples" que podem ser executadas imediatamente sem tratamento de condições DINAMICAMENTE.

Então algo que você poderia fazer seria, na aplicação que cadastra essas queries, antes de salvar (preferivelmente que não seja uma trigger, mas sim pela propria aplicação) tentar executar esta querie, pode até colocar uma condição extra como 1=2, para verificar apenas a sintaxe.

Se não der erro, OK. Salva.
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá Noctifero,

Puxa .. interessante suas sugestões, especialmente a de colocar "1=2". Vou pensar no assunto e de como implementar isso no sistema.

As queries são um pouco complexas e dispõe de variáveis BIND, mas creio que daria para adotar sua sugestão.

Abraços e obrigado pela ajuda !

Sergio Coutinho
Avatar do usuário
fbifabio
Moderador
Moderador
Mensagens: 199
Registrado em: Ter, 22 Fev 2011 1:51 pm
Localização: São Paulo - SP
Contato:
Fábio Prado
www.fabioprado.net

stcoutinho,

Outra sugestão é que você escreva sQL dinamico atraves da package DBMS_SQL ao invés de EXECUTE IMMEDIATE. Com ela dá para fazer o parse separado (chamando uma de suas procedures), antes de executar a query. O grande problema é que ela não é tão fácil de usar quanto EXECUTE IMMEDIATE.

[]S
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Bing [Bot], Google [Bot] e 2 visitantes