Pregunta de principiante

19/08/2004 - 02:07 por Natacha Camacho | Informe spam
Hola a todos

Les pido me aclaren como debo simular rutinas en un
procedimiento almacenado... no se como se debe codificar
para lograr el siguiente efecto:



Create proc procedimiento1
as

sentencia
sentencia
bla bla
goto rutina1
bla bla
bla
goto rutina1

rutina1:
create table #t (valor int)
insert #t

Que debo hacer para llamar Rutina1 desde cualquier parte
del procedimiento, no quiero hacer un llamado a otro
procedimiento porque necesito que la rutina cree una tabla
temporal.


gracias a todos

Preguntas similare

Leer las respuestas

#1 MAXI
19/08/2004 - 02:13 | Informe spam
Hola, copiado de los BOL:

Utilizar GOTO
La instrucción GOTO provoca que, en la ejecución de un lote de Transact-SQL,
se salte a una etiqueta. Ninguna de las instrucciones situadas entre la
instrucción GOTO y la etiqueta se ejecutarán. El nombre de la etiqueta se
define con la sintaxis:

label_name:

No abuse de la utilización de la instrucción GOTO. Una utilización excesiva
de esta instrucción puede hacer que resulte difícil entender la lógica de un
lote de Transact-SQL. La lógica desarrollada con GOTO casi siempre se puede
implementar con las instrucciones de control de flujo. La mejor utilización
de GOTO se produce cuando se necesita romper la anidación profunda de
instrucciones de control de flujo.

La etiqueta que constituye el objetivo de un GOTO sólo identifica el destino
del salto. No hace nada para aislar las instrucciones que le siguen de las
instrucciones que le preceden. Cualquier usuario que ejecute las
instrucciones situadas justo antes de la etiqueta se la saltará y ejecutará
las instrucciones posteriores a la misma. Esto ocurrirá a menos que la
instrucción que precede a la etiqueta sea a su vez una instrucción de
control de flujo como, por ejemplo, RETURN.

Esto es un ejemplo de un GOTO:

IF (SELECT SYSTEM_USER()) = 'payroll'
GOTO calculate_salary
calculate_salary:






Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar
Msn Messager:

"Natacha Camacho" escribió en el
mensaje news:18a401c48580$871bf140$
Hola a todos

Les pido me aclaren como debo simular rutinas en un
procedimiento almacenado... no se como se debe codificar
para lograr el siguiente efecto:



Create proc procedimiento1
as

sentencia
sentencia
bla bla
goto rutina1
bla bla
bla
goto rutina1

rutina1:
create table #t (valor int)
insert #t

Que debo hacer para llamar Rutina1 desde cualquier parte
del procedimiento, no quiero hacer un llamado a otro
procedimiento porque necesito que la rutina cree una tabla
temporal.


gracias a todos




Respuesta Responder a este mensaje
#2 Isaías
19/08/2004 - 03:02 | Informe spam
Aparte de lo que ya menciono Maxi.

GOTO es una instruccion que se creo en los primeros
lenguajes de programación, por lo que su uso no es
RECOMENDADO en SQL.

Si desa CREAR una tabla TEMPORAL, codifique la
instruccion, tantas veces sea necesario, asi de simple.

Saludos
Respuesta Responder a este mensaje
#3 MAXI
19/08/2004 - 03:13 | Informe spam
Amigo Isaias!! quizas tambien le podamos mencionar a nuestro amigo que hay
tablas temporales Globales (##) que no mueren con el alcance y perduran para
toda la sesion.

Bye




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)
Mail: Maxi_accotto[arroba]speedy.com.ar
Msn Messager:

"Isaías" escribió en el mensaje
news:884501c48588$36cc1f50$
Aparte de lo que ya menciono Maxi.

GOTO es una instruccion que se creo en los primeros
lenguajes de programación, por lo que su uso no es
RECOMENDADO en SQL.

Si desa CREAR una tabla TEMPORAL, codifique la
instruccion, tantas veces sea necesario, asi de simple.

Saludos
Respuesta Responder a este mensaje
#4 Javier Loria
19/08/2004 - 03:34 | Informe spam
Hola Natacha:
Mi respuesta es ligeramente diferente: No lo hagas.
No uses el GOTO y no uses "Rutinas" en procedimientos Almacenados.
Sobre el GOTO, Edsger W. Dijkstra escribio, en un articulo llamado "Go
To Statement Considered Harmful" algo que dice: La sentencia go to como tal
es demasiado primitiva, es una invitacion a convertir nuestro programa en
un desastre. En mi caso tengo mas de 15 anos de no escribir un GOTO.
Sobre usar rutinas en procedimientos almacenados es tambien una
invitacion a construir un desastre de programa, SQL NO esta disenado para
esto, y no debe usarse para esto. SQL es basicamente un lenguaje para la
extraccion de datos. Tratar de programar en SQL produce con frecuencia
resultados desastrosos.
Si nos expones lo que quieres hacer, y no como quieres hacerlo, es muy
probable que se pueda lograr sin rutina y sin tabla temporal.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"Natacha Camacho" wrote in message
news:18a401c48580$871bf140$
Hola a todos

Les pido me aclaren como debo simular rutinas en un
procedimiento almacenado... no se como se debe codificar
para lograr el siguiente efecto:



Create proc procedimiento1
as

sentencia
sentencia
bla bla
goto rutina1
bla bla
bla
goto rutina1

rutina1:
create table #t (valor int)
insert #t

Que debo hacer para llamar Rutina1 desde cualquier parte
del procedimiento, no quiero hacer un llamado a otro
procedimiento porque necesito que la rutina cree una tabla
temporal.


gracias a todos




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida