
convertir procedures almacenados en DB Oracle a Funciones PHP
Publicado por Juan (2 intervenciones) el 18/05/2018 15:40:41
Hola a todos.
Estoy realizando una conversión de un antiguo programa escrito en php/pl-sql-oracle a php/mysql y realmente el manejo que se tiene en pl-sql-Oracle es implosible de emularlo en mysql por lo que estoy intentando pasar los procedimientos a funciones, pero hay algunas instrucciones que no entiendo ni se bien que respuestas dan o como se comportan, os imprimo los procedures y señalo todo lo que no entiendo y a ver si podeis ayudarme, ya que estoy muy perdido.:
Como podeis ver el procedure GET_PLANNING_SALON2, llama a select_datelist2 desde el From del Select (imposible en mysql) y el resultado de cada iteración se almacena en "a" y "a" sus campos sirven para filtrar en el where y almacenar en el into. El for que hay después de begin (segunda línea) no se como interpretarlo y el do antes del segundo begin tampoco (se parece al comando for de DOS).
Como veis los tres procedures estan enlazados, podeis darme una mano para crear una funcion php que haga lo que se suponga que hagan estas funciones.???
Subo unas imagenes con la captura de los procedures originales desde la DB.
Agradezco cualquier ayuda.
GET_PLANNING_SALON2(desde, hasta)
begin
for <-------------------------------------------?????????????????
select
a.year2*10000+a.month2*100+a.day2,
b.id_salon, a.fecha, b.id, b.estado from select_datelist2(:desde,:hasta) a,
reservas_salones b
where
a.fecha between b.entrada and b.salida
order by a.fecha, b.id_salon
into :id_fecha, :id_salon, :fecha, :id_reserva, :estado
do <---------------------------------------------???????????????????????
begin
id=cast(id_fecha as numeric(15,0)) * 1000 +id_salon;
suspend; <------------------------- creo que carga las variables y la evalua, podeis aclararmelo????
end
end
SELECT_DATELIST2(COMIENZO, FINAL)
BEGIN
IF (FINAL<COMIENZO) THEN FINAL=COMIENZO;
FECHA=COMIENZO;
DIA=0;
WHILE (FECHA<=FINAL) DO
BEGIN
DIA=DIA+1;
SELECT * FROM DATE_PARTS(:FECHA) INTO :YEAR2, :MONTH2, :DAY2;
SUSPEND;
FECHA=FECHA+1;
END
END
DATE_PARTS( FECHA )
BEGIN
YEAR=2000;
/* YEAR=CAST((FECHA-CAST('01.01.1970' AS DATE))/365-0.5 AS INTEGER); */
WHILE (CAST('31.12.' || YEAR AS DATE)<FECHA) DO YEAR=YEAR+1;
WHILE (CAST('01.01.' || YEAR AS DATE)>FECHA) DO YEAR=YEAR-1;
DAY=FECHA-CAST('01.01.' || YEAR AS DATE)+1;
IF (DAY<182) THEN
IF (DAY<=31) THEN MONTH=1;
ELSE IF (FECHA LIKE "%-FEB-%") THEN MONTH=2;
ELSE IF (FECHA LIKE "%-MAR-%") THEN MONTH=3;
ELSE IF (FECHA LIKE "%-APR-%") THEN MONTH=4;
ELSE IF (FECHA LIKE "%-MAY-%") THEN MONTH=5;
ELSE MONTH=6;
ELSE
IF (FECHA LIKE "%-JUN-%") THEN MONTH=6;
ELSE IF (FECHA LIKE "%-JUL-%") THEN MONTH=7;
ELSE IF (FECHA LIKE "%-AUG-%") THEN MONTH=8;
ELSE IF (FECHA LIKE "%-SEP-%") THEN MONTH=9;
ELSE IF (FECHA LIKE "%-OCT-%") THEN MONTH=10;
ELSE IF (FECHA LIKE "%-NOV-%") THEN MONTH=11;
ELSE MONTH=12;
DAY=FECHA-CAST('01.' || MONTH || '.' || YEAR AS DATE)+1 ;
SUSPEND;
END




Estoy realizando una conversión de un antiguo programa escrito en php/pl-sql-oracle a php/mysql y realmente el manejo que se tiene en pl-sql-Oracle es implosible de emularlo en mysql por lo que estoy intentando pasar los procedimientos a funciones, pero hay algunas instrucciones que no entiendo ni se bien que respuestas dan o como se comportan, os imprimo los procedures y señalo todo lo que no entiendo y a ver si podeis ayudarme, ya que estoy muy perdido.:
Como podeis ver el procedure GET_PLANNING_SALON2, llama a select_datelist2 desde el From del Select (imposible en mysql) y el resultado de cada iteración se almacena en "a" y "a" sus campos sirven para filtrar en el where y almacenar en el into. El for que hay después de begin (segunda línea) no se como interpretarlo y el do antes del segundo begin tampoco (se parece al comando for de DOS).
Como veis los tres procedures estan enlazados, podeis darme una mano para crear una funcion php que haga lo que se suponga que hagan estas funciones.???
Subo unas imagenes con la captura de los procedures originales desde la DB.
Agradezco cualquier ayuda.
GET_PLANNING_SALON2(desde, hasta)
begin
for <-------------------------------------------?????????????????
select
a.year2*10000+a.month2*100+a.day2,
b.id_salon, a.fecha, b.id, b.estado from select_datelist2(:desde,:hasta) a,
reservas_salones b
where
a.fecha between b.entrada and b.salida
order by a.fecha, b.id_salon
into :id_fecha, :id_salon, :fecha, :id_reserva, :estado
do <---------------------------------------------???????????????????????
begin
id=cast(id_fecha as numeric(15,0)) * 1000 +id_salon;
suspend; <------------------------- creo que carga las variables y la evalua, podeis aclararmelo????
end
end
SELECT_DATELIST2(COMIENZO, FINAL)
BEGIN
IF (FINAL<COMIENZO) THEN FINAL=COMIENZO;
FECHA=COMIENZO;
DIA=0;
WHILE (FECHA<=FINAL) DO
BEGIN
DIA=DIA+1;
SELECT * FROM DATE_PARTS(:FECHA) INTO :YEAR2, :MONTH2, :DAY2;
SUSPEND;
FECHA=FECHA+1;
END
END
DATE_PARTS( FECHA )
BEGIN
YEAR=2000;
/* YEAR=CAST((FECHA-CAST('01.01.1970' AS DATE))/365-0.5 AS INTEGER); */
WHILE (CAST('31.12.' || YEAR AS DATE)<FECHA) DO YEAR=YEAR+1;
WHILE (CAST('01.01.' || YEAR AS DATE)>FECHA) DO YEAR=YEAR-1;
DAY=FECHA-CAST('01.01.' || YEAR AS DATE)+1;
IF (DAY<182) THEN
IF (DAY<=31) THEN MONTH=1;
ELSE IF (FECHA LIKE "%-FEB-%") THEN MONTH=2;
ELSE IF (FECHA LIKE "%-MAR-%") THEN MONTH=3;
ELSE IF (FECHA LIKE "%-APR-%") THEN MONTH=4;
ELSE IF (FECHA LIKE "%-MAY-%") THEN MONTH=5;
ELSE MONTH=6;
ELSE
IF (FECHA LIKE "%-JUN-%") THEN MONTH=6;
ELSE IF (FECHA LIKE "%-JUL-%") THEN MONTH=7;
ELSE IF (FECHA LIKE "%-AUG-%") THEN MONTH=8;
ELSE IF (FECHA LIKE "%-SEP-%") THEN MONTH=9;
ELSE IF (FECHA LIKE "%-OCT-%") THEN MONTH=10;
ELSE IF (FECHA LIKE "%-NOV-%") THEN MONTH=11;
ELSE MONTH=12;
DAY=FECHA-CAST('01.' || MONTH || '.' || YEAR AS DATE)+1 ;
SUSPEND;
END
Valora esta pregunta


0