[firebase-br] [Stored Procedure] - Sql dinâmico - Erro de sintaxe
Jader Ricardo
jader em caramuru.com
Qui Jul 7 17:22:58 -03 2005
Boa tarde amigos !
Gostaria de começar a trabalhar com consultas a qualquer atributo de minhas
tabelas, exemplo:
Tabela clientes
Nome Cpf Ident Cidade
Joao 11111111111 2222222222 São Paulo
Jose 00000000000 3333333333 Rio de Janeiro
Maria 99999999999 4444444444 Brasília
Miguel 22222222222 1111111111 Itumbiara
Jose 55555555555 0000000000 Itumbiara
Então eu queria montar uma stored procedure selecionável onde de acordo com
o parâmetro que eu passasse ele me retornava as informações
Exemplo:
Parametros a serem passados (Nome varchar (50), Cpf varchar(12), Ident
varcahr (15), Cidade varchar(30))
Como faria para que me retorne todos os clientes que moram em Itumbiara e se
chama Jose ?
('Jose',Null,Null,'Itumbiara') ????
2 - Como faria para que me retorne todos os clientes de Itumbiara ?
(Null,Null,Null,'Itumbiara') ????
A ideia era fazer um select passando os valores mas se o valor passado nos
parâmetros for null ele não traz nada ...
Caso alguém tenha uma idéia ou exemplo fico grato.
Ainda não consegui fazer esta procedure funcionar, desde segunda feira,
aparece este erro "Column Unknown Jose" ao tentar passar (Jose) apenas o
parametro :PENOME, isso no ambiente do Ibexpert, alguém poderia me ajudar ?
BEGIN
/* Iniciando variáveis */
STRSQL = 'SELECT CODIGO, NOME, CIDADE FROM CLIENTES WHERE ';
CONT = 0;
/* Testando o primeiro atributo */
IF (:PECODIGO IS NOT NULL) THEN
BEGIN
STRSQL = STRSQL ||'CODIGO = ' || :PECODIGO;
CONT = 1;
END
/* Testando o segundo atributo
O número um serve para indicar ser vou ter que usar um AND */
IF ((:CONT = 1) AND (:PENOME IS NOT NULL)) THEN
BEGIN
STRSQL = STRSQL || 'AND NOME = ' || :PENOME;
CONT = 1;
END
ELSE
BEGIN
IF (:PENOME IS NOT NULL) THEN
BEGIN
STRSQL = STRSQL || 'NOME = ' || :PENOME;
CONT = 1;
END
END
/* Testando o terceiro atributo
O número um serve para indicar ser vou ter que usar um AND */
IF ((:CONT = 1) AND (:PECIDADE IS NOT NULL)) THEN
BEGIN
STRSQL = STRSQL || 'AND CIDADE = ' || :PECIDADE;
CONT = 1;
END
ELSE
BEGIN
IF (:PECIDADE IS NOT NULL) THEN
BEGIN
STRSQL = STRSQL || 'CIDADE = ' || :PECIDADE;
END
END
/* Executar o select */
FOR EXECUTE STATEMENT :STRSQL =====>>>> O erro aparece aqui
INTO :PSCODIGO, :PSNOME, :PSCIDADE
DO
BEGIN
SUSPEND;
END
END
Obs: Se alguém souber de algum material de como "debugar" procedures no
Ibexpert poderia me passar que tento me virar ...
Desde já agradeço toda a ajuda ...
____________
Jader Ricardo
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br Para editar
sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista