Bases de Datos - Duda con procedimientos almacenados

 
Vista:

Duda con procedimientos almacenados

Publicado por Dan (1 intervención) el 12/08/2013 16:36:47
Hola a todos, tengo dos preguntas respecto a procedimientos almacenados en MySQL:

1 - He estado investigando y he visto que en SQL 2003 (MySQL) no hay nada como la instrucción '%type' (para declarar variables del tipo de una columna de una tabla, sin conocer nosotros el tipo de dicha columna a priori) de PL/SQL (oracle). Mi pregunta es como se puede "imitar" esto en SQL 2003.

2 - La segunda pregunta, he hecho un procedimiento almacenado para insertar unas filas en unas determinadas tablas (para practicar porque estoy aprendiendo). El caso es que se ejecuta bien, pero en el visor de resultados me saltan 2 warnings diciéndome que dicho sp no ha hecho nada, ni insertar, ni updatear.. nada. Pero si hago un select en las tablas pertintentes si que se han insertado los datos, y no entiendo por qué pasa esto. Adjunto el código del sp:

[spoiler]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use trenes;
 
 
delimiter //
 
create function insTren(id int(11),don int(11),lleg int(11),model varchar(20),fCom date,maxVag int(11),
  coc int(11),trs int(11),vgs int(11),nomEst varchar(15)) returns bool
not deterministic
modifies sql data
begin
 
  declare b1 bool default true;
  declare ESTACION int;
  declare COCHERA int;
 
  select id from estacion where id=don into ESTACION;
  select estacion from cochera where estacion=coc into COCHERA;
 
  if (don is null and lleg is not null) or (don is not null and lleg is null) then
     set b1=false;
  else
    if ESTACION is null then
      insert into estacion(id,nombre) values (don,nomEst);
    end if;
    if COCHERA is null then
      insert into cochera values (coc,trs,vgs);
    end if;
    insert into tren values(id,don,lleg,model,maxVag,coc,fCom);
 
  end if;
 
  return b1;
 
end;
//
 
delimiter ;
 
select insTren(100,1,5,'XV88',date(now()),10,1,3,60,'Est1') from dual;

[spoiler]

Muchas gracias.
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