SQL - Como se hace esto? alguna manera similar? procedimiento consulta

 
Vista:
Imágen de perfil de statham
Val: 13
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Como se hace esto? alguna manera similar? procedimiento consulta

Publicado por statham (7 intervenciones) el 01/07/2019 09:12:43
asi por encima y breve


CREATE PROCEDURE copia_prueba(IN dcopia VARCHAR(50), IN origen VARCHAR(20), IN destino VARCHAR(20))
BEGIN
DECLARE pp varchar(50);
set pp = concat(origen,".prueba_xxx");

if not exists (select id from pp where descripcion like ....


el error me dice que no encuentra la tabla pp...pero origen.prueba_xxx si existe
origen tiene el nombre del schema
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

Como se hace esto? alguna manera similar? procedimiento consulta

Publicado por leonardo_josue (1173 intervenciones) el 01/07/2019 15:37:08
Hola statham:

Hay varios detalles con tu consulta que hacen complicado darte una respuesta puntual:

1. No nos dices con qué BD's estás trabajando. Este dato es muy importante, ya que cada manejador de BD's tiene su propia sintaxis.
2. Si lo que pretendes es armar una consulta 'al vuelo', debes de trabajar con el concepto de sentencias preparadas, sin embargo el problema viene justo con el punto numero 1, al no decirnos con qué BD's estás trabajando no te podemos dar una respuesta puntual.

con SQL Server podrías probar esto:

https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-prepare-transact-sql?view=sql-server-2017

con MySQL podrías hacer esto:

https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html

Si usas otro manejador de BD's, puedes investigar la equivalencia de este tipo de sentencias.

Haz la prueba y nos comentas.

Saludos
Leo.
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
Imágen de perfil de statham
Val: 13
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Como se hace esto? alguna manera similar? procedimiento consulta

Publicado por statham (7 intervenciones) el 03/07/2019 09:22:07
Buenas,
Gracias por contestar, trabajo en mysql asi que probare algo de este estilo


1
2
3
4
5
6
7
SET @cartName = cartName;
SET @getTable1 =
  CONCAT("SELECT COUNT(*) INTO @deletedCount FROM `",
        REPLACE(tableName, '`', '``'),
        "` WHERE cartType=? AND deleted='1'");
PREPARE stmt1 FROM @getTable1;
EXECUTE stmt1 USING @cartName;
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
Imágen de perfil de statham
Val: 13
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Como se hace esto? alguna manera similar? procedimiento consulta

Publicado por statham (7 intervenciones) el 03/07/2019 11:13:19
sabrias decirme por que no entra en el if??
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
delimiter //
CREATE PROCEDURE pruebaset(IN origen VARCHAR(20))
BEGIN
 
DECLARE cont int(100);
 
set @sentencia = concat("select count(*) as cont from ",origen,".prueba "); -> esta query devuelve cont con 5000
 
prepare smt from @sentencia;
execute smt;
 
 
if @cont > 0 then
 
set @sentencia2 = concat("select * from ",origen,".prueba2 ");
prepare smt2 from @sentencia2;
execute smt2;
 
 
 
end if;
 
END//
delimiter ;
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
Imágen de perfil de statham
Val: 13
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Como se hace esto? alguna manera similar? procedimiento consulta

Publicado por statham (7 intervenciones) el 03/07/2019 12:03:58
SOLUCIONADO:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
delimiter //
CREATE PROCEDURE pruebaset(IN origen VARCHAR(20))
BEGIN
 
set @cont = 0;
 
set @sentencia = concat("select count(*) into @cont from ",origen,".prueba");
 
prepare smt from @sentencia;
execute smt;
 
 
if @cont > 0 then
 
set @sentencia2 = concat("select * from ",origen,".prueba2 ");
prepare smt2 from @sentencia2;
execute smt2;
 
 
 
end if;
 
END//
delimiter ;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar