Fórum Stored produre não retorna valor #398103
26/03/2011
0
tentei usar a stored procedure abaixo mas o retorno é nome =
preciso que ela retorno o valor usando o operador like com o paremetro indicado.
Algume poderia me dar uma ajuda?
CREATE OR ALTER PROCEDURE consulta(pnome dm_nome)
returns (nome varchar(50))
as
begin
select nomeusuario from usuario WHERE NOMEUSUARIO LIKE '%:pnome%' into :nome;
suspend;
end
Obrigado!
Nilo Souza
Curtir tópico
+ 0Posts
28/03/2011
Eliel Martins
Eu verifiquei sua StoredProcedure e observei que está errada. O correto para você utilizar o Like com o sinal de % é da seguinte forma :
CREATE OR ALTER PROCEDURE CONSULTA(PNOME DM_NOME) RETURNS (NOME VARCHAR(50))
AS
BEGIN
SELECT NOMEUSUARIO FROM USUARIO WHERE NOMEUSUARIO LIKE '%'|| :PNOME ||'%' INTO :NOME;
SUSPEND;
END
Para concatenar o sinal de '%' você deve utilizar o pipe '||'.
Outro detalhe que eu observei, é que você está utilizando o '%' antes do valor do parâmetro e depois, isso pode retorna vários registros e a sua StoredProcedure vai dar erro.
Espero ter ajudado.
Abraço.
Eliel G. Martins
Gostei + 0
28/03/2011
Nilo Souza
Dessa forma me retorna mais colunas e realmente eu preciso que retorne varias linhas, neste caso eu precisarei usar o sect simples.
Deu esse erro:
can't format message 13:189 -- message file C:\Windows\firebird.msg not found.
multiple rows in singleton select.
At procedure 'CONSULTA' line: 5, col: 4.
CREATE OR ALTER PROCEDURE CONSULTA(PNOME DM_NOME)
RETURNS (NOME VARCHAR(50))
AS
BEGIN
SELECT NOMEUSUARIO FROM USUARIO WHERE NOMEUSUARIO LIKE '%'|| :PNOME INTO :NOME;
SUSPEND;
END
Gostei + 0
29/03/2011
Dirceu Morais
Tente assim:
CREATE OR ALTER PROCEDURE CONSULTA(PNOME DM_NOME) RETURNS (NOME VARCHAR(50))
AS declare variable xnome varchar(50);
BEGIN
For SELECT NOMEUSUARIO FROM USUARIO WHERE NOMEUSUARIO LIKE '%'|| :PNOME ||'%' INTO :xNOME;
Do begin nome = Xnome;
SUSPEND;
end
END
ps:
Para dar Certo, este DM_NOME tem que ser VARCHAR
Gostei + 0
29/03/2011
Nilo Souza
Porem retornou somente uma linha veja a mensagem:
------ Resultados de execução do Procedimento: ------
VARLISTA = Nilo souza
Na verdade tem 3 nomes que começam com a letra N quando é chamada a procedure: EXECUTE PROCEDURE consulta('N')
E assim mesmo ou temos que fazer algo?
CREATE OR ALTER PROCEDURE CONSULTA(PNOME DM_NOME)
RETURNS (varLISTA VARCHAR(50))
AS
declare variable varNome varchar(50);
BEGIN
For SELECT NOMEUSUARIO FROM USUARIO
WHERE NOMEUSUARIO LIKE '%'|| :PNOME ||'%' INTO :varNome
Do begin
varLISTA = varNome;
SUSPEND;
end
END
Gostei + 0
30/03/2011
Emerson Nascimento
CREATE OR ALTER PROCEDURE CONSULTA(PNOME DM_NOME)
RETURNS (varNome VARCHAR(50))
AS
BEGIN
For SELECT NOMEUSUARIO FROM USUARIO
WHERE UPPER(NOMEUSUARIO) LIKE '%'|| UPPER(:PNOME) ||'%' INTO :varNome
Do SUSPEND;
END
da forma como está a SP trará todos os nomes que CONTENHAM o valor informado (não somente as que iniciam pelo valor informado).
Gostei + 0
30/03/2011
Nilo Souza
entendi sua explicação e farei os ajustes. É que deixo jeito no console do ibexpert apareceu apenas uma linha ao invés de aparecer as outras.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)