Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Asignar valor a variable dentro de if

Estas en el tema de Asignar valor a variable dentro de if en el foro de Mysql en Foros del Web. Hola a todos. Tengo la necesida de asignar un valor a una variable dentro de un query (NO SP). Pero cuando lo intento hacer me ...
  #1 (permalink)  
Antiguo 06/12/2012, 13:46
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Asignar valor a variable dentro de if

Hola a todos.
Tengo la necesida de asignar un valor a una variable dentro de un query (NO SP).
Pero cuando lo intento hacer me marca error de sintaxis, soy nuevo en Mysql, espero que ustedes maestros del web puedan ayudarme, este es el query:

Código MySQL:
Ver original
  1. set @ExistsUser = (select 1 from `ps_customer` where Exists(select * from `ps_customer` where id_customer = 3)  LIMIT 1);
  2.  
  3.  
  4. IF @ExistsUser = 1 THEN SET @s = 1;
  5.     ELSEIF @ExistsUser = NULL THEN SET @s = 0;
  6.     END IF;

Última edición por gnzsoloyo; 06/12/2012 a las 13:59 Razón: Código SQL no etiquetado.
  #2 (permalink)  
Antiguo 06/12/2012, 14:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

Por un lado, no puedes usar operadores lógicos con un valor NULL. NULL no es un dato, es un estado.
Por otro, lo que quieres hacer no es exactamente una consulta, en todo caso se hace en un script, o bien directamente en un stored procedure.
Si fuese parte de un script o de un SP, debería ser mas o menos:
Código MySQL:
Ver original
  1. IF (SELECT * FROM `ps_customer` WHERE id_customer = 3)  IS NOT NULL THEN
  2.     SET @ExistsUser = 1;
  3.  
  4.  
  5. IF @ExistsUser = 1 THEN
  6.     SET @s = 1;
  7. ELSEIF @ExistsUser IS NULL THEN
  8.      SET @s = 0;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/12/2012, 14:10
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Ok, entonces lo que me quieres decir es que no puedes asignar un valor mediante una condicion, es decir nose puede hacer esto:
Si juanito tiene 13 años denle permiso para salir y si es menor de 13 años no le den permiso para salir osea:
if @juanito_edad = 13 then @permiso = 1;
elseif @juanito_edad < 13 hen @permiso = 0;

Esto no se puede hacer con un simple query en Mysql?
en un SP si se puede hacer, como lo estoy proponiendo aca arriba?
  #4 (permalink)  
Antiguo 06/12/2012, 14:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

No dije que no se pueda, sino que no pendes crear una consulta que sólo contenga un IF estructurado, porque esos sólo funcionan en scripts o en stored procedures.
Son cosas distintas.
Una variable de sesión (las que inician con un "@") se puede usar y asignar en un SELECT sin problema, aunque de otra forma, pero no puedes ejecutar un IF..THEN...ELSE...END IF, como si fuese una consulta, porque no lo es.
¿Por qué no implementas eso en un SP?

Un ejemplo de uso de variables de usuario en una consulta: Cómo numerar secuencialmente una consulta, sin usar PK
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 06/12/2012 a las 14:22
  #5 (permalink)  
Antiguo 06/12/2012, 16:04
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Pues es lo que voy a tratar, porque preguntas del SP? la sintaxis que estoy enpleando es la correcta para un SP?
Voy a seguir tu consejo empleare un SP, solo que he tenido problemas al crearlos en Mysql, me podrias pasar la creacion de uno que funcione, algo asi:
create procedure sp_nombre
@param1 as varchar(50),
@param2 as int
as begin

end

ASI SERIA EN SQL SERVER en mysql como seria?
  #6 (permalink)  
Antiguo 06/12/2012, 16:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

Código MySQL:
Ver original
  1. create procedure sp_nombre(IN param1 varchar(50), IN param2 int)
  2.  
En cuanto a uno que funcione, te recuerdo algunas cosas:
1) El PL/SQL no está estandarizado, por lo que las sintaxis no son portables entre diferentes DBMS.
2) El uso de funciones propias de un DBMS tampoco está estandarizado, por lo que muchas de SQL Server no funcionarán ni en MySQL, ni en Oracle, ni tampoco en Postgre.
3) El uso de variables en los scripts y consultas, tampoco tiene un estándar, por lo que debes ver cómo se usan en cada DBMS.
4) Los que nos dedicamos a las bases de datos, cuando tenemos dudas de cómo se hace tenemos una solución muy efectiva que te recomiendo: lee el manual de referencia, está on-line y es gratuito (http://dev.mysql.com/doc/refman/5.0/es/index.html).

Capitulo dedicado a los SP: http://dev.mysql.com/doc/refman/5.0/...rocedures.html
Capitulo dedicado a variables: http://dev.mysql.com/doc/refman/5.0/es/variables.html
Capítulo dedicado a funciones: http://dev.mysql.com/doc/refman/5.0/es/functions.html

Cualquier duda concreta, pregunta nomás.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/12/2012, 16:24
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Muchas gracias gnzsoloyo, creo que estos manuales me serviran mucho les dare una estudiada, para resolver el problema que tengo, pero antes podrias contestar la pregunta que te hice porfas
"la sintaxis que estoy enpleando es la correcta para un SP?"
  #8 (permalink)  
Antiguo 06/12/2012, 16:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

¿No miraste el código corregido que te estoy poniendo en el mismo post?

Miralo bien.
Analízalo.
Compáralo.

Notarás que son diferentes...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 06/12/2012, 17:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Jajaja, una disculpa camarda no habia puesto atencion al codigo, gracias probare y vere si funciona
  #10 (permalink)  
Antiguo 06/12/2012, 17:52
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

gnzsoloyo probe tu query y no funciona

IF (SELECT * FROM `ps_customer` WHERE id_customer = 3) IS NOT NULL THEN
SET @ExistsUser = 1;
END IF;


IF @ExistsUser = 1 THEN
SET @s = 1;
ELSEIF @ExistsUser IS NULL THEN
SET @s = 0;
END IF;

este es el error que marca, bastante generico:

Error
consulta SQL:

IF( SELECT *
FROM `ps_customer`
WHERE id_customer =3 ) IS NOT NULL
THEN
SET @ExistsUser =1;


MySQL ha dicho:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF (SELECT * FROM `ps_customer` WHERE id_customer = 3) IS NOT NULL THEN
SE' at line 1
  #11 (permalink)  
Antiguo 06/12/2012, 20:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

¿Entendiste que no puedes usar un IF estructurado como consulta sin usarlo en un stored procedure?
Me parece que no estás terminando de entender que para meterte en MySQL, como también para meterte por ejemplo, con Oracle, tienes que olvidarte de todas las formas que conocías en SQL Server. No sirven. Las estructuras lógicas cambian.

Por otro lado, a menos que me describas exactamente qué estás usando para ejecutar ese script, y cómo lo estás redactando, no puedo ayudarte.
¿Podrías intentar por lo menos, crear eso en un SP?

¿Al menos intentarlo, y copiar aquí exactamente todo el body del SP?

Por cierto: Usa las etiquetas de Highlight para hacer que el código SQL se pueda ver mejor. Para eso están allí.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 07/12/2012, 09:23
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Mira esto es lo que estoy intentando hacer:
crear un sp que me inserte usuarios en la tabla de ps_customer y sus datos como direcciones telefonos en otras tres tablas, pero antes de eso tengo que validar que el usuario que voy a insertar no exista ya en la tabla, como lo puedes ver aqui:

CREATE PROCEDURE sp_InsertCustomer (
IN Firstname VARCHAR(100), IN Lastname VARCHAR(100), IN Email VARCHAR(100), IN Birthday DateTime,
IN Company varchar(100), IN Address1 varchar(100), IN Postcode INT, IN City varchar(100), IN Phone INT
)
BEGIN
IF (SELECT * FROM `ps_customer` WHERE id_customer = 3) IS NOT NULL THEN
SET @ExistsUser = 1;
END IF;


IF @ExistsUser = 1 THEN
insert into `ps_customer`
(
id_default_group,id_risk,firstname,lastname,email, passwd,birthday,
newsletter_date_add,max_payment_days,secure_key,ac tive,date_add,date_upd
)
values (
3,0,Firstname,Lastname,Email,'12345',Birthday,'000 0-00-00 00:00:00',0,'2293b4751c4ff4517bb997eb9c141a76',1,C URRENT_TIMESTAMP(),
CURRENT_TIMESTAMP()
);


set @Customer_ID = (select MAX(id_customer) from `ps_customer`);
insert into `ps_customer_group` (id_customer,id_group)values(@Customer_ID,3);
insert into `ps_guest`(
id_operating_system,id_web_browser,id_customer,scr een_resolution_x,screen_resolution_y,
screen_color,sun_java,adobe_flash, adobe_director,apple_quicktime,real_player,windows _media,
accept_language
)
values(
3,10,@Customer_ID,0,0,0,0,0,0,0,0,0,''
);
insert into `ps_address`(
id_country,id_state,id_customer,id_manufacturer,id _supplier,id_warehouse,alias,company,lastname,firs tname,address1,
postcode,city,phone,vat_number,dni,date_add,date_u pd,active,deleted
)
values
(
145,67,@Customer_ID,0,0,0,'Business',Company,Lastn ame,Firstname,Address1,Postcode,City,Phone,
'','',CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP(),1,0
);

END IF;
END
------------------------------------------------------------------------------------------
ESE ES EL SP CON EL CODIGO QUE ME PASASTE
Y ESTE ES EL ERROR QUE ME MARCA:
------------------------------------------------------------------------------------------

Error
consulta SQL:

CREATE PROCEDURE sp_InsertCustomer( IN Firstname VARCHAR( 100 ) , IN Lastname VARCHAR( 100 ) , IN Email VARCHAR( 100 ) , IN Birthday DATETIME, IN Company VARCHAR( 100 ) , IN Address1 VARCHAR( 100 ) , IN Postcode INT, IN City VARCHAR( 100 ) , IN Phone INT ) BEGIN IF( SELECT *
FROM `ps_customer`
WHERE id_customer =3 ) IS NOT NULL
THEN
SET @ExistsUser =1;


MySQL ha dicho:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 7
--------------------------------------------------------------------------------------------------------------
  #13 (permalink)  
Antiguo 07/12/2012, 09:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

Por favor, usa las etiquetas que encuentras en el combo Highlight. Están allí para hacer que los códigos sean más claros y legibles.

Respecto al código en sí, en ocasiones anteriores es un modo de hacerlo que he utilizado son problemas.
No estoy seguro de por qué no funciona ahora, pero puede ser por la evolución de las versiones de MySQL.
Entonces, vamos a lo simple...

Tres tips previos:
1) Trata de escribir los códigos de forma estructurada. Facilita la lectura y la búsqueda de errores, sean de sintaxis, de logica o procedimentales.
2) No uses variables de sesión a menos que sea estrictamente necesario. En un SP es preferible usar variables locales, y si el SP tiene que devolver datos, es mejor que los devuelva por parámetro, y no en variables de sesión.
3) No me estás diciendo con qué estás cargando este script. No es lo mismo usar MySQL Workbench, que phpMyadmin, Navicat, o la consola de MySQL. Dime qué usas.

Probemos con esto:
Código MySQL:
Ver original
  1. CREATE PROCEDURE sp_InsertCustomer (
  2.     IN Firstname VARCHAR(100),
  3.     IN Lastname VARCHAR(100),
  4.     IN Email VARCHAR(100),
  5.     IN Birthday DateTime,
  6.    
  7.     IN Company varchar(100),
  8.     IN Address1 varchar(100),
  9.     IN Postcode INT,
  10.     IN City varchar(100),
  11.     IN Phone INT
  12.     )
  13.     DECLARE regs        INT;
  14.     DECLARE ExistUser   INT;
  15.     DECLARE Customer_ID INT;
  16.     SET regs = 0;
  17.     SELECT COUNT(*) INTO regs
  18.     FROM `ps_customer`
  19.     WHERE id_customer = 3;
  20.  
  21.     IF regs > 0 THEN
  22.         SET ExistsUser = 1;
  23.     END IF;
  24.  
  25.     IF ExistsUser = 1 THEN
  26.         INSERT INTO  `ps_customer`
  27.             (id_default_group,id_risk,firstname,lastname,email, passwd,birthday, newsletter_date_add,max_payment_days,secure_key,ac tive,date_add,date_upd)
  28.         VALUES(
  29. 3, 0, Firstname, Lastname, Email, '12345',
  30.             Birthday,'0000-00-00 00:00:00',
  31.             0, '2293b4751c4ff4517bb997eb9c141a76', 1, CURRENT_TIMESTAMP(),
  32.             CURRENT_TIMESTAMP()
  33.             );
  34.  
  35.         SET Customer_ID = LAST_INSERT_ID();
  36.         IF Customer_ID > 0 THEN
  37.             INSERT INTO  `ps_customer_group` (id_customer, id_group)
  38.                 VALUES(Customer_ID, 3);
  39.             INSERT INTO  `ps_guest`(id_operating_system, id_web_browser, id_customer, screen_resolution_x, screen_resolution_y,
  40.  screen_color, sun_java, adobe_flash, adobe_director, apple_quicktime, real_player, windows_media, accept_language)
  41.                 VALUES(3, 10, Customer_ID, 0, 0, 0, 0, 0, 0, 0, 0, 0,'');
  42.             INSERT INTO  `ps_address`(id_country, id_state, id_customer, id_manufacturer, id _supplier, id_warehouse, alias, company, lastname, firstname, address1,
  43.  postcode, city, phone, vat_number, dni, date_add, date_upd, active, deleted)
  44.                 VALUES(145, 67, Customer_ID, 0, 0, 0, 'Business', Company, Lastname, Firstname, Address1, Postcode, City, Phone, '','' , CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 1, 0);
  45.         END IF;
  46.     END IF;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 07/12/2012, 10:14
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Hola estoy usando phpmyadmin, aunque tambien tengo instalado workbench, respecto a este ultimo no he podido crear procedure ni verlos para editarlos, bueno solo tengo uno creado, lo cree en phpmyadmin pero despues de ese ya no logre crear mas y es el problema que tengo actualmente y estoy usando xampp
  #15 (permalink)  
Antiguo 07/12/2012, 10:19
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Acabo de tratar de crear el SP con el codigo que me pasaste pero sigo teniendo los mismos problemas error con la declaracion de variables:

Error
consulta SQL:

CREATE PROCEDURE sp_InsertCustomer( IN Firstname VARCHAR( 100 ) , IN Lastname VARCHAR( 100 ) , IN Email VARCHAR( 100 ) , IN Birthday DATETIME, IN Company VARCHAR( 100 ) , IN Address1 VARCHAR( 100 ) , IN Postcode INT, IN City VARCHAR( 100 ) , IN Phone INT ) BEGIN DECLARE regs INT;


MySQL ha dicho:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 14
  #16 (permalink)  
Antiguo 07/12/2012, 10:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

Para crear SP en el phpMyadmin lo único que tienes que hacer es
1) Copiar el script en el textarea de SQL.
2) Ponerle al final algo como "$$"
3) Poner esos mismos $$C en el textbox que está abajo a la derecha, donde dice algo como "terminadores de sentencias"
4) Ejecutarlo.

Con el MySQL Workbench es todavía más fácil, porque tiene una herramienta para crear scripts., con lo que solamente tienes que editarlo en el editor que se te abre cuanto le indicas "crear procedure" en el submenú de la tecla derecha sobre el icono de "Routines".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 07/12/2012, 11:46
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Pues no consigo hacerlo en workbench ni en phpmyadmin, workbench solo me dice que tengo errores de sintaxis pero no me dice donde y phpmyadmin me marca un error en un insert pero no tengo idea de por que este es el query ya con delimiter en phpmyadmin:

Código MySQL:
Ver original
  1. Delimiter //
  2. CREATE PROCEDURE sp_InsertCustomer (
  3.     IN Firstname VARCHAR(100),
  4.     IN Lastname VARCHAR(100),
  5.     IN Email VARCHAR(100),
  6.     IN Birthday DATETIME,
  7.    
  8.     IN Company VARCHAR(100),
  9.     IN Address1 VARCHAR(100),
  10.     IN Postcode INT,
  11.     IN City VARCHAR(100),
  12.     IN Phone INT
  13.     )
  14. DECLARE regs        INT;
  15.     DECLARE ExistsUser   INT;
  16.     DECLARE Customer_ID INT;
  17.     SET regs = 0;
  18.     SELECT COUNT(*) INTO regs
  19.     FROM `ps_customer`
  20.     WHERE id_customer = 3;
  21.  
  22.     IF regs > 0 THEN
  23.         SET ExistsUser = 1;
  24.     END IF;
  25.  
  26.     IF ExistsUser = 1 THEN
  27.         INSERT INTO  `ps_customer`
  28.             (id_default_group,id_risk,firstname,lastname,email, passwd,birthday, newsletter_date_add,max_payment_days,secure_key,ac tive,date_add,date_upd)
  29.         VALUES(
  30.                3, 0, Firstname, Lastname, Email, '12345',Birthday,'0000-00-00 00:00:00',0,
  31.                '2293b4751c4ff4517bb997eb9c141a76',1,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP()
  32.               );
  33.  
  34.         SET Customer_ID = LAST_INSERT_ID();
  35.         IF Customer_ID > 0 THEN
  36.             INSERT INTO  `ps_customer_group` (id_customer, id_group)
  37.                 VALUES(Customer_ID, 3);
  38.             INSERT INTO  `ps_guest`(id_operating_system, id_web_browser, id_customer, screen_resolution_x, screen_resolution_y,
  39.  screen_color, sun_java, adobe_flash, adobe_director, apple_quicktime, real_player, windows_media, accept_language)
  40.                 VALUES(3, 10, Customer_ID, 0, 0, 0, 0, 0, 0, 0, 0, 0,'');
  41.             INSERT INTO  `ps_address`(id_country, id_state, id_customer, id_manufacturer, id _supplier, id_warehouse, alias, company, lastname, firstname, address1,
  42.  postcode, city, phone, vat_number, dni, DATE_ADD, date_upd, active, deleted)
  43.                 VALUES(145, 67, Customer_ID, 0, 0, 0, 'Business', Company, Lastname, Firstname, Address1, Postcode, City, Phone, '','' , CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 1, 0);
  44.         END IF;
  45.     END IF;
  46. //
-----------------------------------------------------------------------------------------------------------

y este es el error que marca:

Código MySQL:
Ver original
  1. Error
  2.  
  3. Parece haber un error en su consulta de SQL. La salida generada por el servidor de MySQL, de existir, aparece abajo, en cuyo caso puede ayudar a diagnosticar el problema.
  4.  
  5. ERROR: Signo de puntuación desconocido @ 1947
  6. STR: //
  7. SQL: CREATE PROCEDURE sp_InsertCustomer (
  8.     IN Firstname VARCHAR(100),
  9.     IN Lastname VARCHAR(100),
  10.     IN Email VARCHAR(100),
  11.     IN Birthday DATETIME,
  12.    
  13.     IN Company VARCHAR(100),
  14.     IN Address1 VARCHAR(100),
  15.     IN Postcode INT,
  16.     IN City VARCHAR(100),
  17.     IN Phone INT
  18.     )
  19. DECLARE regs        INT;
  20.     DECLARE ExistsUser   INT;
  21.     DECLARE Customer_ID INT;
  22.     SET regs = 0;
  23.     SELECT COUNT(*) INTO regs
  24.     FROM `ps_customer`
  25.     WHERE id_customer = 3;
  26.  
  27.     IF regs > 0 THEN
  28.         SET ExistsUser = 1;
  29.     END IF;
  30.  
  31.     IF ExistsUser = 1 THEN
  32.         INSERT INTO  `ps_customer`
  33.             (id_default_group,id_risk,firstname,lastname,email, passwd,birthday, newsletter_date_add,max_payment_days,secure_key,ac tive,date_add,date_upd)
  34.         VALUES(
  35.                3, 0, Firstname, Lastname, Email, '12345',Birthday,'0000-00-00 00:00:00',0,
  36.                '2293b4751c4ff4517bb997eb9c141a76',1,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP()
  37.               );
  38.  
  39.         SET Customer_ID = LAST_INSERT_ID();
  40.         IF Customer_ID > 0 THEN
  41.             INSERT INTO  `ps_customer_group` (id_customer, id_group)
  42.                 VALUES(Customer_ID, 3);
  43.             INSERT INTO  `ps_guest`(id_operating_system, id_web_browser, id_customer, screen_resolution_x, screen_resolution_y,
  44.  screen_color, sun_java, adobe_flash, adobe_director, apple_quicktime, real_player, windows_media, accept_language)
  45.                 VALUES(3, 10, Customer_ID, 0, 0, 0, 0, 0, 0, 0, 0, 0,'');
  46.             INSERT INTO  `ps_address`(id_country, id_state, id_customer, id_manufacturer, id _supplier, id_warehouse, alias, company, lastname, firstname, address1,
  47.  postcode, city, phone, vat_number, dni, DATE_ADD, date_upd, active, deleted)
  48.                 VALUES(145, 67, Customer_ID, 0, 0, 0, 'Business', Company, Lastname, Firstname, Address1, Postcode, City, Phone, '','' , CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 1, 0);
  49.         END IF;
  50.     END IF;
  51. //
  52.  
  53.  
  54. consulta SQL: Documentación
  55.  
  56. CREATE PROCEDURE sp_InsertCustomer ( IN Firstname VARCHAR(100), IN Lastname VARCHAR(100), IN Email VARCHAR(100), IN Birthday DATETIME, IN Company VARCHAR(100), IN Address1 VARCHAR(100), IN Postcode INT, IN City VARCHAR(100), IN Phone INT ) BEGIN DECLARE regs INT; DECLARE ExistsUser INT; DECLARE Customer_ID INT; SET regs = 0; SELECT COUNT(*) INTO regs FROM `ps_customer` WHERE id_customer = 3; IF regs > 0 THEN SET ExistsUser = 1; END IF; IF ExistsUser = 1 THEN INSERT INTO `ps_customer` (id_default_group,id_risk,firstname,lastname,email, passwd,birthday, newsletter_date_add,max_payment_days,secure_key,ac tive,date_add,date_upd) VALUES( 3, 0, Firstname, Lastname, Email, '12345',Birthday,'0000-00-00 00:00:00',0, '2293b4751c4ff4517bb997eb9c141a76',1,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP() ); SET Customer_ID = LAST_INSERT_ID(); IF Customer_ID > 0 THEN INSERT INTO `ps_customer_group` (id_customer, id_group) VALUES(Customer_ID, 3); INSERT INTO `ps_guest`(id_operating_system, id_web_browser, id_customer, screen_resolution_x, screen_resolution_y, screen_color, sun_java, adobe_flash, adobe_director, apple_quicktime, real_player, windows_media, accept_language) VALUES(3, 10, Customer_ID, 0, 0, 0, 0, 0, 0, 0, 0, 0,''); INSERT INTO `ps_address`(id_country, id_state, id_customer, id_manufacturer, id _supplier, id_warehouse, alias, company, lastname, firstname, address1, postcode, city, phone, vat_number, dni, DATE_ADD, date_upd, active, deleted) VALUES(145, 67, Customer_ID, 0, 0, 0, 'Business', Company, Lastname, Firstname, Address1, Postcode, City, Phone, '','' , CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 1, 0); END IF; END IF; END //
  57.  
  58. MySQL ha dicho: Documentación
  59. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'tive,date_add,date_upd)
  60.         VALUES(
  61.                3, 0, Firstname, Lastna' at line 28
  #18 (permalink)  
Antiguo 07/12/2012, 12:45
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Ya logre crearlo ya solo tenia errores de sintaxis en campos que tenian espacio asi quedo la solucion en workbench:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

Código MySQL:
Ver original
  1. -- --------------------------------------------------------------------------------
  2. -- Routine DDL
  3. -- Note: comments before and after the routine body will not be stored by the server
  4. -- --------------------------------------------------------------------------------
  5. DELIMITER $$
  6.  
  7. CREATE PROCEDURE `sp_InsertCustomer` (
  8.     IN Firstname VARCHAR(100),
  9.     IN Lastname VARCHAR(100),
  10.     IN Email VARCHAR(100),
  11.     IN Birthday DATETIME,
  12.    
  13.     IN Company VARCHAR(100),
  14.     IN Address1 VARCHAR(100),
  15.     IN Postcode INT,
  16.     IN City VARCHAR(100),
  17.     IN Phone INT
  18. )
  19.  
  20.     DECLARE regs INT;
  21.     DECLARE ExistsUser   INT;
  22.     DECLARE Customer_ID INT;
  23.     SET regs = 0;
  24.     SELECT COUNT(*) INTO regs
  25.     FROM `ps_customer`
  26.     WHERE id_customer = 3;
  27.  
  28.     IF regs > 0 THEN
  29.         SET ExistsUser = 1;
  30.     END IF;
  31.  
  32.     IF ExistsUser = 1 THEN
  33.         INSERT INTO  `ps_customer`
  34.             (id_default_group,id_risk,firstname,lastname,email, passwd,birthday, newsletter_date_add,max_payment_days,secure_key,active,date_add,date_upd)
  35.         VALUES(
  36.                3, 0, Firstname, Lastname, Email, '12345',Birthday,'0000-00-00 00:00:00',0,
  37.                '2293b4751c4ff4517bb997eb9c141a76',1,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP()
  38.               );
  39.  
  40.         SET Customer_ID = LAST_INSERT_ID();
  41.         IF Customer_ID > 0 THEN
  42.             INSERT INTO  `ps_customer_group` (id_customer, id_group)
  43.                 VALUES(Customer_ID, 3);
  44.             INSERT INTO  `ps_guest`(id_operating_system, id_web_browser, id_customer, screen_resolution_x, screen_resolution_y,
  45.             screen_color, sun_java, adobe_flash, adobe_director, apple_quicktime, real_player, windows_media, accept_language)
  46.                 VALUES(3, 10, Customer_ID, 0, 0, 0, 0, 0, 0, 0, 0, 0,'');
  47.             INSERT INTO  `ps_address`(id_country, id_state, id_customer, id_manufacturer, id_supplier, id_warehouse, alias, company, lastname, firstname, address1,
  48.              postcode, city, phone, vat_number, dni, DATE_ADD, date_upd, active, deleted)
  49.                 VALUES(145, 67, Customer_ID, 0, 0, 0, 'Business', Company, Lastname, Firstname, Address1, Postcode, City, Phone, '','' , CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 1, 0);
  50.         END IF;
  51.     END IF;
  52.  

AUNQUE LA VERDAD ME HA DEJADO UN MAL SABOR MYSQL YO NO RECOMIENDO QUE LO USEN ESTA MUY LIMITADO EN MUCHAS COSAS ES MUCHO MEJOR SQLSERVER Y NI HABLAR CON PHP QUE CONTINUA SIENDO TAN OBSOLETO Y NO PROPORCIONA MUCHA AYUDA PARA DESARROLLAR A LOS PROGRAMADORES, ESTAS DOS TECNOLOGIAS DE VERIAN DE MORIR YA.
GRACIAS POR LA AYUDA gnzsoloyo
  #19 (permalink)  
Antiguo 07/12/2012, 13:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

En realidad, lamento que hayas tenido un cambio de entorno tan dificultoso, pero te comento que no sólo es uno de los DBNS más difundidos en Internet (cada vez que navegas accedes a centenares de bases que corren sonbre MySQL, y no creo que lo hayas notado). También es uno de los más potentes, dúctiles y sencillos.
Tu problema en realidad es que, al igual que un programador que cambia de lenguaje, no estás habituado a las reglas de sintaxis y de procedimientos de MySQL, por eso los cambios te cuestan, y por eso mismo te lo recalqué varias veces.
En general, si te acostumbras a cambiar entre diferentes DBMS descubrirás que la scosas no son tan difíciles ni malas como dices.
Yo trabajo con Oracle, MySQL y SQL Server, y puedo asegurarte que si logras la versatilidad para saltar de uno a otro, terminas prefiriendo a MySQL por su extrema simpleza.

No porque si, Oracle lo compró...

PD: Entre empresarios, prefiero Oracle a $QL $erver.

PD2: Ningún DBMS que conozca acepta espacios en blanco en el nombre de los objetos, sin que los mismos estén encerrados entre acentos graves o entre comillas, o algún otro símbolo.
Eso es parte de los errores sintácticos incluso en SQL Server.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/12/2012 a las 13:15
  #20 (permalink)  
Antiguo 07/12/2012, 13:42
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Si en cuanto al error de sintaxis ya lo se en Sql server no permite poner espacios a variables ni comandos, el error que presente fue en dos campos que tenien un espacion entre el guion bajo, no se como sucedio creo que al ponerle las etiquetas de Highlight me puso los espacios.
Mira en cuanto rendimiento de gestores de BD no tengo mucha experiencia ya que solo he trabajado con SQL server casi 2 años y como tres semanas con mysql.
Por eso no me atrevo a criticar ese aspecto, pero a lo que si veo a hora esque mysql no tiene mucha ayuda para el desarrollador como lo que tiene SqlServer:

Autocomplete,
Diagrama Entidad relacion,
detalle de tabla,
la misma sintaxis querys, sp, funciones, triggers etc.

SQLserver te hace la vida mas facil, NO HAY NECESIDAD DE COMPLICARTE LAS COSAS (MYSQL).

Lo que digo con esto es que Mysql deberia de cambiar de ser mas competitivo en ese aspecto, pero bueno cada quien programa en lo que le gusta.
  #21 (permalink)  
Antiguo 07/12/2012, 13:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Asignar valor a variable dentro de if

Cita:
Autocomplete,
Diagrama Entidad relacion,
detalle de tabla,
Esto no compone el kernel de los DBMS, son los aplicativos adicionales a cada uno, y en el caso de MySQL (que es Open Source, te lo recuerdo), hay mucho de terceros , o pagas la empresarial, como con SQL Server y Oracle.
Cita:
la misma sintaxis querys, sp, funciones, triggers
Esto ya te lo dije: No existe un estándar ANSI, como si lo hay del SQL. Por eso SQL Server interpreta el ANSI SQL, pero también le agrega cosas que no están definidas en él.
El mismo problema lo tendrás si usas Oracle, DB2 o Postgre. Cada uno de ellos hizo las cosas del T-SQL (o PL/SQL) como se le canta, y no puedes migrar un trigger de SQL Server a Oracle sin tener que modificarlo.
Es inevitable.

Si vas a permanecer en las bases de datos, es mejor que tengas presente eso. El problema lo vas a tener siempre. No sólo con MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 07/12/2012, 14:03
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Asignar valor a variable dentro de if

Eso ya lo se cada gestor maneja su propia sintaxis y creeme que lo tengo bien presente a lo que yo mereferia con que sqlServer maneja la misma sintaxis es que un If funciona igual en un simple query que en un SP o trigger, no como mysql que maneja diferente sintaxis como tu ya me lo habias explicado, eso es algo que ayuda bastante.
Pero como dije antes cada quien programa en lo que le gusta.

Etiquetas: query, sintaxis, statement, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:58.