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 05-06-2008
miguel_e miguel_e is offline
Miembro
 
Registrado: ene 2006
Posts: 86
Poder: 19
miguel_e Va por buen camino
stored procedure y sentencia count

hola a todos, disculpen lo tonto de esta pregunta, pero espero me puedan ayudar, apenas estoy empezando a utilizar Firebird y ya me encuentro un problema el cual no puedo resolver, se trata de lo siguiente:

en MSSQL Server yo para hacer un count de una tabla hacia todo de esta manera, por ejemplo:

Código SQL [-]
  Select @cantidad = count(*) From Tabla1
  return @cantidad

ahora estoy creando mi primer stored procedure en firebird, y pongo lo mismo y me da un error en la linea del select, pongo a continuacion el codigo del sp para que me digan si es que pongo algo mal

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE sp_obtenerCantidad
RETURNS
(
    cantidad Integer )
AS
BEGIN 
  select cantidad = count(*) from Tabla1
END^
SET TERM ; ^
GRANT EXECUTE
 ON PROCEDURE sp_obtenerCantidad TO SYSDBA;

mis preguntas son las siguientes: basicamente cambia la sintaxis del SQL entre MSSQL y Firebird o esas cosas basicas funcionan en ambas DB?????
Es problema del select o es algo que esta mal declarado dentro del sp??????
puedo usar el return del mismo modo que hacia en la primera sentencia????

bueno, eso era todo

saludos
miguel_e
Responder Con Cita
  #2  
Antiguo 05-06-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
No pones que error te da, por lo que no sé si te funcione, pero pon ":" (dos puntos) así:

Código SQL [-]
select :cantidad = count(*) from Tabla1

Para indicar que estás usando la variable de retorno.
__________________
Herr Heins Faust
Responder Con Cita
  #3  
Antiguo 05-06-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
los sp en Firebird y MSSQL Server son muy diferentes.... por ejemplo en Firebird debe definir cuales son las columnas que van a resultar en un sp cuando es de querys, debe usar el comando suspend y las variables se igualan de otra forma

Código SQL [-]
Select count(*) from tabla into :Cantidad

Las variables en Firebird se reconocen con los ":".... hay muchas cosas que se hacer ne Firebird que de forma muy diferente a SQL Server y lo mismo al revés... como tal los SP se salen de la norma Standar casi que en todos los tipos de motores
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #4  
Antiguo 05-06-2008
miguel_e miguel_e is offline
Miembro
 
Registrado: ene 2006
Posts: 86
Poder: 19
miguel_e Va por buen camino
miren aca esta el codigo Sql con una modificacion hecha a partir de sus comentarios:

Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE sp_obtenerCantidad
RETURNS
(
    cantidad Integer )
AS
BEGIN 
  select count(*) from CPEDIDO into :cantidad
END^
SET TERM ; ^
GRANT EXECUTE
 ON PROCEDURE sp_obtenerCantidad TO SYSDBA;

y este es el error que devuelve, y que no logro saber por que me sale

Código SQL [-]
*** IBPP::SQLException ***
Context: Statement::Prepare( 
CREATE PROCEDURE sp_obtenerCantidad
RETURNS
(
    cantidad Integer )
AS
BEGIN 
  select count(*) from CPEDIDO into :cantidad
END )
Message: isc_dsql_prepare failed
SQL Message : -104
Invalid token
Engine Code    : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 10, column 1
END

alguien sabe por que pasa???

saludos
miguel_e
Responder Con Cita
  #5  
Antiguo 05-06-2008
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Mira, así me corrió bien a mi en Firebird, mirando por encima lo único que creo que le falta es un ";" al final de el select Count....

Código SQL [-]
SET TERM  ^^ ;
CREATE PROCEDURE SP_OBTENERCANTIDAD returns (
  CANTIDAD Integer)
AS
begin
   select count(*) from CPEDIDO into :cantidad;
end
 ^^
SET TERM ;  ^^
GRANT EXECUTE
 ON PROCEDURE sp_obtenerCantidad TO SYSDBA;
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #6  
Antiguo 05-06-2008
miguel_e miguel_e is offline
Miembro
 
Registrado: ene 2006
Posts: 86
Poder: 19
miguel_e Va por buen camino
ok, gracias ya me funciono bien, una ultima pregunta, donde podria ver ejemplos de las acciones mas comunes como select que devuelvan varios valores de retorno, devolver un dataset, insertar, modificar, eliminar y eso, porque la verdad estoy un poco perdido

saludos
miguel_e
Responder Con Cita
  #7  
Antiguo 05-06-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Wink

Saludos.

En la ayuda de Interbase 6 muestran suficientes ejemplos de lo que andas buscando, entra a http://www.ibphoenix.com en la sección de descargas.

Hasta luego.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #8  
Antiguo 05-06-2008
miguel_e miguel_e is offline
Miembro
 
Registrado: ene 2006
Posts: 86
Poder: 19
miguel_e Va por buen camino
he leido por arriba y entiendo cuando deseo solamente devolver parametros de salida, pero en caso que quiera devolver un dataset, o sea una tabla completa como lo hago por que no permite hacer un select * from tabla por ejemplo

saludos
miguel_e
Responder Con Cita
  #9  
Antiguo 05-06-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Cool

Saludos.

Tienes la solución en las manos y te rehúsas a utilizarla; como dirían por mi barrio "eso no prende" (
Cita:
he leido por arriba
).

Lo ideal sería que te documentaras mejor y así nosotros te podríamos ayudar en problemas más complejos.

Tu sentencia sería:
Código SQL [-]FOR SELECT CAMPO1, CAMPO2
FROM TABLA1 :PARAMETRO1, :PARAMETRO2 INTO DO BEGIN //SENTENCIAS QUE NECESITES PARA REALIZAR ALGUN PROCESO SUSPEND;
END


Hasta luego.
__________________
Gracias,
Rolphy Reyes

Última edición por RolphyReyes fecha: 09-06-2008 a las 20:56:05.
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
For dentro de un Stored Procedure en IB alapaco Firebird e Interbase 2 24-07-2006 18:10:19
Cambio de Stored Procedure Juanito-Kun MS SQL Server 6 30-05-2005 16:24:45
sentencia count()..... hook SQL 8 04-05-2004 14:53:04
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 08:19:52.


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