Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Creacion De Procedimiento Almacenado Con If Y Select (https://www.clubdelphi.com/foros/showthread.php?t=84217)

jfernandezt 22-09-2013 18:36:23

Creacion De Procedimiento Almacenado Con If Y Select
 
Hola a todos, soy nuevo en Firebird y tengo problemas para crear un procedimiento almacenado, el cual me retorna un select de acuerdo a un parámetro de entrada, por favor necesito me ayuden a ver donde esta mi error de sintaxis, ya que no puedo ejecutarlo:

Código SQL [-]
create or alter procedure usp_cargar_cbo_1p
(
pc_tipo_tabla varchar(20)
)
returns
(
pn_codigo numeric(10,0),
pc_nombre varchar(200)
)
as
begin

if (:pc_tipo_tabla = 'categoria') then
begin

for select
cod_categoria,
nom_categoria
from categoria
into :pn_codigo,
:pc_nombre
do;

end

if (:pc_tipo_tabla = 'cliente') then
begin

for select
cod_cliente,
nom_cliente
from cliente
into :pn_codigo,
:pc_nombre
do;

end

suspend;

end;


Muchas gracias por su ayuda,

José Fernandez

Casimiro Notevi 23-09-2013 10:07:53

Solo tienes que mirar cualquier otro procedimiento almacenado para ver el error, por ejemplo, este mismo.

Has puesto el suspend fuera del bucle, por lo que no hace nada, mételo dentro. Antes del end.

Por cierto, recuerda poner los tags al código fuente, ejemplo:



Gracias :)

birmain 23-09-2013 18:55:42

Código SQL [-]
create or alter procedure usp_cargar_cbo_1p
(
pc_tipo_tabla varchar(20)
)
returns
(
pn_codigo numeric(10,0),
pc_nombre varchar(200)
)
as
begin

if (c_tipo_tabla = 'categoria') then
begin

for select cod_categoria, nom_categoria
    from categoria
    into n_codigo, c_nombre
do suspend;

end

if (c_tipo_tabla = 'cliente') then
begin

for select cod_cliente, nom_cliente
    from cliente 
    into n_codigo, c_nombre
do suspend;

end


end;

Cada bucle for ..select, después del do puede contener un begin .. end con las lineas necesaria para procesar n_codigo, c_nombre. Si estas pariables son de salida y deben formar parte del cursor de salida al final del paréntesis begin .. end antes del end debe haber un suspend. Si no hay ningún procesamiento adicional y la única instrucción necesaria es el suspend no hace falta begin .. end (lo mismo que en pascal)

Podría quedarte así:

Código SQL [-]
create or alter procedure usp_cargar_cbo_1p
(
pc_tipo_tabla varchar(20)
)
returns
(
pn_codigo numeric(10,0),
pc_nombre varchar(200)
)
as
begin

if (c_tipo_tabla = 'categoria') then
begin

for select cod_categoria, nom_categoria
    from categoria
    into n_codigo, c_nombre
do begin
   n_codigo = n_codigo + 1; // en el supuesto de que esta instrucción fuera necesaria
   suspend;
   end

end

if (c_tipo_tabla = 'cliente') then
begin

for select cod_cliente, nom_cliente
    from cliente 
    into n_codigo, c_nombre
do suspend;

end


end;


La franja horaria es GMT +2. Ahora son las 00:10:31.

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