Fórum Erro em : EXECUTE STATEMENT... #56464

06/07/2006

0

Pessoal...

Estou usando um servidor Linux com BD Firebird 1.5.3

Tenho a seguinte SP :

CREATE PROCEDURE SELECT_MANUTENCAO_PREVENTIVA( I_ORDER VARCHAR(100)) RETURNS ( C_COD_INSUMO CHAR(15), C_DATA_EXECUCAO DATE, C_TIPO_MANUT CHAR(1), C_COD_GRUPO_PAT CHAR(15), C_COD_SUB_GRUPO_PAT CHAR(15), C_COD_COLABORADOR CHAR(15), C_USUARIO VARCHAR(20), C_ENDERECO_MANUT VARCHAR(100), C_GRANDEZA_CONSUMO_MEDIO VARCHAR(4), C_QTD_CONSUMO_MEDIO FLOAT, C_QTD_MANUT FLOAT, C_GRANDEZA_MANUT VARCHAR(4), C_DATA_PREVISAO DATE, C_COD_OS CHAR(15), C_COD_CONJUNTO CHAR(15), C_COD_REFERENCIA CHAR(15), C_DESC_INSUMO VARCHAR(100), C_DESC_GRUPO_PAT VARCHAR(100), C_DESC_SUB_GRUPO_PAT VARCHAR(100), C_DESC_CONJUNTO VARCHAR(100), C_NOME_COLABORADOR VARCHAR(150)) AS begin for EXECUTE STATEMENT ´select CM0100.C_COD_INSUMO, CM0100.C_DATA_EXECUCAO, CM0100.C_TIPO_MANUT, ´|| ´CM0100.C_COD_GRUPO_PAT, CM0100.C_COD_SUB_GRUPO_PAT, ´|| ´CM0100.C_COD_COLABORADOR, ´|| ´CM0100.C_USUARIO, CM0100.C_ENDERECO_MANUT, ´|| ´CM0100.C_GRANDEZA_CONSUMO_MEDIO, ´|| ´CM0100.C_QTD_CONSUMO_MEDIO, CM0100.C_QTD_MANUT, ´|| ´CM0100.C_GRANDEZA_MANUT, CM0100.C_DATA_PREVISAO, CM0100.C_COD_OS, ´|| ´CM0100.C_COD_CONJUNTO, CM0100.C_COD_REFERENCIA, IN0100.C_DESC_INSUMO, ´|| ´GP0100.C_DESC_GRUPO_PAT, GP0200.C_DESC_SUB_GRUPO_PAT, ´|| ´GP0300.C_DESC_CONJUNTO, CA0500.C_NOME_COLABORADOR ´|| ´from CM0100, IN0100, GP0100, GP0200, GP0300, CA0500 ´|| ´where CM0100.C_DATA_EXECUCAO IS NULL and ´|| ´CM0100.C_TIPO_MANUT = ´´P´´ and ´|| ´CM0100.C_COD_INSUMO = IN0100.C_COD_INSUMO and ´|| ´CM0100.C_COD_GRUPO_PAT = GP0100.C_COD_GRUPO_PAT and ´|| ´CM0100.C_COD_SUB_GRUPO_PAT = GP0200.C_COD_SUB_GRUPO_PAT and ´|| ´GP0100.C_COD_GRUPO_PAT = GP0200.C_COD_GRUPO_PAT and ´|| ´CM0100.C_COD_GRUPO_PAT = GP0200.C_COD_GRUPO_PAT and ´|| ´CM0100.C_COD_CONJUNTO = GP0300.C_COD_CONJUNTO and ´|| ´GP0100.C_COD_GRUPO_PAT = GP0300.C_COD_GRUPO_PAT and ´|| ´GP0200.C_COD_SUB_GRUPO_PAT = GP0300.C_COD_SUB_GRUPO_PAT and ´|| ´CM0100.C_COD_COLABORADOR = CA0500.C_COD_COLABORADOR ´|| ´order by ´||:I_ORDER into :C_COD_INSUMO, :C_DATA_EXECUCAO, :C_TIPO_MANUT, :C_COD_GRUPO_PAT, :C_COD_SUB_GRUPO_PAT, :C_COD_COLABORADOR, :C_USUARIO, :C_ENDERECO_MANUT, :C_GRANDEZA_CONSUMO_MEDIO, :C_QTD_CONSUMO_MEDIO, :C_QTD_MANUT, :C_GRANDEZA_MANUT, :C_DATA_PREVISAO, :C_COD_OS, :C_COD_CONJUNTO, :C_COD_REFERENCIA, :C_DESC_INSUMO, :C_DESC_GRUPO_PAT, :C_DESC_SUB_GRUPO_PAT, :C_DESC_CONJUNTO, :C_NOME_COLABORADOR do suspend; end


Compilei e tudo beleza...

mas quando tento rodar ela no IBExpert ou no delphi.. dá a seguinte mensagem de erro :

Uncuccessfull execution caused by an unavailable resource. Variable type(position 8) in EXECUTE STATEMENT´select CM0100.C_COD_INSUMO, CM0100.C_DATA_EXECUCAO´INTO does not match return.


Já é a segunda SP que dá este erro.. alguém sabe o que significa este erro????

agradeço antecipadamente a todos..


Cabelo

Cabelo

Responder

Posts

10/07/2006

Acacio

Sem a base de dados é difícil de ver o que é.
Qdo acontece isso comigo eu tiro todos o campo que vão retornar e só deixo um, tiro a condição também. Ai se der certo vou incluíndo até achar o campo que está dando o erro.


Responder

Gostei + 0

10/07/2006

Cabelo

Colega...

ainda não tentei campo a campo... mas vou seguir sua dica...

mas... o engraçado, é que se passo exatamente os mesmos dados para uma View...

funciona que é uma beleza..rsss...

só quando tento ´rodar´ a procedure é que dá erro...

será que tem alguma coisa a ver com a quantidade de campos que estão retornando???


Responder

Gostei + 0

10/07/2006

Acacio

Não já criei procedure que retornava bem mais valores, outra coisa que pode ser é a quebra de linha coloca espaço entre os campos da condição

exemplo
´where codicao1 ´ || condicao ||
´ and condicao2 ´ || condicao

já deu erro pra mim também e era isso.


Responder

Gostei + 0

11/07/2006

Cabelo

Eu usei toda a condição na mesma linha...

e deu o mesmo erro....

acho que vou ter que tirar todos os campos mesmo...

achei que por ter muitos campos poderia estra dando erro... mas acredito que o problema possa ser resolvido com uma VIEW, pois não tenho nenhum porcessamento nesta rotina... mas gostaria de saber o que está errado... o q vc acha?????


Responder

Gostei + 0

11/07/2006

Acacio

Olhei melhor o código; É o seguinte cara tens que criar uma variável do tipo varchar(2000)ou que garante que não vai estourar o tamanho e jogar esse select dentro dela só não coloca os campo depois do into
EXEMPLO

CREATE or alter PROCEDURE MEMBROSDIZIMOS_RELATORIO2 (
COD INTEGER,
COD2 INTEGER,
RETURNS (
NOME VARCHAR(50),
NOME2 VARCHAR(50))
AS
DECLARE VARIABLE SCRIPTY VARCHAR(2500);
BEGIN
SCRIPTY = SELECT ....


e no for EXECUTE STATEMENT SCRIPTY
into :NOME,:NOME2
do
begin
suspend;
end
end


Responder

Gostei + 0

12/07/2006

Cabelo

Tudo bem...

mas por quê???????

o que muda no uso da variável... nem tentei usar assim... mas me parece que tb não vaidar certo... pois se for esse um problema... é um bug do Firebird... pois não muda nada...

pq vc acha que assim funciona...????


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar