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

Asignar valor a variable en un SP

Estas en el tema de Asignar valor a variable en un SP en el foro de Mysql en Foros del Web. Hola comunidad de Mysql. Tengo un problema al asignar un avalor a una variable en un SP mediante un query. Alguien podria decirme como hacerlo ...
  #1 (permalink)  
Antiguo 13/12/2012, 10:54
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Asignar valor a variable en un SP

Hola comunidad de Mysql.
Tengo un problema al asignar un avalor a una variable en un SP mediante un query.
Alguien podria decirme como hacerlo miren este es el codigo que uso en el SP:
Código MySQL:
Ver original
  1. Declare customer_id INT;
  2.     set customer_id = (select id_customer  from `ps_customer` where firstname = 'Juan' and lastname= 'Perez');
  3.     Select customer_id;

Esto me devuelve NUll siendo que el usuario si existe en la tabla, intentando replicar la misma situacion en un query normal (no SP), escribi este codigo:

Código MySQL:
Ver original
  1. set @var = (select id_customer from `ps_customer` where firstname = 'Juan' and lastname= 'Perez');
  2. select @var;

Y este query me devuelve esto "BLOB" que me imagino que significa null o nose.
Alguien podria decirme que estoy haciendo mal, he estado revisando los manuales en esta pagina http://dev.mysql.com/ y lo estoy haciendo igual, pero no funciona.
Estoy usando Workbench.
Gracias!
  #2 (permalink)  
Antiguo 13/12/2012, 11:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Asignar valor a variable en un SP

Primero probemos esto:
Código MySQL:
Ver original
  1. DECLARE customer_id INT;
  2. SET customer_id = 0;
  3. SELECT id_customer
  4. FROM `ps_customer`
  5. WHERE firstname = 'Juan' AND lastname= 'Perez'
  6. INTO customer_id;
  7. SELECT customer_id;

Luego probemos esto:
Código MySQL:
Ver original
  1. SET @var = 0;
  2. SELECT @var := id_customer
  3. FROM `ps_customer`
  4. WHERE firstname = 'Juan' AND lastname= 'Perez';
  5. SELECT @var;
y luego
Código MySQL:
Ver original
  1. SET @var = 0;
  2. SELECT @var := id_customer
  3. FROM `ps_customer`
  4. WHERE firstname = 'Juan' AND lastname= 'Perez';
  5. SELECT CAST(@var AS UNSIGNED) idcustomer;
__________________
¿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 13/12/2012, 12:01
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Asignar valor a variable en un SP

Que tal gnzsoloyo, mira utilizando la primera y la tercera opcion que me pasaste, si funciona cuando el nombre y el apellido lo harcodeo en el sp, es decir firstname = 'Juan' and lastname = 'Perez'.
Pero no me funciona como lo necesito ya que llo estoy haciendo una llamada al SP para ejecutarlo (Creo que esto lo debi de haber dicho desde el principio, jaja), el nombre y apellido los recibe como parametros y poniendolo en el sp ya con los parametros el resultado me devuelve 0:

Código MySQL:
Ver original
  1. -- Esta es la llamada al SP:
  2.  
  3. Call `InsertOrder`('asdasd345','Juan','Perez',2000,2320,5,1,'Cheque','Cheque',16);
  4.  
  5. -- El primer parametro es un codigo de referencia, despues nombre y apellido, seguido por -- -cantidades de pago y el tipo de pago.
  6.  
  7. DECLARE customer_id INT;
  8. SET customer_id = 0;
  9. SELECT id_customer
  10. FROM `ps_customer`
  11. WHERE firstname = Nombre AND lastname= Apellido
  12. INTO customer_id;
  13. SELECT customer_id;

Como ves este es queri ya con los parametros en la asignacion del ID a la variable.
Y el resultado me arroja 0, estoy haciendo algo mal??
  #4 (permalink)  
Antiguo 13/12/2012, 12:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Asignar valor a variable en un SP

Postea el código del SP, porque entonces el problema está 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)
  #5 (permalink)  
Antiguo 13/12/2012, 13:05
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Asignar valor a variable en un SP

Este es el codigo, se que tengo variables de sesion que no deberian de estar en el SP pero estoy tratando de ver como asignar los valors

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 DEFINER=`root`@`localhost` PROCEDURE `InsertOrder`(
  8. IN Nombre VARCHAR(100),
  9. IN Apellido VARCHAR(100),
  10. IN TotalPaidNoTax float,
  11. IN TotalConTax float,
  12. IN ShippingNoTax float,
  13. IN ReferenceCode VARCHAR(100),
  14. IN CurrentState INT,
  15. IN Payment VARCHAR(100),
  16. IN Module VARCHAR(100),
  17. IN Tax float
  18. )
  19.  
  20. /*DECLARE customer_id INT;
  21. SET customer_id = 0;
  22. SELECT id_customer
  23. FROM `ps_customer`
  24. WHERE firstname = Nombre AND lastname= Apellido
  25. INTO customer_id;
  26. SELECT customer_id;*/
  27. /*
  28. SET @var = 0;
  29. SELECT @var := id_customer
  30. FROM `ps_customer`
  31. WHERE firstname = 'Julio' AND lastname= 'Muro';
  32. SELECT @var;*/
  33.  
  34. SET @var = 0;
  35. SELECT @var := id_customer
  36. FROM `ps_customer`
  37. WHERE firstname = Nombre AND lastname= Apellido;
  38. SELECT CAST(@var AS UNSIGNED) idcustomer;
  39.  
  40.     set @id_cart = (select MAX(id_cart) from `ps_cart`);
  41.     set @id_address = (select id_address from `ps_address` where firstname = Nombre and lastname= Apellido);
  42.     -- Declare customer_id INT;
  43.     -- set customer_id = (select id_customer  from `ps_customer` where firstname = Nombre and lastname= Apellido);
  44.     -- Select customer_id
  45.     set @id_guest = (select id_guest from `ps_guest` where id_customer = @customer_id);
  46.  
  47.             insert into  `ps_cart`(id_shop_group,id_shop,id_carrier,delivery_option,id_lang,
  48.                                    id_address_delivery,id_address_invoice,id_currency,id_customer,
  49.                                    id_guest,secure_key,recyclable,gift,gift_message,allow_seperated_package,
  50.                                    date_add,date_upd
  51.                                    )
  52.             select
  53.                   id_shop_group,id_shop,id_carrier,delivery_option,id_lang,id_address_delivery,
  54.                   id_address_invoice,id_currency,id_customer,id_guest,secure_key,recyclable,gift,
  55.                   gift_message,allow_seperated_package,date_add = CURRENT_TIMESTAMP(),
  56.                   date_upd = CURRENT_TIMESTAMP()
  57.             from
  58.                 ps_cart where id_cart = @id_cart;
  59.                        
  60.             set @id_cart = (select MAX(id_cart) from ps_cart);
  61.  
  62.             update `ps_cart` set id_guest=@id_guest, id_address_delivery = @id_address,
  63.                                  id_address_invoice = @id_address, id_customer = @customer_id,
  64.                                  date_add=CURRENT_TIMESTAMP(),date_upd=CURRENT_TIMESTAMP()
  65.             where id_cart=@id_cart;
  66.  
  67.             set @id_cart = (select MAX(id_cart) from ps_cart);
  68.             set @id_order_max = (select MAX(id_order) from `ps_orders`);
  69.             set @invoice_number = (select invoice_number from `ps_orders` where id_order = @id_order_max);
  70.             set @TotalMenosShippingIncl = (TotalPaidNoTax - 2.32);
  71.             set @TotalProductMenosShipping = (TotalConTax  - 2.32);
  72.             set @shippingTax = ShippingNoTax + ((ShippingNoTax * Tax)/100);
  73.            
  74.             insert into `ps_orders`(reference,id_carrier,id_lang,id_customer,id_cart,id_currency,
  75.                                     id_address_delivery,id_address_invoice,current_state,secure_key,
  76.                                     payment,conversion_rate,module,gift_message,shipping_number,
  77.                                     total_paid,total_paid_tax_incl,total_paid_tax_excl,total_paid_real,
  78.                                     total_products,total_products_wt,total_shipping,total_shipping_tax_incl,
  79.                                     total_shipping_tax_excl,carrier_tax_rate,date_add,date_upd
  80.                                     )
  81.                               values(
  82.                                     ReferenceCode,2,4,@customer_id,@id_cart,1,@id_address,@id_address,
  83.                                     CurrentState,'91b5b10c93a6f626f8e6154b32279510',Payment,
  84.                                     1.000000,Module,'','',TotalConTax,TotalConTax,TotalPaidNoTax,
  85.                                     0.00,@TotalMenosShippingIncl,@TotalProductMenosShipping,@shippingTax,
  86.                                     @shippingTax,ShippingNoTax,Tax,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP()
  87.                                     );
  #6 (permalink)  
Antiguo 13/12/2012, 13:06
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Asignar valor a variable en un SP

Mira te lo mando mejor sin codigo comentado:

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 DEFINER=`root`@`localhost` PROCEDURE `InsertOrder`(
  8. IN Nombre VARCHAR(100),
  9. IN Apellido VARCHAR(100),
  10. IN TotalPaidNoTax float,
  11. IN TotalConTax float,
  12. IN ShippingNoTax float,
  13. IN ReferenceCode VARCHAR(100),
  14. IN CurrentState INT,
  15. IN Payment VARCHAR(100),
  16. IN Module VARCHAR(100),
  17. IN Tax float
  18. )
  19.  
  20. DECLARE customer_id INT;
  21. SET customer_id = 0;
  22. SELECT id_customer
  23. FROM `ps_customer`
  24. WHERE firstname = Nombre AND lastname= Apellido
  25. INTO customer_id;
  26. SELECT customer_id;
  27.  
  28.     set @id_cart = (select MAX(id_cart) from `ps_cart`);
  29.     set @id_address = (select id_address from `ps_address` where firstname = Nombre and lastname= Apellido);
  30.     set @id_guest = (select id_guest from `ps_guest` where id_customer = @customer_id);
  31.  
  32.             insert into  `ps_cart`(id_shop_group,id_shop,id_carrier,delivery_option,id_lang,
  33.                                    id_address_delivery,id_address_invoice,id_currency,id_customer,
  34.                                    id_guest,secure_key,recyclable,gift,gift_message,allow_seperated_package,
  35.                                    date_add,date_upd
  36.                                    )
  37.             select
  38.                   id_shop_group,id_shop,id_carrier,delivery_option,id_lang,id_address_delivery,
  39.                   id_address_invoice,id_currency,id_customer,id_guest,secure_key,recyclable,gift,
  40.                   gift_message,allow_seperated_package,date_add = CURRENT_TIMESTAMP(),
  41.                   date_upd = CURRENT_TIMESTAMP()
  42.             from
  43.                 ps_cart where id_cart = @id_cart;
  44.                        
  45.             set @id_cart = (select MAX(id_cart) from ps_cart);
  46.  
  47.             update `ps_cart` set id_guest=@id_guest, id_address_delivery = @id_address,
  48.                                  id_address_invoice = @id_address, id_customer = @customer_id,
  49.                                  date_add=CURRENT_TIMESTAMP(),date_upd=CURRENT_TIMESTAMP()
  50.             where id_cart=@id_cart;
  51.  
  52.             set @id_cart = (select MAX(id_cart) from ps_cart);
  53.             set @id_order_max = (select MAX(id_order) from `ps_orders`);
  54.             set @invoice_number = (select invoice_number from `ps_orders` where id_order = @id_order_max);
  55.             set @TotalMenosShippingIncl = (TotalPaidNoTax - 2.32);
  56.             set @TotalProductMenosShipping = (TotalConTax  - 2.32);
  57.             set @shippingTax = ShippingNoTax + ((ShippingNoTax * Tax)/100);
  58.            
  59.             insert into `ps_orders`(reference,id_carrier,id_lang,id_customer,id_cart,id_currency,
  60.                                     id_address_delivery,id_address_invoice,current_state,secure_key,
  61.                                     payment,conversion_rate,module,gift_message,shipping_number,
  62.                                     total_paid,total_paid_tax_incl,total_paid_tax_excl,total_paid_real,
  63.                                     total_products,total_products_wt,total_shipping,total_shipping_tax_incl,
  64.                                     total_shipping_tax_excl,carrier_tax_rate,date_add,date_upd
  65.                                     )
  66.                               values(
  67.                                     ReferenceCode,2,4,@customer_id,@id_cart,1,@id_address,@id_address,
  68.                                     CurrentState,'91b5b10c93a6f626f8e6154b32279510',Payment,
  69.                                     1.000000,Module,'','',TotalConTax,TotalConTax,TotalPaidNoTax,
  70.                                     0.00,@TotalMenosShippingIncl,@TotalProductMenosShipping,@shippingTax,
  71.                                     @shippingTax,ShippingNoTax,Tax,CURRENT_TIMESTAMP(),CURRENT_TIMESTAMP()
  72.                                     );
  #7 (permalink)  
Antiguo 14/12/2012, 13:02
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Asignar valor a variable en un SP

Alguna sugerencia? Sabe alguien que es lo que pasa?
  #8 (permalink)  
Antiguo 14/12/2012, 13:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Asignar valor a variable en un SP

Yo no he tenido tiempo (mucho trabajo).
Esta noche lo vuelvo a mirar.
__________________
¿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 18/12/2012, 09:10
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Asignar valor a variable en un SP

Alguna idea????
  #10 (permalink)  
Antiguo 19/12/2012, 09:42
 
Fecha de Ingreso: noviembre-2012
Mensajes: 30
Antigüedad: 12 años
Puntos: 0
Respuesta: Asignar valor a variable en un SP

Me doy por vencido ya???
  #11 (permalink)  
Antiguo 29/12/2012, 12:36
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 13 años, 6 meses
Puntos: 42
Respuesta: Asignar valor a variable en un SP

Hola jnavarrete2311,

¿Puedes publicar la llamada que se hace al procedimiento almacenado (el CALL) y la definición del procedimiento almacenado?

Etiquetas: variables, sql-server
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 23:47.