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 30-12-2008
Avatar de raorre
raorre raorre is offline
Miembro
 
Registrado: dic 2005
Ubicación: valencia
Posts: 51
Poder: 19
raorre Va por buen camino
Procedimiento Almacenado con parametros

Buenas..trabajo en firebird 2.1 tengo un procedimiento almacenado donde los parametros de entrada deberian de pasarse como el campo a buscar y la tabla donde buscar, lo que hace este procedimiento en obtener al maximo de la tabla clientes, pero quiero hacerlo general para cualquier tabla.
Como esta abajo funciona, pero si le paso estos parametros me dice que no

FOR SELECT MAX(:CAMPOID) AS REGISTROS FROM :TABLA
Como puedo pasarle los parametros a la tabla y que no me pete, debe ser
un problema de comillas pero no consigo resolverlo.

CREATE PROCEDURE OBTENER_MAXIMO(
TABLA VARCHAR(50) CHARACTER SET NONE COLLATE NONE,
CAMPOID VARCHAR(50) CHARACTER SET NONE COLLATE NONE)
RETURNS(NUMREG INTEGER)
AS
DECLARE VARIABLE CONTADOR INTEGER;
BEGIN
FOR SELECT MAX(ID_CLIENTE) AS REGISTROS FROM TCLIENTES
WHERE 1=1
INTO :CONTADOR DO
BEGIN
IF (:CONTADOR=0) THEN NUMREG=1;
ELSE NUMREG=CONTADOR+1;
SUSPEND;
END
END
Responder Con Cita
  #2  
Antiguo 30-12-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que esto se puede solucionar con una tabla temporal (temp_id) y la sentencia execute statement.

Lo que hago es insertar el max(campoID) en la tabla temporal y luego hacer un select de ese campo.
Finalmente, lo borro.

Código SQL [-]
CREATE PROCEDURE OBTENER_MAXIMO(
TABLA VARCHAR(50) CHARACTER SET NONE COLLATE NONE,
CAMPOID VARCHAR(50) CHARACTER SET NONE COLLATE NONE)
RETURNS(NUMREG INTEGER)
AS
DECLARE VARIABLE CONTADOR INTEGER;
declare variable sql varchar(1024);
BEGIN
   /* Genero el insert */
   sql = 'insert into temp_id (id) (select max('||:CAMPOID||') from '||:TABLA||')';

   /* Borro antes de insertar. */
   /* Si no lo hago podria haber dos valores y dar un error luego (singelton select) */
   delete from temp_id;

   /* Ejecuto el insert */
   execute statement sql;
   
   /* Inicializo contador. Si no se inserta nada, quiero que sea 0 */
   /* De lo contrario, el select siguiente podria tener basura */
   contador=0;

   /* Recupero lo que se ha insertado. El max id de la tabla */
   select id from temp_id 
   into :contador;

   /* Borro el contenido */
   delete from temp_id;

   /* Calculo lo que voy a devolver */
   IF (:CONTADOR=0) THEN NUMREG=1;
      ELSE NUMREG=CONTADOR+1;

   /* Devuelvo valor */
   SUSPEND;
END
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
Procedimiento Almacenado y parametros zcatzz SQL 4 16-05-2007 02:35:33
Cómo trabajar con los parámetros de un procedimiento almacenado? efelix Conexión con bases de datos 7 16-02-2007 22:12:11
Parámetros de un procedimiento almacenado efelix Conexión con bases de datos 0 06-02-2007 16:43:30
Parámetros del procedimiento almacenado efelix MS SQL Server 6 03-11-2006 20:37:34
Parametros a procedimiento almacenado JulioGO PHP 1 03-09-2004 19:04:50


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


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