Fórum Ajuda com Stored Procedure no IB 7.5 #49084
31/01/2005
0
Andei vendo a documentação, procurei na internet, fiz a sintaxe exatamente como está, mas não consigo criar uma SP no IB7. Em Postgresql 7.4 ela existe e funciona direitinho (claro, não com a mesma sintaxe). É um sistema de agendamento de consultas que tenho em D7 e Postgresql que quero coloca-lo tambem em IB.
Tabela: Agendamento
CREATE TABLE AGENDA
(
COD_DENTVARCHAR(8) NOT NULL,
COD_ESPVARCHAR(4) NOT NULL,
DATACONSTIMESTAMP NOT NULL,
HORA VARCHAR(5) NOT NULL,
COD_LOCALVARCHAR(5) NOT NULL,
CODPLANVARCHAR(5) NOT NULL,
CODEMP VARCHAR(6) NOT NULL,
CONVENIOVARCHAR(25),
NUM VARCHAR(20),
NOME VARCHAR(30),
ATENDIDOVARCHAR(1),
AMB VARCHAR(11),
TELEFONEVARCHAR(15),
RETORNOVARCHAR(1),
QTDE INTEGER,
LOGIN VARCHAR(15),
TEMPO INTEGER,
CONSTRAINT CHAVE_AGENDA PRIMARY KEY (COD_DENT, COD_ESP, DATACONS, HORA, COD_LOCAL)
);
Function no PostgreSQL:
CREATE FUNCTION agendamento(timestamp, varchar, varchar) RETURNS agenda AS ´SELECT * FROM agenda
WHERE (DATACONS = $1) And (COD_LOCAL = $2) AND (Atendido = $3);´ LANGUAGE ´sql´ VOLATILE;
Ela funciona belezinha no PostgreSQL. Fui tentar criar uma SP no IB7 com o seguinte comando:
CREATE PROCEDURE agendamento(data1 timestamp, local varchar(5), atend varchar(1))
RETURNS (cod_dent varchar(8),cod_esp varchar(4),datacons timestamp,hora varchar(5), cod_local varchar(5),codplan varchar(5),codemp varchar(6),convenio varchar(25),num varchar(20),nome varchar(30),atendido varchar(1),amb varchar(11),telefone varchar(15), retorno varchar(1),qtde integer,login varchar(15),tempo integer)
AS
BEGIN
SELECT *
FROM agenda
WHERE DATACONS = :data1) and COD_LOCAL = :local and Atendido = :atend;
EXIT;
END;
obs: onde está o smile é o número OITO + PARENTESES
Dá o seguinte erro: Linha 7 caracter 28
Que é justamente o ponto-vírgula. retirando-o continua dando erro.
O que pode estar errado?
Danilo_zanaga
Curtir tópico
+ 0Posts
31/01/2005
Gandalf.nho
SET TERM ^; CREATE PROCEDURE agendamento(data1 timestamp, local varchar(5), atend varchar(1)) RETURNS (cod_dent varchar(,cod_esp varchar(4),datacons timestamp,hora varchar(5), cod_local varchar(5),codplan varchar(5),codemp varchar(6),convenio varchar(25),num varchar(20),nome varchar(30),atendido varchar(1),amb varchar(11),telefone varchar(15), retorno varchar(1),qtde integer,login varchar(15),tempo integer) AS BEGIN FOR SELECT lista_campos FROM agenda WHERE DATACONS = :data1 AND COD_LOCAL = :local AND Atendido= :atend INTO lista_variaveis DO SUSPEND; END ^ SET TERM ;^
Gostei + 0
31/01/2005
Danilo_zanaga
Gostei + 0
31/01/2005
Danilo_zanaga
SET TERM ^;
CREATE PROCEDURE agendamento(data1 timestamp, local varchar(5), atend varchar(1))
RETURNS (cod_dent varchar(8),cod_esp varchar(4),datacons timestamp,hora varchar(5), cod_local varchar(5),codplan varchar(5),codemp varchar(6),convenio varchar(25),num varchar(20),nome varchar(30),atendido varchar(1),amb varchar(11),telefone varchar(15), retorno varchar(1),qtde integer,login varchar(15),tempo integer)
AS
BEGIN
FOR SELECT cod_dent,cod_esp,datacons,hora,cod_local,codplan,codemp,convenio,num,nome,atendido,amb,telefone,retorno,qtde,login,tempo FROM agenda
WHERE DATACONS = :data1 AND COD_LOCAL = :local AND Atendido= :atend INTO :data1,:local,:atend DO
SUSPEND;
END ^
SET TERM ;^
Deu o seguinte erro:
count of column list and variable list don´t match
Creio que seja sobre o numero de variaveis e numero de colunas nao bate. Como resolvo?
Gostei + 0
31/01/2005
Martins
SET TERM ^; CREATE PROCEDURE agendamento(data1 timestamp, local varchar(5), atend varchar(1)) RETURNS (cod_dent varchar(,cod_esp varchar(4),datacons timestamp,hora varchar(5), cod_local varchar(5),codplan varchar(5),codemp varchar(6),convenio varchar(25),num varchar(20),nome varchar(30),atendido varchar(1),amb varchar(11),telefone varchar(15), retorno varchar(1),qtde integer,login varchar(15),tempo integer) AS BEGIN FOR SELECT lista_campos FROM agenda WHERE DATACONS = :data1 AND COD_LOCAL = :local AND Atendido= :atend INTO lista_variaveis DO SUSPEND; END ^ SET TERM ;^
SET TERM indica o terminador que por padrão é (;) e é mudado para (^) e depois retorna para o default, ele apareceu aí por ter sido copiado do Ib-Expert ou IBConsole.
Espero q possa ajudar
Gostei + 0
31/01/2005
Gandalf.nho
O nº e tipo de dados dos campos na cláusula SELECT deve coincidir com o nº e tipo de dados das variáveis na cláusula INTO
Gostei + 0
01/02/2005
Danilo_zanaga
Mas ao executa-la, não retorna absolutamente nada...
Sendo que existem consultas marcadas para 31/01/2005 no local ´J1´ que não foram atendidas, ´N´
Gostei + 0
01/02/2005
Danilo_zanaga
LOL
o banco estava vazio
Gostei + 0
01/02/2005
Gandalf.nho
Sem problemas
Gostei + 0
02/02/2005
Danilo_zanaga
Function no PostgreSQL:
CREATE FUNCTION agendamento(timestamp, varchar, varchar) RETURNS agenda AS ´SELECT * FROM agenda
WHERE (DATACONS = $1) And (COD_LOCAL = $2) AND (Atendido = $3);´ LANGUAGE ´sql´ VOLATILE;
No IB retorna os registros que quero, mas nulos.
Gostaria que alguem desse uma ajuda para a SP em IB.
Tabela Agenda:
CREATE TABLE AGENDA
(
COD_DENTVARCHAR(8) NOT NULL,
COD_ESPVARCHAR(4) NOT NULL,
DATACONSTIMESTAMP NOT NULL,
HORAVARCHAR(5) NOT NULL,
COD_LOCALVARCHAR(5) NOT NULL,
CODPLANVARCHAR(5) NOT NULL,
CODEMPVARCHAR(6) NOT NULL,
CONVENIOVARCHAR(25),
NUMVARCHAR(20),
NOMEVARCHAR(30),
ATENDIDOVARCHAR(1),
AMBVARCHAR(11),
TELEFONEVARCHAR(15),
RETORNOVARCHAR(1),
QTDEINTEGER,
LOGINVARCHAR(15),
TEMPOINTEGER,
CONSTRAINT CHAVE_AGENDA PRIMARY KEY (COD_DENT, COD_ESP, DATACONS, HORA, COD_LOCAL)
);
Gostei + 0
02/02/2005
Gandalf.nho
Gostei + 0
02/02/2005
Danilo_zanaga
select * from agenda where datacons=´02/01/2005´;
01 de fevereiro, diga-se. Retorna os registros normalmente.
portanto, de uso
select * from agendamento(´02/01/2005´,´J1´,´N´);
deveria funcionar, não concorda?
Gostei + 0
02/02/2005
Gandalf.nho
Gostei + 0
02/02/2005
Danilo_zanaga
Gostei + 0
02/02/2005
Gandalf.nho
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)