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

No sé cual es el error, desconozco como se declara

Estas en el tema de No sé cual es el error, desconozco como se declara en el foro de Mysql en Foros del Web. Estimados, Mi problema es en el SET PasoIf = "SELECT MAX(IDHOSPEDAJE) FROM HOSPEDAJE"; ¿Como se define de manera correcta esto? @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver ...
  #1 (permalink)  
Antiguo 10/05/2010, 15:29
Avatar de Jona_than  
Fecha de Ingreso: noviembre-2005
Ubicación: Chile
Mensajes: 155
Antigüedad: 18 años, 5 meses
Puntos: 0
De acuerdo No sé cual es el error, desconozco como se declara

Estimados,

Mi problema es en el SET PasoIf = "SELECT MAX(IDHOSPEDAJE) FROM HOSPEDAJE";

¿Como se define de manera correcta esto?

Código MySQL:
Ver original
  1. CREATE PROCEDURE `InsertarInscrito`(IN NombreHospedaje varchar(250),IN TelefonoHospedaje varchar(250),IN IdComuna int,IN NombresInscrito varchar(250),IN ApellidosInscrito varchar(250),IN EdadInscrito int,IN CodAreaInscrito int,IN TelefonoRFInscrito int,IN TelefonoMInscrito varchar(250),IN EmailInscrito varchar(250),IN HospedajeInscrito bool,IN CongregacionInscrito varchar(250),IN NombrePInscrito varchar(250),IN EmailPInscrito varchar(250),IN TelefonoPInscrito varchar(250),IN CoyuLiderInscrito varchar(250),IN EmailCLInscrito varchar(250),IN TelefonoCLInscrito varchar(250))
  2. IF HospedajeInscrito = 1 THEN
  3.  INSERT INTO HOSPEDAJE VALUES (NombreHospedaje,TelefonoHospedaje);
  4.  DECLARE PasoIf varchar(250);
  5.  SET PasoIf = "SELECT MAX(IDHOSPEDAJE) FROM HOSPEDAJE";
  6.  INSERT INTO INSCRITO VALUES (PasoIf,IdComuna,NombresInscrito,ApellidosInscrito,EdadInscrito,CodAreaInscrito,TelefonoRFInscrito,TelefonoMInscrito,EmailInscrito,HospedajeInscrito,CongregacionInscrito,NombrePInscrito,EmailPInscrito,TelefonoPInscrito,CoyuLiderInscrito,EmailCLInscrito,TelefonoCLInscrito);
  7.  DECLARE PasoIFDos varchar(250);
  8.  SET PasoIfDos = "SELECT MAX(IDINSCRITO) FROM INSCRITO";
  9.  INSERT INTO PENDIENTE VALUES (PasoIfDos);
  10.  INSERT INTO INSCRITO VALUES (IdComuna,NombresInscrito,ApellidosInscrito,EdadInscrito,CodAreaInscrito,TelefonoRFInscrito,TelefonoMInscrito,EmailInscrito,HospedajeInscrito,CongregacionInscrito,NombrePInscrito,EmailPInscrito,TelefonoPInscrito,CoyuLiderInscrito,EmailCLInscrito,TelefonoCLInscrito);
  11.  DECLARE PasoElse varchar(250);
  12.  SET PasoElse = "SELECT MAX(IDINSCRITO) FROM INSCRITO";
  13.  INSERT INTO PENDIENTE VALUES (PasoElse);

Saludos.
__________________
- Fasecreativa
- Twitter @jonyram
  #2 (permalink)  
Antiguo 11/05/2010, 21:26
Avatar de richicasas  
Fecha de Ingreso: abril-2007
Ubicación: Colombia
Mensajes: 692
Antigüedad: 17 años
Puntos: 13
De acuerdo Respuesta: No sé cual es el error, desconozco como se declara

No se bien que lenguage de programacion usas pero yo usando php y mysql agregaria en el sql lo siguiente:
SET PasoIf = "SELECT MAX(IDHOSPEDAJE) AS VARIABLE FROM HOSPEDAJE";

y cuando imprimas el valor, imprimes VARIABLE
__________________
Juguetes Sexuales
  #3 (permalink)  
Antiguo 11/05/2010, 21:38
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, 4 meses
Puntos: 2658
Respuesta: No sé cual es el error, desconozco como se declara

Está usando el lenguaje de procedimientos para MySQL.
No tiene nada que ver con programación. Son procedimientos almacenados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 11/05/2010, 21:47
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, 4 meses
Puntos: 2658
Respuesta: No sé cual es el error, desconozco como se declara

No se entiende bien qué es lo que pretendes hacer con esto:
Cita:
Iniciado por Jona_than Ver Mensaje
Estimados,

Mi problema es en el SET PasoIf = "SELECT MAX(IDHOSPEDAJE) FROM HOSPEDAJE";

¿Como se define de manera correcta esto?

Código MySQL:
Ver original
  1. CREATE PROCEDURE `InsertarInscrito`(IN NombreHospedaje varchar(250),IN TelefonoHospedaje varchar(250),IN IdComuna int,IN NombresInscrito varchar(250),IN ApellidosInscrito varchar(250),IN EdadInscrito int,IN CodAreaInscrito int,IN TelefonoRFInscrito int,IN TelefonoMInscrito varchar(250),IN EmailInscrito varchar(250),IN HospedajeInscrito bool,IN CongregacionInscrito varchar(250),IN NombrePInscrito varchar(250),IN EmailPInscrito varchar(250),IN TelefonoPInscrito varchar(250),IN CoyuLiderInscrito varchar(250),IN EmailCLInscrito varchar(250),IN TelefonoCLInscrito varchar(250))
  2. IF HospedajeInscrito = 1 THEN
  3.  INSERT INTO HOSPEDAJE VALUES (NombreHospedaje,TelefonoHospedaje);
  4.  DECLARE PasoIf varchar(250);
  5.  SET PasoIf = "SELECT MAX(IDHOSPEDAJE) FROM HOSPEDAJE";
  6.  INSERT INTO INSCRITO VALUES (PasoIf,IdComuna,NombresInscrito,ApellidosInscrito,EdadInscrito,CodAreaInscrito,TelefonoRFInscrito,TelefonoMInscrito,EmailInscrito,HospedajeInscrito,CongregacionInscrito,NombrePInscrito,EmailPInscrito,TelefonoPInscrito,CoyuLiderInscrito,EmailCLInscrito,TelefonoCLInscrito);
  7.  DECLARE PasoIFDos varchar(250);
  8.  SET PasoIfDos = "SELECT MAX(IDINSCRITO) FROM INSCRITO";
  9.  INSERT INTO PENDIENTE VALUES (PasoIfDos);
  10.  INSERT INTO INSCRITO VALUES (IdComuna,NombresInscrito,ApellidosInscrito,EdadInscrito,CodAreaInscrito,TelefonoRFInscrito,TelefonoMInscrito,EmailInscrito,HospedajeInscrito,CongregacionInscrito,NombrePInscrito,EmailPInscrito,TelefonoPInscrito,CoyuLiderInscrito,EmailCLInscrito,TelefonoCLInscrito);
  11.  DECLARE PasoElse varchar(250);
  12.  SET PasoElse = "SELECT MAX(IDINSCRITO) FROM INSCRITO";
  13.  INSERT INTO PENDIENTE VALUES (PasoElse);

Saludos.
Vamos por partes:
1) Las comillas (") se usan para encerrar las denominaciones de campos, tablas, bases, procedimientos, triggers, funciones, y cualquier objeto de la base de datos, de la misma forma que el acento grave (`). No te sirve en este contexto y te generará un error de sintaxis, porque no hay ninguna columna denominada "SELECT MAX(IDINSCRITO) FROM INSCRITO".
2) No se comprende lo que quieres hacer al ejecutar
Código MySQL:
Ver original
  1. SET PasoIf = "SELECT MAX(IDHOSPEDAJE) FROM HOSPEDAJE";
más allá de que te dará un error de sintaxis, como ya te dije, ni para qué parece que lo quisieras guardar en la misma tabla.
3) No se entiende por qué tienes tres tablas para definir diferentes estados de un registro, cuando eso se puede controlar con un sólo campo, ni cómo evitaras los problemas de consistencia de datos en el futuro, al tener registros idénticos repartidos en esas tablas.
__________________
¿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 11/05/2010, 22:09
Avatar de richicasas  
Fecha de Ingreso: abril-2007
Ubicación: Colombia
Mensajes: 692
Antigüedad: 17 años
Puntos: 13
De acuerdo Respuesta: No sé cual es el error, desconozco como se declara

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Está usando el lenguaje de procedimientos para MySQL.
No tiene nada que ver con programación. Son procedimientos almacenados.
Gracias, nuevo tema para aprender. aunque ya le pegue un vistazo en papa google y no entendi mucho pero bueno ahi seguire mirando haber si comprendo.
__________________
Juguetes Sexuales
  #6 (permalink)  
Antiguo 11/05/2010, 22:45
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, 4 meses
Puntos: 2658
Respuesta: No sé cual es el error, desconozco como se declara

Lo puedes ver como T-SQL en SQL Server y como PL/SQL en Oracle.
Son lenguajes de procedimientos que usan y extienden las capacidades del SQL dentro de los DBMS. Permiten realizar operaciones complejas con controles de flujo y toma de deciciones dentro de un sólo bloque de ejecuciones, así como administrar diferentes niveles de transacciones dentro de sí mismos.

Como los SP sólo pueden recibir parámetros, son invulnerables al SQL-injection. Además se ejecutan en el servidor donde residen, por lo que no usan tiempo de procesamiento en las máquinas clientes. Los SP si pueden devolver valores en los parámetros, si se indica, o bien pueden devolver una tabla de consulta de sólo lectura.

También permiten realizar tareas complejas a usuarios de bajo nivel de permisos, ya que solamente requieren permisos EXECUTE para hacerlo, lo que hace que se puedan ingresar, ver y eliminar datos de tablas a las cuales el usuario no tenga permiso, pero solamente en aquellas que el SP invoca y nada más.

Como además, se requieren permisos de alto nivel (SUPERUSER) para cargarlos y editarlos, no cualquier usuario puede crear uno y ponerlo en la base, por lo que son bastante seguros.
__________________
¿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 11/05/2010, 22:55
Avatar de richicasas  
Fecha de Ingreso: abril-2007
Ubicación: Colombia
Mensajes: 692
Antigüedad: 17 años
Puntos: 13
De acuerdo Respuesta: No sé cual es el error, desconozco como se declara

Muchas gracias gnzsoloyo, una pregunta adicional y disculpas a Jona_than por desvirtuar el tema.

Que diferencia existe entre los procedimientos almacenados y las funciones que uno hace en PHP.

Por ejemplo, cuando se hacen cosas repetitivas yo utilizo funciones en php. Según entiendo, estos procedimientos en pocas palabras son funciones PERO NO DE PHP SINO DE MYSQL que brindan una seguridad bastante alta y una velocidad mas avanzada que dichas funciones de PHP. Estoy en lo correcto?
__________________
Juguetes Sexuales

Etiquetas: Ninguno
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 21:06.