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:
| |||
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: Última edición por gnzsoloyo; 06/12/2012 a las 13:59 Razón: Código SQL no etiquetado. |
| |||
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? |
| ||||
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 |
| |||
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? |
| ||||
Respuesta: Asignar valor a variable dentro de if 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) |
| |||
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?" |
| ||||
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) |
| |||
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 |
| ||||
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) |
| |||
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 -------------------------------------------------------------------------------------------------------------- |
| ||||
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
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| |||
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 |
| |||
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 |
| ||||
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) |
| |||
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 y este es el error que marca:
Código MySQL:
Ver original |
| |||
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 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 |
| ||||
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 |
| |||
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. |
| ||||
Respuesta: Asignar valor a variable dentro de if Cita: 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.Autocomplete, Diagrama Entidad relacion, detalle de tabla, Cita: 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.la misma sintaxis querys, sp, funciones, triggers 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) |
| |||
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: |