![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() 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 ![]() :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) |
#2
|
|||
|
|||
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 ( ![]() 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. |
#3
|
|||
|
|||
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) |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
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, ![]() 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) |
#6
|
|||
|
|||
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. |
#7
|
||||
|
||||
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). |
#8
|
|||
|
|||
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) |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
|