GARANTIR DESCONTO

Fórum erro com criação de SP #431281

19/12/2012

0

Estou tentando criar a seguinte SP mas está dando erro!
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Feature not supported on ODS version older than 11.1.


O código é:

create procedure PROC_VERIFICA_ACESSO_MENU(
    CODUSUARIO integer, CODMENU integer)
RETURNS (CONSULTAR char (1))
as
declare variable gu_consultar boolean;
begin
    consultar = ''N'';
    for select pu_consultar from permissao_usuario
        where usu_codigo = :codusuario and
        men_codigo = :codmenu
    union
    select pg_consultar from permissao_usuario
        where gru_codigo in (
        select gru_codigo from grupo_usuario
        where usu_codigo = :codusuario) and
        men_codigo = :codmenu
    into :gu_consultar
    do
    begin
        if (:gu_consultar = true) then
            begin
              consultar = ''S'';
              exit;
            end 
    end
end 
Nícolas Braz

Nícolas Braz

Responder

Post mais votado

19/12/2012

Consegui criar dessa forma:

CREATE OR ALTER procedure PROC_VERIFICA_ACESSO_MENU (
    CODUSUARIO integer,
    CODMENU integer)
returns (
    CONSULTAR char(1) collate NONE)
as
declare variable GU_CONSULTAR integer;
begin
  consultar = 'N';
  for select pu_consultar
        from permissao_usuario
       where usu_codigo = :codusuario
         and men_codigo = :codmenu
      union all
      select pg_consultar
        from permissao_usuario
       where gru_codigo in (select gru_codigo
                              from grupo_usuario
                             where usu_codigo = :codusuario)
         and men_codigo = :codmenu
  into :gu_consultar
  do
  begin
   if (gu_consultar = 1) then
   begin
    consultar = 'S';
    exit;
   end
 end
end


Como o meu não aceita boolean, eu troquei pra integer, e onde estava if (:gu_consultar = True) then troquei para if (gu_consultar = 1) then.

Claudia Nogueira

Claudia Nogueira
Responder

Gostei + 1

Mais Posts

19/12/2012

William

A base de dados foi criada em qual versão do Firebird?

A versão do Firebird q vc está tentando criar está Procedure é a mesma da base de dados?
Responder

Gostei + 0

10/06/2014

Ricardo Lima

Desculpa se for repetitivo, mas não entendi muito bem, no meu código esta assim

Ao tentar criar a seguinte procedure 

create procedure sp_raise_error (pUsuario integer, pTabela d_tabela, pOpr d_operacao) 
as 
declare variable v_incluir nous; 
declare variable v_alterar nous; 
declare variable v_excluir nous; 
declare variable v_ver nous; 

begin 
select incluir, alterar, excluir, ver 
from acesso 
where usuarioacesso = :pUsuario 
and tabela= :pTabela 
into :v_incluir, :v_alterar, :v_excluir, :v_ver; 

if (row_count = 0) then 
exception acess_deny; 

if ((:popr = 'I') AND (:v_incluir = 'N')) then 
EXCEPTION acess_deny; 

if ((:popr = 'A') AND (:v_alterar = 'N')) then 
EXCEPTION acess_deny; 

if ((:popr = 'E') AND (:v_excluir = 'N')) then 
EXCEPTION acess_deny; 

if ((:popr = 'V') AND (:v_ver = 'N')) then 
EXCEPTION acess_deny; 

end 


APARECE O ERRO:
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Feature not supported on ODS version older than 11.1.


O que estou fazendo de errado?
Responder

Gostei + 0

10/06/2014

Ricardo Lima

Desculpa se for repetitivo, mas não entendi muito bem, no meu código esta assim

Ao tentar criar a seguinte procedure 

create procedure sp_raise_error (pUsuario integer, pTabela d_tabela, pOpr d_operacao) 
as 
declare variable v_incluir nous; 
declare variable v_alterar nous; 
declare variable v_excluir nous; 
declare variable v_ver nous; 

begin 
select incluir, alterar, excluir, ver 
from acesso 
where usuarioacesso = :pUsuario 
and tabela= :pTabela 
into :v_incluir, :v_alterar, :v_excluir, :v_ver; 

if (row_count = 0) then 
exception acess_deny; 

if ((:popr = 'I') AND (:v_incluir = 'N')) then 
EXCEPTION acess_deny; 

if ((:popr = 'A') AND (:v_alterar = 'N')) then 
EXCEPTION acess_deny; 

if ((:popr = 'E') AND (:v_excluir = 'N')) then 
EXCEPTION acess_deny; 

if ((:popr = 'V') AND (:v_ver = 'N')) then 
EXCEPTION acess_deny; 

end 


APARECE O ERRO:
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Feature not supported on ODS version older than 11.1.


O que estou fazendo de errado?


UTILIZO O FIREBIRD 2.5,
nous = DOMAIN que verifica se e N ou S
Responder

Gostei + 0

10/06/2014

Ricardo Lima

EVMEDIA


download post favorito comentários
Video: Curso Online-Automação Comercial em Delphi com OOP, BPLS e FIREBIRD(Avançado)-Parte III-Continuando com a criação das Stored Procedures da aplicação

Veremos também nesta vídeo-aula, a utilização de exceptions para realizar o bloqueio de determinadas ações aos usuários.

0

Gostei (3) (0)
Atenção! Este vídeo necessita do aplicativo DevMedia Player para ser executada. Clique aqui para baixar o aplicativo

Título: Curso Online-Automação Comercial em Delphi com OOP, BPLS e FIREBIRD(Avançado)-Parte III-Continuando com a criação das Stored Procedures da aplicação

Tempo: 21:00 min

Mini Resumo: Essa é a terceira vídeo-aula do curso de automação comercial. Nesse vídeo iremos dar continuidade a criação de stored procedures. Dessa vez iremos criar um procedimento genérico para o tratamento da segurança dos métodos de inclusão, alteração e deleção. Usaremos um recurso interessante que é a utilização de exceptions para realizar o bloqueio de determinadas ações. Veja como é interessante adotar procedimentos para manipulação de dados e garantir não só a padronização das chamadas como também a organização e centralização das regras de negócio. Além do controle de acesso daremos início a criação de stored procedures para manutenção de grupos, produtos e pessoas. Padronização é tudo!

Tecnologias utilizadas: Bematech, Delphi 6, BPLS, Firebird, Herança Visual e OOP.

Palavras chaves: OOP, Firebird, Automação, BPLS, Bematech.
Este post faz parte do Curso Automação Comercial em Delphi com OOP, BPLS e FIREBIRD(Avançado)


DevMedia [renato Matos]
12 anos de experiência em desenvolvimento de software.

O que você achou deste post?
Gostei (3) (0)
Comentário | Tire sua dúvida

Alex Da Solva Barbosa
Professor, muito boa suas aulas... bem objetivas, mas tranqueina procedore de produtos, fiz igual esta orientado, mas da um erro, como posso conseguir ajuda?


abraço
Alex
[há +1 ano] - Responder


Alex Da Solva Barbosa
Professor vou colar o codigo para ver se tem algo errado

create procedure sp_produtos (
pCodigo d_inteiro,
pCodigodebarras d_barras,
pNome d_nome,
pGrupo d_inteiro,
pValorvenda d_valor,
pValorcompra d_valor,
pICMS d_valor,
pSubst d_n_ou_s,
pIsento d_n_ou_s,
pIncidencia d_n_ou_s,
pOpr d_opr,
pUsuario d_inteiro
)
as
begin
execute procedure sp_raise_error (pUsuario, 'PRODUTOS', pOpr);

if (popr = 'I') then
insert into produtos (codigo, codigodebarras, Nome, grupo, Valor_venda, Valor_compra, ICMS, e_Substituto, e_isento, sem_incidencia)
values (:pCodigo, :pcodigodebarras, :pNome, :pgrupo, :pValor_venda, :pValor_compra, :pICMS, :pSubst, :pisento, :pincidencia)

if (popr = 'A') then
update produtos
set Codigodebarras = :pcodigodebarras,
Nome= :pNome,
grupo= :pGrupo,
Valor_venda=:pValorVenda,
Valor_Compra=:pValorCompra,
ICMS =:pICMS,
e_Substituto= :pSubst,
e_isento= :pisento,
sem_incidencia= :pincidencia
where Codigo = :pcodigo;

if (pOpr = 'E') then
delete from produtos
where codigo = :pCodigo;

end;
[há +1 ano] - Responder


Luis Carlos Godinho
Olá!

Alguns fatores podem levar a dar problema quando se usa store procedures. O problema pode estar na instrução do banco de dados ou até mesmo na codificação do delphi.
Se puder, me envie o banco de dados em questão para que eu verifique aqui e tente te ajudar.

luis.c.godinho@hotmail.com

Abs.!
[há +1 ano] - Responder


Neimar Egio Sversute
Ao criar a seguinte procedure:
create procedure sp_get_gerador (pNome varchar(50)) returns (pValor d_inteiro)
as
declare variable vStm varchar(500);
begin
vStm = 'select next value for ' || pNome || ' from rdb$databases';
execute statement vStm into :pValor;
suspend;
end;

Acontece o seguinte erro:

ISC ERROR CODE:335544569

ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
Unexpected end of command - line 3, column 34

o que está errado
[há +1 ano] - Responder


Joel Rodrigues
O tipo d_inteiro está criado?
[há +1 mês] - Responder


Filipi Grijó Reis
Mestre boa noite,
Ao adicionar a procedure abaixo:

CREATE PROCEDURE "sp_get_gerador" (pNome Varchar(50)) returns (pValor INTEGER)
AS
DECLARE VARIABLE vStm Varchar(500);
BEGIN
vStm = 'select next value for ' || pNome || ' from rdb$database';
EXECUTE STATEMENT vStm INTO :pValor;
SUSPEND;
END;

Estou recebendo o seguinte erro:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 8.
STATEMENT.

Poderia me ajudar ?
[há +1 ano] - Responder


Luis Carlos Godinho
Olá!

Eu rodei esta SQL de criação da procedure aqui e criou normalmente.
Estou usando o FB 2.5, qual versão esta usando ai?

Abs.!
[há +1 ano] - Responder


Marcelo Barreto
boa noite estou com mesmo problema do meu colega ai encima ja refiz o banco 4x achando que poderia ter digitando algo errado mais sempre acontece o mesmo problema esto com fire.. 2.5 tambem mas nao esta dando certo,Se for possível mim ajuda ficarei muito grato
[há +1 ano] - Responder


Wesley Yamazack
Olá qual é o erro que você está tendo?

Um abraço e até mais.
[há +1 ano] - Responder


Geovany Silveira Araújo
Criar a procedure o firebird faz numa boa. O problema é quando se faz a consulta aí a procedure retorna o erro: Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 8.
STATEMENT.

E agora?

[há +1 mês] - Responder


Daniel Sobrinho Laporte
Olá,

Tem como enviar o seu exemplo para meu e-mail para que eu verifique pra você?

Abraços,

Daniel
[há +1 mês] - Responder


Ricardo Caldeira
Ao tentar criar a seguinte procedure

create procedure sp_raise_error (pUsuario integer, pTabela d_tabela, pOpr d_operacao)
as
declare variable v_incluir nous;
declare variable v_alterar nous;
declare variable v_excluir nous;
declare variable v_ver nous;

begin
select incluir, alterar, excluir, ver
from acesso
where usuarioacesso = :pUsuario
and tabela= :pTabela
into :v_incluir, :v_alterar, :v_excluir, :v_ver;

if (row_count = 0) then
exception acess_deny;

if ((:popr = 'I') AND (:v_incluir = 'N')) then
EXCEPTION acess_deny;

if ((:popr = 'A') AND (:v_alterar = 'N')) then
EXCEPTION acess_deny;

if ((:popr = 'E') AND (:v_excluir = 'N')) then
EXCEPTION acess_deny;

if ((:popr = 'V') AND (:v_ver = 'N')) then
EXCEPTION acess_deny;

end

APARECE O ERRO:
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Feature not supported on ODS version older than 11.1.

COMO PODERIA RESOLVER ISSO?
[hoje] - Responder


Ricardo Caldeira
Esqueci de dizer que estou utilizando o FIREBIRD 2.5
[hoje] - Responder


Ricardo Caldeira MVP
Descobri, mas não entendi.
eu retirei os domains e coloquei de forma normal, integer varchar e etc...
funcionou...

será se e por que o charset esta em ISO8859_1, não sei nem por que esta assim, eu não coloquei.
Tentei mudar para wIN1250 mas não adiantou.

E recomendado colocar como?
vou dropar tudo e fazer de novo, aguardando instruções para começar
Responder

Gostei + 0

10/06/2014

Deivison Melo

Qual sua versão do firebird?

create procedure PROC_VERIFICA_ACESSO_MENU(CODUSUARIO integer, CODMENU integer)
  RETURNS (CONSULTAR varchar (1)) as

declare variable gu_consultar boolean; 

begin
    consultar = 'N';
    for select pu_consultar
          from permissao_usuario
         where usu_codigo = :codusuario
           and men_codigo = :codmenu
    union

    select pg_consultar
      from permissao_usuario
     where gru_codigo in (
                          select gru_codigo
                            from grupo_usuario
                           where usu_codigo = :codusuario)
       and men_codigo = :codmenu

    into :gu_consultar

    do

    begin
        if (:gu_consultar = true) then
            begin
              consultar = 'S';
              exit;
            end 
    end
end



Dependendo da sua versão do firebird o tipo boolean não será permitido!!

Consulte a documentação!

Abração e bons códigos!!

Emanoel Deivison
Recife - PE
Responder

Gostei + 0

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

Aceitar