Vamos por partes:
- Lo primero que tienes que entender es que no existe un estándar en el T-SQL, por lo que técnicamente no existe un lenguaje unificado para scripts (esos "jobs" a los que te refieres) entre los diferentes DBMS (Oracle, SQL Server, DB2, MySQL, etc.), sino que cada uno de ellos pone y saca cosas como se le antoja, como así también agrega funciones propias para el estandar SQL.
Por estas razones migrar scripts entre DBMS es una tarea
muy engorrosa y bastante cansadora.
- SQL Server y Oracle incluyeron dentro de su versión de T-SQL controles de flujo como WHILE,
pero MySQL sólo los implementó en stored procedures (por cierto, trabajar en bases de datos y no saber qué es un
stored procedure es algo medio extraño), por lo que no podrás crear scripts de SQL para MySQL que los contengan. Si puedes hacerlo en un SP, y en el script podrás invocar a los SP, por lo que hay alguna forma de burlar este impedimento.
Técnicamente hablando, el código de muestra que pones en tu post, sería un stored procedure si se invoca bajo un nombre determinado.
- El uso de parámetros, variables de usuario y variables locales de procedimientos no están implementadas de la misma forma en los diferentes DBMS. Para implementar este mismo proceso de ejemplo requiere una explicación más detallada de la forma de programar los SP.
- Una primera aproximación a tu caso de ejemplo sería:
Código MySQL:
Ver originalDELIMITER $$
WHILE countmin
<= countmax
DO FROM Tantra.TantraBackup00 T
INNER JOIN UserLogin.HelPJ H
ON T.UserID
= H.IDHELPJ
UPDATE UserLogin.HelPJ
SET CLANACTUAL
= guild
WHERE IDHELPJ
= countmin
; SET countmin
= countmin
+ 1;
DELIMITER;
Desde aqui se pueden observar algunas cosas:
- Las variables locales de un stored procedure no llevan "@". Solo las de usuario lo usan, pero ese es un tema especial.
- No se anidan los BEGIN/END en MySQL. Se peuden encadenar, pero no
anidar.
- Todo SP multilínea debe llevar BEGIN/END.
- Todas las sentencias se terminan con ";".
- Para hacer que el script del SP se carge de un solo golpe, se cambian los delimitadores de sentencia por otro, y luego se los restaura (no se hace si se cargan desde un lenguaje de programación).
- La sintaxis de WHILE es distinta.