Ciclos en T-SQL?

25/09/2004 - 04:33 por Leonardo Azpurua | Informe spam
Hola.

Ayer estaba instalando donde un cliente un antiguo sistema escrito en "C"
para MSDOS/Netware mientras una colega hacia unos ajustes en sus sistema de
negocios, escrito con las herramientas de desarrollo de Oracle. Como nunca
había tenido ningun contacto con Oracle, le pedí que me dejara mirar algunos
SPs, y vi una cosa que casi me mata de la envidia:

FOR P IN (SELECT C1, C2, C3 FROM T1)
FOR G IN (SELECT D1, D2, D3 FROM T2 WHERE D1 = P.C1)
...
END LOOP
END LOOP
(no estoy seguro de que los END LOOP de verdad se escriban asi, pero esa es
la idea).

A pesar de haber tenido algunas dificultades sigo aceptando el dogma de que
todo lo que puede ser expresado mediante estructuras de control de flujo
puede expresarse usando instrucciones de manipulacion de datos. Pero qué
cantidad de trabajo podría uno ahorrarse si pudiera disponer de una
construccion equivalente en T-SQL.

En cuanto llegué a casa revise los BOL, y no encontre nada parecido.

¿De verdad no hay nada parecido en T-SQL? ¿Tal vez alguna manera de
simularlo?

Salud!

Leonardo
 

Leer las respuestas

#1 Gustavo Larriera [MVP]
25/09/2004 - 04:37 | Informe spam
La construcción FOR LOOP de Oracle PL/SQL es la forma implícita de manejar
cursores. En T-SQL eso se hace con cursores explícitos. Compara estos dos
ejemplos:

ORACLE PL/SQL:

begin
FOR r IN (
SELECT ename
from emp
where ename < 'C'
order by 1) LOOP
dbms_output.put_line(r.ename);
END LOOP;
end;

SQL SERVER T-SQL:

declare @lname varchar(30)
DECLARE c1 cursor FOR
select lname
from employee
where lname < 'C'
order by 1
OPEN c1
FETCH c1 into @lname
WHILE @@FETCH_STATUS = 0
begin
print @lname
FETCH c1 into @lname
end
CLOSE c1
DEALLOCATE c1

saludos
gux

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"Leonardo Azpurua" <l e o n a r d o (arroba) m v p s (punto) o r g> wrote in
message news:%
Hola.

Ayer estaba instalando donde un cliente un antiguo sistema escrito en "C"
para MSDOS/Netware mientras una colega hacia unos ajustes en sus sistema
de
negocios, escrito con las herramientas de desarrollo de Oracle. Como nunca
había tenido ningun contacto con Oracle, le pedí que me dejara mirar
algunos
SPs, y vi una cosa que casi me mata de la envidia:

FOR P IN (SELECT C1, C2, C3 FROM T1)
FOR G IN (SELECT D1, D2, D3 FROM T2 WHERE D1 = P.C1)
...
END LOOP
END LOOP
(no estoy seguro de que los END LOOP de verdad se escriban asi, pero esa
es
la idea).

A pesar de haber tenido algunas dificultades sigo aceptando el dogma de
que
todo lo que puede ser expresado mediante estructuras de control de flujo
puede expresarse usando instrucciones de manipulacion de datos. Pero qué
cantidad de trabajo podría uno ahorrarse si pudiera disponer de una
construccion equivalente en T-SQL.

En cuanto llegué a casa revise los BOL, y no encontre nada parecido.

¿De verdad no hay nada parecido en T-SQL? ¿Tal vez alguna manera de
simularlo?

Salud!

Leonardo


Preguntas similares