Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   procedimientos almacenados (https://www.clubdelphi.com/foros/showthread.php?t=41104)

UREÑA 07-03-2007 18:58:49

procedimientos almacenados
 
hola buen dia!!

hice un procedimiento almacenado pero no se como lo puedo mandar llamar desde delphi o mas bien como funciona

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE SP_ACTUALIZA_ALUMNO (
    N_LISTA VARCHAR(5),
    NOMBRE_ALU VARCHAR(50),
    FECHA_NAC VARCHAR(10),
    SEXO VARCHAR(1),
    CURP VARCHAR(18),
    PAIS_NAC VARCHAR(30),
    ENTIDAD_NA VARCHAR(2),
    MUNICIPIO VARCHAR(3),
    INCONGRUEN VARCHAR(3),
    BECA VARCHAR(8),
    DOMICILIO VARCHAR(60),
    NOMBRE_PAD VARCHAR(30),
    TELEFONO VARCHAR(11),
    OBSERVACIO VARCHAR(200),
    LENGUA_EXT VARCHAR(3),
    TECNOLOGIA VARCHAR(3),
    RFC VARCHAR(14),
    TURNO INTEGER,
    GRADO INTEGER,
    GRUPO VARCHAR(1))
AS
begin
  /* Procedure Text */
  update Tbl_alumno set N_Lista = :n_lista, NOMBRE_ALU = :nombre_alu, FECHA_NAC = :fecha_nac, SEXO = :sexo, CURP = :curp, PAIS_NAC = :pais_nac, ENTIDAD_NA = :entidad_na, MUNICIPIO = :municipio, INCONGRUEN = :incongruen, BECA = :beca, DOMICILIO = :domicilio, NOMBRE_PAD = :nombre_pad, TELEFONO = :telefono, OBSERVACIO = :observacio, LENGUA_EXT = :lengua_ext, TECNOLOGIA = :tecnologia
  where RFC = :rfc and TURNO = :turno and GRADO = :grado and GRUPO = :grupo ;
  suspend;
end^

SET TERM ; ^

GRANT SELECT,UPDATE ON TBL_ALUMNO TO PROCEDURE SP_ACTUALIZA_ALUMNO;

GRANT EXECUTE ON PROCEDURE SP_ACTUALIZA_ALUMNO TO SYSDBA;
les agradeceria infinitamente gracias

//Lo edite para colocar las etiquetas [sql]

jhonny 07-03-2007 19:06:23

Desde Delphi puedes ejecutar ese procedimiento usando un componente de consulta como un (TQuery, TADOQuery, etc...) o también un componente de StoredProcedure como un (TStoredProc, TADOStoredProc, etc...)

Lepe 07-03-2007 22:10:15

Ese tipo procedimientos almacenados es de acción, es decir, realiza una serie de acciones en tu base de datos pero no devuelve un conjunto de datos, por tanto el suspend sobra (debes quitarlo).

Por ser de acción, debería usarse con un TStoredProc. Nunca he probado si con un TQuery puede hacerse. Creo que sí, pero teniendo en su sql algo así:
Código SQL [-]
exec proc SP_ACTUALIZA_ALUMNO(....);

Por dar más info, cuando tiene parámetros de salida (returning values) o internamente se realiza un :
Código SQL [-]
for select * from ... 
   into :variableDeSalida1 :VariableDeSalida2 do
      suspend;
Entonces sí se usa el suspend (para que devuelva cada registro) y además se hace a través de un Tquery, es decir, se usa como una tabla más.

Saludos

jhonny 07-03-2007 22:19:24

Cita:

Empezado por Lepe
Nunca he probado si con un TQuery puede hacerse

Todo lo que haz dicho es cierto, y solo escribo para ratificar que lo de el TQuery también es cierto la manera de emplearlo así:

Código SQL [-]
exec proc SP_ACTUALIZA_ALUMNO(....);
Y además que al TQuery en ese caso abría que ejecutarlo no con el típico .Open si no con el .ExecSQL


La franja horaria es GMT +2. Ahora son las 14:47: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