Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Unhappy Ayuda con un procedimiento

Hola a todos:
Estoy tratando de crear un procedimiento que me si un rango horario esta libre inserta una cita en dicho horario y si no genera un evento.... el caso es que no soy capaz de que me lo acepte la base de datos.... llevo toda la tarde haciendo pruebas y nada...
alguien me puede decir que hago mal?? trabajo con intebase y el ibconsole.


CREATE PROCEDURE Insertar_Cita ( ID_CLIENTE INTEGER, ID_USUARIO INTEGER,
ID_TRATAMIENTO INTEGER, FECHA DATE, INICIO TIME,
FIN TIME, AVISAR VARCHAR(2), ESTADO VARCHAR(2),
CICLICO VARCHAR(2), OBSERVACIONES VARCHAR(3000),
NOMBRE VARCHAR(50), TELEFONO VARCHAR(15),
SECUNDARIA VARCHAR(3), COSTE NUMERIC(10, 2),
COBRADA VARCHAR(3), PRIMERA_CITA VARCHAR(3),
PREV_ADELANTAMIENTO VARCHAR(10), DUO VARCHAR(3),
TRATAMIENTO VARCHAR(30) )
RETURNS (idcita INTEGER )

AS

DECLARE VARIABLE cita integer;
DECLARE VARIABLE conflicto integer;

BEGIN

SELECT COUNT(*)
FROM CITA
WHERE fecha=:fecha AND id_usuario=:id_usuario AND secunduaria=:secundaria
AND (
:inicio<fin AND fin<=:fin AND :inicio<=inicio AND inicio<:fin
AND (
( inicio<=:inicio AND :inicio<fin AND inicio<:fin AND :fin<=fin )
OR ( :inicio<=inicio AND inicio<:fin AND :inicio<fin AND fin<=:fin )
)
)
INTO :conflicto;

IF (:conflicto=0) THEN
BEGIN
:cita=GEN_ID(NUEVA_CITA,1);
INSERT INTO CITA (ID_CITA,ID_CLIENTE,ID_USUARIO,ID_TRATAMIENTO,FECHA,
INICIO, FIN, AVISAR,ESTADO,CICLICO,OBSERVACIONES,NOMBRE,
TELEFONO,SECUNDARIA,COSTE,COBRADA,PRIMERA_CITA,PREV_ADELANTAMIENTO
DUO,TRATAMIENTO)
VALUES
(:cita,:ID_CLIENTE,:ID_USUARIO,:ID_TRATAMIENTO,:FECHA,
:INICIO, :FIN, :AVISAR,:ESTADO,:CICLICO,:OBSERVACIONES,:NOMBRE,
:TELEFONO,:SECUNDARIA,:COSTE,:COBRADA,:PRIMERA_CITA,:PREV_ADELANTAMIENTO
UO,:TRATAMIENTO);
:idcita=:cita;
SUSPEND;
END;
ELSE POST_EVENT "falloInsercion";

END;




gracias a tod@s
__________________

Un trozo de chocolate te da la energia necesaria para ir a por otro trozo de chocolate (by ELENA)
Responder Con Cita
  #2  
Antiguo 29-12-2003
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola:
Fijate que no explicas que BD estas usando, en Oracle que es el que yo uso cuando trabajas con los parámetros que recibió el procedimiento no le pones los dos puntos (, por ejemplo en tu primera consulta quedaría algo asi:


SELECT COUNT(*)
FROM CITA
WHERE fecha=fecha AND id_usuario=id_usuario AND secunduaria=secundaria
AND (
inicio<fin AND fin<=fin AND inicio<=inicio AND inicio<fin
AND (
( inicio<=inicio AND inicio<fin AND inicio<fin AND fin<=fin )
OR ( inicio<=inicio AND inicio<fin AND inicio<fin AND fin<=fin )
)
)
INTO conflicto;


quitandole los dos puntos y refiriendote a las variables directamente (notese el hecho que es recomendable cambiar el nombre a algunos parametros porque tienen el mismo nombre que el campo de la tabla). OTra cosa es que no dices el error que se está generando ¿cuál es el comportamiento del procedimiento al ejecutarlo? no te marca error?

espero te sirva de algo

Saludos




INTO conflicto;
__________________
Ernesto R.
Responder Con Cita
  #3  
Antiguo 30-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Hola otra vez... gracias por la antencion...

Trabajo sobre interbase y el problema no es al ejecutar, la pega es al tratar de crearlo que ni me deja.
He probado a traves de un script y si hago un set term antes y despues del codigo no me funciona, se ejecuta la instruccion de conexion y el set tern y se cierra el cliente (interbase widows sql) si lo ejecuto sin el set term me da errores porqeu el dialecto no me soporta el tipo TIme.

He probado desde el interprete del IBConsole y me da un error de sintaxis en la linea 28 caracter 1... segun el el caracter problematico es un ":" pero por ahi solo esta el OR

La verdad que no se si se puede meter directamente desde el IBConsole... tendre que pasarme a un cliente que soporte el dialecto 3.... alguien sabe donde puedo bajarmelo?

gracias again.
__________________

Un trozo de chocolate te da la energia necesaria para ir a por otro trozo de chocolate (by ELENA)
Responder Con Cita
  #4  
Antiguo 30-12-2003
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola de nuevo:
A ver que se puede hacer...probemos al fin que echando a perder se aprende, prueba hacer la primer consulta de la siguiente manera:

SELECT COUNT(*) INTO :conflicto
FROM CITA
WHERE fecha=:fecha AND id_usuario=:id_usuario AND secunduaria=:secundaria
AND (
:inicio<fin AND fin<=:fin AND :inicio<=inicio AND inicio<:fin
AND (
( inicio<=:inicio AND :inicio<fin AND inicio<:fin AND :fin<=fin )
OR ( :inicio<=inicio AND inicio<:fin AND :inicio<fin AND fin<=:fin )
)
);

y a ver si asi funciona el asunto (cambie el orden del into antes de la clausula from por si no te has dado cuenta)

Saludos



__________________
Ernesto R.
Responder Con Cita
  #5  
Antiguo 30-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Gracias Ramiretor pero intento fallido, me ha dejao muy claro que el into no va donde propones.....
Tras arduas averiguaciones he realizado otra version del polemico procedure que por lo menos no da errores sintacticos.
El problema es que ahora me dice: "Column Unknow" con lo quue flipo porque he archicomprobado los nombres en las dos consultas.

Socorrroooo!

set term !!;

CREATE PROCEDURE Insertar_Cita ( ID_CLIENTE INTEGER, ID_USUARIO INTEGER,
ID_TRATAMIENTO INTEGER, FECHA DATE, INICIO TIME,
FIN TIME, AVISAR VARCHAR(2), ESTADO VARCHAR(2),
CICLICO VARCHAR(2), OBSERVACIONES VARCHAR(3000),
NOMBRE VARCHAR(50), TELEFONO VARCHAR(15),
SECUNDARIA VARCHAR(3), COSTE NUMERIC(10, 2),
COBRADA VARCHAR(3), PRIMERA_CITA VARCHAR(3),
PREV_ADELANTAMIENTO VARCHAR(10), DUO VARCHAR(3),
TRATAMIENTO VARCHAR(30) )
RETURNS (idcita INTEGER ) AS
DECLARE VARIABLE ncita integer;
DECLARE VARIABLE conflicto integer;
BEGIN
SELECT COUNT(*)
FROM CITA
WHERE fecha=:fecha AND id_usuario=:id_usuario AND secundaria=:secundaria
AND (:inicio<fin AND fin<=:fin AND :inicio<=inicio AND inicio<:fin
AND ((inicio<=:inicio AND :inicio<fin AND inicio<:fin AND :fin<=fin )
oR ( :inicio<=inicio AND inicio<:fin AND :inicio<fin AND fin<=:fin )))
INTO conflicto;
IF (conflicto=0) THEN
BEGIN
ncita=GEN_ID(NUEVA_CITA,1);
INSERT INTO CITA (ID_CITA,ID_CLIENTE,ID_USUARIO,ID_TRATAMIENTO,FECHA,
INICIO, FIN, AVISAR,ESTADO,CICLICO,OBSERVACIONES,NOMBRE,
TELEFONO,SECUNDARIA,COSTE,COBRADA,PRIMERA_CITA,PREV_ADELANTAMIENTO,
DUO,TRATAMIENTO)
VALUES
(:ncita,:ID_CLIENTE,:ID_USUARIO,:ID_TRATAMIENTO,:FECHA,
:INICIO, :FIN, :AVISAR,:ESTADO,:CICLICO,:OBSERVACIONES,:NOMBRE,
:TELEFONO,:SECUNDARIA,:COSTE,:COBRADA,:PRIMERA_CITA,:PREV_ADELANTAMIENTO,
UO,:TRATAMIENTO);
idcita=ncita;
EXIT;
END
ELSE
POST_EVENT "falloInsercion" ;
END!!

set term ;!!
__________________

Un trozo de chocolate te da la energia necesaria para ir a por otro trozo de chocolate (by ELENA)
Responder Con Cita
  #6  
Antiguo 30-12-2003
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola:
Pues ese error regularmente lo da porque el nombre de algún campo de alguna tabla está mal. Lo demás no sé que puede ser

Saludos
__________________
Ernesto R.
Responder Con Cita
  #7  
Antiguo 30-12-2003
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Este error también lo puede provocar el que esté mal un nombre de parámetro o variable. Al no reconocer el parámetro, no sabe si lo que va allí es un parámetro o un campo, y siempre da el error de nombre de campo desconocido.

Prueba a poner todos los parámetros/variables en mayúsculas (tienes algunos en minúsculas), y revisa sus nombres.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #8  
Antiguo 31-12-2003
gario gario is offline
Miembro
 
Registrado: oct 2003
Ubicación: Gijon
Posts: 34
Poder: 0
gario Va por buen camino
Pues una vez mas es una de estas estupideces que provocara que el dia menos pensado tire el pc por la ventana.

La cosa es que POST_EVENT "falloInsercion" ; va con comillas simples por no ser un nombre de columna, es el nombre que le doy al evento.... sobrecojedor verdad??

Muchas gracias a todos por la ayuda!!!
__________________

Un trozo de chocolate te da la energia necesaria para ir a por otro trozo de chocolate (by ELENA)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 00:08:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi