Erro em : EXECUTE STATEMENT...
Pessoal...
Estou usando um servidor Linux com BD Firebird 1.5.3
Tenho a seguinte SP :
Compilei e tudo beleza...
mas quando tento rodar ela no IBExpert ou no delphi.. dá a seguinte mensagem de erro :
Já é a segunda SP que dá este erro.. alguém sabe o que significa este erro????
agradeço antecipadamente a todos..
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
Curtidas 0
Respostas
Acacio
06/07/2006
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.
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.
GOSTEI 0
Cabelo
06/07/2006
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???
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???
GOSTEI 0
Acacio
06/07/2006
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.
exemplo
´where codicao1 ´ || condicao ||
´ and condicao2 ´ || condicao
já deu erro pra mim também e era isso.
GOSTEI 0
Cabelo
06/07/2006
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?????
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?????
GOSTEI 0
Acacio
06/07/2006
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
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
GOSTEI 0
Cabelo
06/07/2006
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...????
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...????
GOSTEI 0