gladiador Postado Março 13, 2004 Denunciar Share Postado Março 13, 2004 Desenvolvi varias tabelas em um determinado banco de dados utilizando o SQL Server 7.0, sendo que criei stored procedures para executar consultas junto a essas tabelas, isso tudo utilizando como Front End o Delphi 7.0 obtive excelente resultado ou seja tudo funciona perfeitamente , porém atualmente migrei os bancos para o Interbase 7.1 e quando tentei contruir uma stored procedure me deparei com os seguintes erros :erro linha 1 , nº 104 Segue o código da procedure que era realizada perfeitamente no SQL Server e que quando roda no Interbase da erro :--------------------------------------------------------------------------- CREATE PROCEDURE ADVOGA @DATA_INI DATETIME, @DATA_FINAL DATETIME , @CIA VERCHAR(4) AS SELECT Cad_Log.DP, Cad_Log.Nome_Rua, Tab_Infracao.Tipo_Infracao, Ocorrencia.Data, Ocorrencia.Horario, Ocorrencia.Flagrante FROM Ocorrencia Ocorrencia, Cad_Log Cad_Log , Tab_Infracao Tab_Infracao WHERE Ocorrencia.Cod_Infracao = Tab_Infracao.Cod_Infracao AND Ocorrencia.Codigo_Rua = Cad_Log.Codigo_Rua AND Ocorrencia.Data >= @DATA_INI AND Ocorrencia.Data <= @DATA_FINAL AND Cad_Log.Cia = @CIA AND Ocorrencia.Flagrante ="S" Order by Tab_Infracao.Tipo_Infracao EXEC ADVOGA "2000-04-01", "2000-08-30", "02" -------------------------------------------------------------------------------Deixando claro o código acima funciona perfeitamente no SQL Server 7.0 / 2000porém no Interbase 7.1 da erro na primeira linha e reclama do "@" ou seja não posso usar arroba? Como ficaria isso no Interbase poderia me explicar o código pois, os tutoriais sobre procedures no Interbase estão deixando a desejar e estão bem fracos e executando basico Obrigado Link para o comentário Compartilhar em outros sites More sharing options...
0 bolomaster Postado Março 15, 2004 Denunciar Share Postado Março 15, 2004 Ola kro amigo Gladiador muito estranho, mas tenho a impressao que o uso das @ neste caso não seria necessario no interbase, simples porque o seu metodo é diferente do SQL SERVER, bem mas não importa agora eu achei um artigo no site www.delphi.eti.br sobre store procedures em interbase quem sabe isso pode ajudar você okStored Procedures é um objeto de banco de dados que contém comandos que se resumem em linhas de comando que processam tarefas, ou fazem chamadas a outras procedures.Uma Stored Procedure (procedimento armazenado), além de executar instruções, possibilita a interação e aplicação que a invoca e o seu corpo de código por intermédio dos parâmetros definidos no seu cabeçalho.A execução de uma Stored Procedure sempre ocorre de forma explícita, ou de forma interativa, como por exemplo pela utilização do SQL* Plus ou sendo referenciada no corpo do código de uma aplicação Cliente.Neste último exemplo um procedimento armazenado, se revela um excelente núcleo para manter código que processa tarefa envolvendo a estrutura de dados. Manter o código de processamento armazenado no banco de dados, traz de imediato a facilidade na manutenção em um único local, refletindo na aplicação que faz referência a esta procedure.Se elevarmos a análise para um ambiente de desenvolvimento corporativo onde se caracteriza a heterogeneidade pela adoção de linguagens de programação múltiplas, o uso de Stored Procedure alcança importância sem igual, já que seu uso conforme abordado no parágrafo anterior, irá atingir uma maior magnitude.Diferente de uma Trigger, que tem o seu processamento disparado pela ocorrência de comandos para a tabela associada, uma Stored Procedure ocorre quando explicitamente solicitada.Na sequência, teremos alguns exemplos práticos do cotidiano, que visam explorar a plenitude do uso de procedures no contexto do desenvolvimento de sistemas comerciais. 23) CREATE PROCEDURE PROC_GENCLIENTES RETURNS (NUMERO INTEGER) AS beginNUMERO = GEN_ID(Gen_clientes, 1);Suspend;end 24) CREATE PROCEDURE PROC_GENPRODUTOS RETURNS (NUMERO INTEGER) AS beginNUMERO = GEN_ID(Gen_Produtos, 1);Suspend;end 25) CREATE PROCEDURE PROC_GENPEDIDOS RETURNS (NUMERO INTEGER) AS beginNUMERO = GEN_ID(Gen_pedidos, 1);Suspend;end29) CREATE PROCEDURE PROC_SELECT RETURNS (VARNOME CHAR(60)) AS BEGINFOR SELECT NOME FROM CLIENTES INTO :VARNOME DOSUSPEND;END26) CREATE PROCEDURE PROC_INCPRODUTOS (PARDESCRICAO VARCHAR(25),PARPRECO NUMERIC(15, 2),PARSALDO INTEGER) AS DECLARE VARIABLEVarReg INTEGER; beginBEGINVarReg = GEN_ID(Gen_Produtos, 1);Insert Into Produtos Values( :VarReg,:ParDESCRICAO,:ParPRECO,:ParSaldo);WHEN SQLCODE -530 DOEXCEPTION EXC_REGEXISTENTE;ENDSUSPEND;END 27) CREATE PROCEDURE PROC_ALTPRODUTOS (PARID_PRODUTO INTEGER,PARDESCRICAO VARCHAR(25),PARPRECO NUMERIC(15, 2),PARSALDO INTEGER) AS beginUpdate Produtos SetDESCRICAO = :PARDESCRICAO,preço = :PARPRECO,Saldo = :PARSALDOWhere ID_Produto = :PARID_PRODUTO;END 28) CREATE PROCEDURE PROC_EXCPRODUTOS (PARID_PRODUTO INTEGER) AS beginDelete From Produtos Where ID_Produto = :PARID_PRODUTO;END 29) CREATE PROCEDURE PROC_SELECT RETURNS (VARNOME CHAR(60)) AS BEGINFOR SELECT NOME FROM CLIENTES INTO :VARNOMEDOSUSPEND;END30) CREATE PROCEDURE PROC_ESTATVENDA (PARID_CLIENTE INTEGER,PARDATAINI DATE,PARDATAFIM DATE)RETURNS ( TOT_VENDA NUMERIC(15, 2),AVG_VENDA NUMERIC(15, 2),MIN_VENDA NUMERIC(15, 2),MAX_VENDA NUMERIC(15, 2)) AS BEGINSELECT SUM(ITENS.QUANTIDADE * ITENS.preço),AVG(ITENS.QUANTIDADE * ITENS.preço),MIN(ITENS.QUANTIDADE * ITENS.preço),MAX(ITENS.QUANTIDADE * ITENS.preço)FROM CLIENTES, PEDIDOS, ITENSWHERE CLIENTES.ID_CLIENTE = PEDIDOS.ID_CLIENTE AND PEDIDOS.ID_PEDIDO = ITENS.ID_PEDIDO ANDCLIENTES.ID_CLIENTE = :PARID_CLIENTE ANDPEDIDOS.DATA BETWEEN:PARDATAINI AND :PARDATAFIMINTO :TOT_VENDA,:AVG_VENDA,:MIN_VENDA, :MAX_VENDA;SUSPEND;END Triggers Triggers são blocos ISQL que contém códigos que implementam instruções que podem afetar dados contidos em tabelas, validos dados baseadas em certas condições, acionar procedimentos armazenados entre outros objetos.Uma Trigger, que significa gatilho, é definida (criada) e associada a um evento (ocorrência) conseqüente aos comandos Insert, Delete ou Update. Ao contrário de uma Store Procedure (Procedimento Armazenad), uma Trigger não é invocada nem referenciada em código Cliente nem no servidor InterBase . Conforme sugere seu nome, uma Trigger é disparada (executada ) pela manipulação da tabela na qual foi criada.Conforme conceitualmente já abordado no tópico integridade, uma Trigger é um excelente mecanismo para se controlar as restrições, tendo em vista a possibilidade de interferir nos valores que estão sendo manipulados, pode-se ainda estabelecer uma comunicação clara com a aplicação Front-End. Como exemplos de situações em que a adoção de Triggers se aplica, relacionamos o seguinte:- Fazer manutenção (atualização) em outras tabelas quando ocorrerem operações de inclusão, alteração ou exclusão na tabela corrente.- Estabelecer validação para colunas.- Alimentar tabelas de controle de Log.- Sinalizar aplicação Front-End de alguma ocorrência específica.30) CREATE TRIGGER TRIG_TESTACREDITO_INC FOR CLIENTES ACTIVE BEFORE INSERT POSITION 0 ASBEGINIF (NEW.CREDITO > 20000) THENBEGINNEW.CREDITO = 20000;ENDEND 31) CREATE TRIGGER TRIG_TESTACREDITO_ALT FOR CLIENTES ACTIVE BEFORE UPDATE POSITION 0 ASBEGINIF (NEW.CREDITO > 20000) THENBEGINNEW.CREDITO = 20000;ENDEND 32) CREATE TRIGGER TRIG_ID_CLIENTE FOR CLIENTES ACTIVE BEFORE INSERT POSITION 0 ASBEGINNEW.ID_Cliente = GEN_ID(Gen_clientes, 1);END33) CREATE TRIGGER TRIG_ATUALIZASALDOPRODUTO_ALT FOR ITENS ACTIVE BEFORE UPDATE POSITION 0 ASDECLARE VARIABLE VARSALDO INTEGER;BEGINUPDATE PRODUTOS SETPRODUTOS. SALDO = PRODUTOS.SALDO + OLD.QUANTIDADEWHERE PRODUTOS.ID_PRODUTO = OLD.ID_PRODUTO;SELECT PRODUTOS.SALDO FROM PRODUTOSWHERE PRODUTOS.ID_PRODUTO = NEW.ID_PRODUTOINTO :VARSALDO;IF (:VARSALDO >= NEW.QUANTIDADE) THENBEGINUPDATE PRODUTOS SETPRODUTOS.SALDO = PRODUTOS.SALDO - NEW.QUANTIDADEWHERE PRODUTOS.ID_PRODUTO = NEW.ID_PRODUTO;ENDELSEBEGIN EXCEPTION EXC_SALDO;ENDEND 34) CREATE TRIGGER TRIG_ATUALIZASALDOPRODUTO_EXC FOR ITENS ACTIVE BEFORE DELETE POSITION 0 ASBEGINUPDATE PRODUTOS SETPRODUTOS.SALDO = PRODUTOS.SALDO + OLD.QUANTIDADEWHERE PRODUTOS.ID_PRODUTO = OLD.ID_PRODUTO;END 35) CREATE TRIGGER TRIG_ATUALIZASALDOPRODUTO_INC FOR ITENS ACTIVE BEFORE INSERT POSITION 0 ASDECLARE VARIABLE VARSALDO INTEGER;BEGINSELECT PRODUTOS.SALDO FROM PRODUTOSWHERE PRODUTOS.ID_PRODUTO = NEW.ID_PRODUTOINTO :VARSALDO; IF (:VARSALDO >= NEW.QUANTIDADE) THENBEGINUPDATE PRODUTOS SETPRODUTOS.SALDO = PRODUTOS.SALDO - NEW.QUANTIDADEWHERE PRODUTOS.ID_PRODUTO = NEW.ID_PRODUTO;ENDELSEBEGIN EXCEPTION EXC_SALDO;ENDENDespero que seja de grande utilidade abraços Rafael Marciano Link para o comentário Compartilhar em outros sites More sharing options...
0 gladiador Postado Março 17, 2004 Autor Denunciar Share Postado Março 17, 2004 /* Classe A */ Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Março 18, 2004 Denunciar Share Postado Março 18, 2004 oi amigos, me desculpa a ignorância, mais alguém pode me dizer num modo aportuguesado o que que significa Stored Procedure? ou seja, o que isso ai faz?E quando é bom utilizar isso?Eu dei uma lida nesse artigo que o colega acima postou, mais a ignorância não me deixou entender muito!Obrigado! Link para o comentário Compartilhar em outros sites More sharing options...
0 gladiador Postado Março 19, 2004 Autor Denunciar Share Postado Março 19, 2004 /* Procedimento Armazenado, ou seja vamos supor que você va desenvolver em uma aplicação DELPHI e la tenha que fazer pesquisas ou deleção ou inserção ou atualizar cálculos , o que pode ser feito ?uma Stored Procedure Suponhamos que você tenha um campo onde tera pesquisar nomes porem varias outras tabelas relacionadas, ou seja ou SQL grande e complicado, caso faça isso no DELPHI ou seja no FRONT END quando executado na sua máquina ótimo porém quando executado em rede a performance cai , ai entra a procedure você cria ela no banco e executa através de apenas uma linha no front end ou seja no DELPHI fica bem mais rápido , basicamente é isso ai */ Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
gladiador
Desenvolvi varias tabelas em um determinado banco de dados
utilizando o SQL Server 7.0, sendo que criei stored procedures para
executar consultas junto a essas tabelas, isso tudo utilizando como
Front End o Delphi 7.0 obtive excelente resultado ou seja tudo
funciona perfeitamente , porém atualmente migrei os bancos para o
Interbase 7.1 e quando tentei contruir uma stored procedure me deparei
com os seguintes erros :
erro linha 1 , nº 104
Segue o código da procedure que era realizada perfeitamente no SQL Server
e que quando roda no Interbase da erro :
---------------------------------------------------------------------------
-------------------------------------------------------------------------------
Deixando claro o código acima funciona perfeitamente no SQL Server 7.0 / 2000
porém no Interbase 7.1 da erro na primeira linha e reclama do "@" ou seja não posso
usar arroba?
Como ficaria isso no Interbase poderia me explicar o código pois, os tutoriais sobre
procedures no Interbase estão deixando a desejar e estão bem fracos e executando
basico
Obrigado
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados