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
Existe algum comando PL/SQL para fazer o parse de uma querie
- stcoutinho
- Moderador
- Mensagens: 850
- Registrado em: Qua, 11 Mai 2011 5:15 pm
- Localização: são Paulo - SP
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
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.
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.
- stcoutinho
- 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
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
- fbifabio
- 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
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
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
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes