MySQL - CONDICION SIMPLE.

   
Vista:

CONDICION SIMPLE.

Publicado por DALSOM (23 intervenciones) el 20/06/2010 23:52:27
HOLA A TODOS,

ME PREGUNTO COMO HAGO UNA SENTENCIA EQUIVALENTE EN MYSQL .

EN SQL DE MICROSOFT LA INSTRUCCION SERIA :

IF condicion1 THEN
BEGIN
... INSTRUCCIONES ...
END
ELSE
BEGIN
... INSTRUCCIONES ...
END

AHORA, QUIERO HACER LO MISMO, PERO EN MYSQL, Y RESULTA QUE EL IF ES UNA FUNCION QUE RETORNA UN VALOR UNICO.
COMO LO HAGO ENTONCES?

ESTOY UTILIZANDO LA VERSION 5.1.41 SEGUN LA SENTENCIA
select version() DE MYSQL Y DEFAULT ENGINE PARA MyISAM ES 3.23.

ESPERO PUEDAN AYUDARME, YA QUE DEFINITIVAMENTE ESTOY MIGRANDO A MYSQL.

SALUDOS,
DALSOM
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CONDICION SIMPLE.

Publicado por Gonzalo GC (2 intervenciones) el 21/06/2010 00:23:26
A través de un STORED PROCEDURE...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONDICION SIMPLE.

Publicado por DALSOM (23 intervenciones) el 21/06/2010 04:00:20
HOLA, GRACIAS POR CONTESTAR.

PUES MIRA, EN SQL DE MS, ES UNA SIMPLE INSTRUCCION, QUE DICE PARA DONDE VA EL CONTROL DEL PROGRAMA. PERO COMO SUSTITUYO ESTA FUNCION DEL IF EN MYSQL?
YA QUE DENTRO DEL STORE PROCEDURE, TENDRIA LA MISMA SITUACION CREO YO.

NO ENTIENDO BIEN LO QUE TRATAS DE DECIRME. COMO SERIA LA SINTAXIS DE ESTO QUE ME PROPONES DEL STORE PROCEDURE?

GRACIAS,
DALSOM.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONDICION SIMPLE.

Publicado por Gonzalo GC (2 intervenciones) el 21/06/2010 22:36:47
Lo que tu has visto en SQL Server, que te permite crear sentencias condicionales de esa forma, no pertenece al estandar ANSI-SQL, lamento decírtelo. SOn extensiones que cada DBMS le pone a SU VERSIÓN de SQL, pero que NO SON PORTABLES entre diferentes DBMS.
El problema es que MySQL no admite, al menos hasta la versión 5.4.x, ese tipo de sentencias condicionales si no es a través de scripts, o bien STORED PROCEDUREs, STORED FUNCTIONs o bien TRIGGERS.
Simplemente no los contempla, como sí lo hacen SQL Server y Oracle, y deben forzosamente hacerse de un podo más estandarizado.

Fuera de eso, la sintaxis de los SP tampoco existe como estandar, por lo que la que usas en T-SQL no sirve para PL/SQL y tampoco para los SP de MySQL.
Aún así la sintaxis es bastante simple:
CREATE PROCEDURE base.procedimiento()
BEGIN
IF condicion1 THEN
... (instrucciones)
ELSE
... (instrucciones)
END IF;
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONDICION SIMPLE.

Publicado por DALSOM (23 intervenciones) el 22/06/2010 01:09:33
OK, OK. PARECE QUE HE SIDO MAL EDUCADO POR MICROSOFT. NO ME EXTRANA, PERO ES BIEN COMODO TRABAJAR ASI, Y AHORRA MUCHO TIEMPO.

PERO ENTONCES, FIJATE, HE CAMBIADO LA SENTENCIA A COMO SIGUE :

use MyDBSQL;

create procedure exSet
in @id int,in @desc varchar(30)
begin
if not exists(select * from MYART where id = @id) then
insert into MYART(id,desc)
values(@id,@desc)
end if
end

AUN ASI ME SIGUE DANDO ERRORES. TAMBIEN CAMBIE LA @ POR UNA 'P' FIJANDOME QUE NO HAS PUESTO UNA ARROBA EN TU SINTAXIS. PERO TAMBIEN SIGUE DANDOME ERROR.

SEGUN VEO, TENDRE QUE BUSCAR UN MANUAL MUY, PERO MUY BASICO, PARA EMPEZAR A APRENDER SQL SEGUN VERSION DE MYSQL.

GRACIAS DE TODOS MODOS,
ESTOY MUY AGRADECIDO POR TU TIEMPO. PERO CREO QUE ME FALTA MUCHO TRABAJO POR APRENDER.

GRACIAS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:CONDICION SIMPLE.

Publicado por Gonzalo GC (339 intervenciones) el 22/06/2010 02:04:39
Bueno, como te dije en el post anterior, tampoco puedes usar exactamente la sintaxis del T-SQL en MySQL, ni en PL/SQL de Oracle. No son portables (es uno de los problemas que tienen los programas para migración de bases).
En cualquier caso, todo lo que necesitas saber de MySQL y su sintaxis está en el Manual de Referencia (http://dev.mysql.com/doc/refman/5.0/es/index.html). Específicamente lo de los SP aparece en el Capítulo 19. Procedimientos almacenados y funciones (http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html), a lo que tienes que sumarle, para evitar confusiones lo referente a variables de usuario (http://dev.mysql.com/doc/refman/5.0/es/variables.html) para evitar cometer errores, puesto que en tu ejemplo estás usando variables de usuario y no variables de procedimiento, lo que puede dar lugar a errores.

En tu caso, el script tendría esta forma:

use MyDBSQL;

DELIMITER $$
DROP PROCEDURE IF EXISTS exSet$$
CREATE PROCEDURE exSet(IN vid INT, IN vdesc VARCHAR(30))
BEGIN
IF NOT EXISTS (SELECT * FROM MYART WHERE id = vid) THEN
INSERT INTO MYART(id, desc)
VALUES(vid, vdesc);
END IF;
END$$

DELIMITER ;

Notas:
1) En los scripts de MySQL existe el cierre de sentencia, es el punto y coma (;).
2) Cuando se carga un script, sea por consola o por script, debe cambiarse momentaneamente el delimitador para permitir que la rutina se cargue como un todo. Para eso se usa DELIMITER.
3) No se deben usar los mismos nombres para las variables que para los objetos de base (tablas, bases, campos) , genera errores de interpretación.
4) Las variables se usan sin prefijo. No se usan "_" ni "@" precedentes al nombre de la variable. Las arrobas identifican variables globales de usuario que deben ser inicalizadas y su último valor permanece mientras dure la conexión. Reusarlas requiere reiniciarlas. El "_" se usa en directivas.
5) El prototipo de procedures y functions lleva los parámetros entre paréntesis.
6) Muchos otros...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

LO LOGRE!!! EUREKA!!!!

Publicado por DALSOM (23 intervenciones) el 23/06/2010 03:36:36
GRACIAS AMIGO,
POR FIN HE LOGRADO MI SENTENCIA IF. NO EXACTAMENTE COMO EN MS SQL, PERO FUNCIONA DESPUES DE UNOS CAMBIOS.

TE CUENTO QUE OCURRIAN VARIAS COSAS :
1- EL DELIMITADOR, COMO COMENTAS, HAY QUE CAMBIARLO, EN MI CASO LO HICE CON //
2- EL END IF NO TENIA UN ;
3- NO PODIA UTILIZAR DIRECTAMENTE EN UNA SENTENCIA INSERT, UNA FUNCION COMO VALOR A INSERTAR.

LO DEMAS, PUES NO SE SI SEA CAUSA, PERO TAMBIEN LO HICE :
1 - CAMBIE LAS PALABRAS RESERVADAS EN MAYUSCULAS.
2 - ELIMINE LAS ARROBAS (@) DE LOS NOMBRES DE LAS VARIAS.

ME DI CUENTA, QUE ESTE IF, SOLO FUNCIONA DENTRO DE UNA DECLARACION DE PROCEDIMIENTO.

DE VERDAD, TE AGRADEZCO MUCHO EL TIEMPO QUE HAS INVERTIDO RESPONDIENDOME, ME GUIARON A LA SOLUCION DEL PROBLEMA.

GRACIAS.
DALSOM,
REP. DOMINICANA.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar