SP não aceita parâmetro no ORDER BY!!!!!!

Firebird

29/06/2006

Colegas..

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

Cabelo

Curtidas 0

Respostas

Sremulador

Sremulador

29/06/2006

amigo, desta forma realmente não aceita...


GOSTEI 0
Cabelo

Cabelo

29/06/2006

E como eu deveria fazer para passar um parâmetro para o order by?????


GOSTEI 0
Gandalf.nho

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


GOSTEI 0
Cabelo

Cabelo

29/06/2006

Fiz desta forma e deu erro :

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

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...

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
POSTAR