Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2010
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Simular una función almacenada en Firebird

Buenas, tengo un procedimiento almacenado y estoy intentando hacer lo siguiente:

Código SQL [-]
CREATE PROCEDURE FECHA_HORA_SERVIDOR 
returns (
    fechahora timestamp)
as
begin
  /* Devuelve la fecha y hora del servidor (marca de tiempo)*/
  --select distinct current_time from entorno
  --into :fechahora;
    
  fechahora = current_timestamp;
  suspend;
end
Ahora mi consulta...
Código SQL [-]
Select fecha_hora_servidor From rdb$database

Así como está no funciona el Select, el error me dice:
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
FECHA_HORA_SERVIDOR;

Lo que quisiera es poder lograr que a un procedimiento almacenado lo pueda poner como expresión dentro del Select...
Si no se puede de esta manera, ¿qué otra forma tengo para lograrlo?

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 01-09-2010
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Tal vez así...

Código SQL [-]

select 
     campo1, 
     campo2, 
     (selectfechahora fromFECHA_HORA_SERVIDOR) as Fecha_hora_servidor
from Tabla where ......

(lo digo de memoria, creo que así esta bien, pero si no es algo similar...)
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #3  
Antiguo 01-09-2010
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
consulta directa

Creo que no entiendo tu store procedure, ¿Porque no consultas directamente la fecha?
Código SQL [-]
select current_timestamp from RDB$Database

Saludos.
__________________
Amar al mundo apasionadamente.
Responder Con Cita
  #4  
Antiguo 01-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé si he entendido bien lo que quieres, pero la sentencia para llamar al procedure sería:

Código SQL [-]
select * from fecha_hora_servidor;

Aunque para extraer la fecha, hora y fechahora del servidor puedes usar:

Código SQL [-]
select CURRENT_DATE from RDB$DATABASE;
select CURRENT_TIME from RDB$DATABASE;
select CURRENT_TIMESTAMP from RDB$DATABASE;


Edito: No había visto lo que ha dicho afxe
Responder Con Cita
  #5  
Antiguo 01-09-2010
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Lo de la fecha fue solo un ejemplo, lo que quiero es poner un "procedimiento almacenado" que devuelva, por ejemplo, un valor numérico secuencial. En este momento se piensa en un Generador pero resulta que no están dentro de la transacción y yo necesito que si estén.
La única forma que hallé es "simular" un generador a través de un procedimiento almacenado, el cual si está dentro de una transacción y me asegura que no voy a tener agujeros dentro de la numeración.
Pero bueno, ahora la cosa está un poco mas complicada y sería bueno poder llamar a esos "generadores" de números como si fueran campos del Select.

No se si me expliqué mejor.

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #6  
Antiguo 01-09-2010
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Cita:
Empezado por RONPABLO Ver Mensaje
Tal vez así...

Código SQL [-]

select 
     campo1, 
     campo2, 
     (selectfechahora fromFECHA_HORA_SERVIDOR) as Fecha_hora_servidor
from Tabla where ......

(lo digo de memoria, creo que así esta bien, pero si no es algo similar...)
Bueno, gracias RONPABLO, con tu ayuda pude llegar a esto:
Código SQL [-]
Insert into familias (cod_familia, fecha_ingreso_familia, estado_familia)
Select (select nc.nro from nuevo_codigo(5) nc), (select fhs.fechahora from fecha_hora_servidor fhs),
  'ACTIVO'  From rdb$database
union all
Select (select nc.nro from nuevo_codigo(5) nc) , (select fhs.fechahora from fecha_hora_servidor fhs),
  'ACTIVO'  From rdb$database

En el caso de la Fecha si es superfluo el asunto del procedimiento almacenado, pero en el caso de "nuevo_codigo" no, puesto que este me devuelve un valor y además se encarga de aumentar en 1 la secuencia para que el siguiente select se encuentre con un valor correlativo.
Intenté poner en lugar de (select nc.nro from nuevo_codigo(5) nc) la expresión gen_id(ibe$log_tables_gen, 1), un generador común y me envió el siguiente error:
Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "PK_FAMILIAS" on table "FAMILIAS".

En principio la cosa está mejor, tal vez haya una mejor manera de hacer lo que necesito.

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error en funcion almacenada para insertar datos a tabla dark_monk9 PostgreSQL 3 16-01-2012 14:57:31
Ejecutar formula almacenada en tabla mosorio SQL 2 28-06-2007 21:14:38
funcion rtrim en firebird 1.5 berfer Firebird e Interbase 3 23-08-2006 18:04:23
función para obtener diferencias entre fechas - Firebird clanmilano SQL 1 11-11-2005 13:29:52
como saber el identificador del último registro almacenada en una base de datos. soyhugo Varios 2 16-02-2004 16:04:04


La franja horaria es GMT +2. Ahora son las 07:20:38.


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