SP não aceita parâmetro no ORDER BY!!!!!!
Colegas..
Na seguinte SP
quando compilo dá erro na linha do order by...
como passo um parâmetro para o order by????
OBS : o firebird está instalado num servidor Linux..
Na seguinte SP
CREATE PROCEDURE SELECT_GP0100(
I_ORDER VARCHAR(100)
)
RETURNS(
C_COD_GRUPO_PAT CHAR(15),
C_DESC_GRUPO_PAT VARCHAR(100)
)
AS
begin
for select C_COD_GRUPO_PAT, C_DESC_GRUPO_PAT
from GP0100
order by :I_ORDER
into :C_COD_GRUPO_PAT, :C_DESC_GRUPO_PAT
do
suspend;
end
quando compilo dá erro na linha do order by...
como passo um parâmetro para o order by????
OBS : o firebird está instalado num servidor Linux..
Cabelo
Curtidas 0
Respostas
Sremulador
29/06/2006
amigo, desta forma realmente não aceita...
GOSTEI 0
Cabelo
29/06/2006
E como eu deveria fazer para passar um parâmetro para o order by?????
GOSTEI 0
Gandalf.nho
29/06/2006
Acho que o único jeito seria usar EXECUTE STATEMENT, daí vc pode usar os parâmetros como deseja
EXECUTE STATEMENT sql_a_executar
EXECUTE STATEMENT sql_a_executar
GOSTEI 0
Cabelo
29/06/2006
Fiz desta forma e deu erro :
o erro foi o seguinte :
Eu uso o firebird 1.5...
o que está errado??????
CREATE PROCEDURE SELECT_BUSCA_CA0500(
I_CAMPO_WHERE VARCHAR(100),
I_VALOR_WHERE VARCHAR(150),
I_ORDER VARCHAR(100)
)
RETURNS (
C_COD_COLABORADOR CHAR(15),
C_NOME_COLABORADOR VARCHAR(150),
C_DESC_FUNCAO CHAR(150))
AS
begin
for EXECUTE STATEMENT
´select ´ ||
´CA0500.C_COD_COLABORADOR, CA0500.C_NOME_COLABORADOR, CA0700.C_DESC_FUNCAO ´ ||
´from CA0500 ´ ||
´inner join CA0700 on (CA0700.C_COD_FUNCAO = CA0500.C_COD_FUNCAO) ´ ||
´where UPPER(RTRIM(LTRIM(´ || :I_CAMPO_WHERE || ´))) LIKE ´ ||
´UPPER(´ || ´´´¬´ || RTRIM(LTRIM( :I_VALOR_WHERE )) || ´¬´´´ || ´) ´ ||
´order by ´ || :I_ORDER
into :C_COD_COLABORADOR, :C_NOME_COLABORADOR, :C_DESC_FUNCAO do
suspend;
end
o erro foi o seguinte :
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 12, char 7.
EXECUTE.
Eu uso o firebird 1.5...
o que está errado??????
GOSTEI 0
Cabelo
29/06/2006
Pessoal... desculpa aê... eu estava usando a versão 1.0 do firebird no servidor...
então... eu atualizei a versão... e deu certo...
agora o problema é outro.. quando executo a SP no IBExpert dá o seguinte erro :
como resolve o problema?????
então... eu atualizei a versão... e deu certo...
CREATE PROCEDURE SELECT_BUSCA_CA0500(
I_CAMPO_WHERE VARCHAR(100),
I_VALOR_WHERE VARCHAR(150),
I_ORDER VARCHAR(100)
)
RETURNS (
C_COD_COLABORADOR CHAR(15),
C_NOME_COLABORADOR VARCHAR(150),
C_DESC_FUNCAO CHAR(150))
AS
begin
for EXECUTE STATEMENT
´select ´ ||
´CA0500.C_COD_COLABORADOR, CA0500.C_NOME_COLABORADOR, CA0700.C_DESC_FUNCAO ´ ||
´from CA0500 ´ ||
´inner join CA0700 on (CA0700.C_COD_FUNCAO = CA0500.C_COD_FUNCAO) ´ ||
´where UPPER(RTRIM(LTRIM(´ || :I_CAMPO_WHERE || ´))) LIKE ´ ||
´UPPER(´ || ´´´¬´ || RTRIM(LTRIM( :I_VALOR_WHERE )) || ´¬´´´ || ´) ´ ||
´order by ´ || :I_ORDER
into :C_COD_COLABORADOR, :C_NOME_COLABORADOR, :C_DESC_FUNCAO do
suspend;
end
agora o problema é outro.. quando executo a SP no IBExpert dá o seguinte erro :
Unsuccessfull execution caused by an unavailable resource.
Variable type (position 2) in EXECUTE STATEMENT ´select C_COD_COLABORADOR, C_NOME_COL´ INTO does no match return
como resolve o problema?????
GOSTEI 0