Stored procedure mysql

galera preciso criar uma stored procedure que leia valores de uma tabela A e de uma tabela B e dependendo da condição insira na tabela C

tipow… where ((tabelaA.data = tabelab.data) and (tabelaa.nome = tabelab.nome))
se for true insere na tabela c

ai que tah o problema nao sei como capturar os valores das tabela A e B e armazenar em uma variavel e fazer o insert na C

jah tenho o seguinte codigo

DELIMITER $$

DROP PROCEDURE IF EXISTS teste.carga_c $$
CREATE PROCEDURE carga_c()

begin

-- variaveis que serao utilizadas
  DECLARE existe_mais_linhas INT DEFAULT 0;
  DECLARE var_id int;
  DECLARE var_nome varchar(255);
  DECLARE var_sobrenome varchar(255);
  DECLARE var_dat varchar(255);

-- Definição do cursor
 DECLARE varreTabela CURSOR FOR SELECT dattaba FROM tabelaa;
-- Definição da variável de controle de looping do cursor
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

-- Abertura do cursor
  OPEN varreTabela;

  -- Looping de execução do cursor
  meuLoop: LOOP
  FETCH varreTabela INTO var_dat;

  -- Controle de existir mais registros na tabela
  IF existe_mais_linhas = 1 THEN
  LEAVE meuLoop;
  END IF;

insert into tabelac SET idc =var_id
                        ,nomea =var_nome
                        ,sobrenome = var_sobrenome
                        ,datc = var_dat;

  -- Retorna para a primeira linha do loop
  END LOOP meuLoop;

end $$

DELIMITER ;

alguem sabe como posso resolver isso?

vlws

consegui melhorias no codigo consegui criar a condição agora soh falta pegar os valores da tabelaA e B e jogar na c quando a condição for true

DELIMITER $$

DROP PROCEDURE IF EXISTS teste.carga_c $$
CREATE PROCEDURE carga_c()

begin

-- variaveis que serao utilizadas
  DECLARE existe_mais_linhas INT DEFAULT 0;
  DECLARE var_id int;
  DECLARE var_nome varchar(255);
  DECLARE var_sobrenome varchar(255);
  DECLARE var_dat varchar(255);

-- Definição do cursor
 DECLARE varreTabela CURSOR FOR SELECT dattaba FROM tabelaa
   inner JOIN tabelab ON tabelaa.dattaba=tabelab.dat
       where ((tabelaa.dattaba = tabelab.dat) and (tabelaa.nomea = tabelab.nomeb));

-- Definição da variável de controle de looping do cursor
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

-- Abertura do cursor
  OPEN varreTabela;

  -- Looping de execução do cursor
  meuLoop: LOOP
  FETCH varreTabela INTO var_dat;

  -- Controle de existir mais registros na tabela
  IF existe_mais_linhas = 1 THEN
  LEAVE meuLoop;
  END IF;

insert into tabelac SET idc =var_id
                        ,nomea =var_nome
                        ,sobrenome = var_sobrenome
                        ,datc = var_dat;

  -- Retorna para a primeira linha do loop
  END LOOP meuLoop;

end $$

DELIMITER ;

alguem ai sabe como resolve esse problema?

vlws

Eu fazia bastante desses desafios no sybase, eu estou sem mysql pra testar isso ai, mas veja se é possivel fazer isso aqui

INSERT INTO tabelac
SELECT dattaba 
FROM tabelaa
inner JOIN tabelab ON tabelaa.dattaba=tabelab.dat
where ((tabelaa.dattaba = tabelab.dat) and (tabelaa.nomea = tabelab.nomeb));

Existia uma opção de incluir diretamente o resultado de uma query direto em outra tabela, se houver registros consequentemente serão inclusos, caso não existam não acontece nada.

Não se assuste com a solução, nós controlavamos a transação usando rowcount(linhas afetadas), para não explodir o segmento de log.

Abraço!

pois eh consegui fazer essa parte ai tipow… a condição

o problema agora é

tipow… preciso que uma variavel receba o valor do campo

exemplo

var_nome = campo tabela A
var_outro = campo tabela B

nao toh conseguindo fazer isso agora

sabe como poderia resolver??

se eu conseguir mato a charada

vlws pela forca amigo

A estrutura da tabela C é formada pela tabela A e B? Eu entendi direito

no select dentro do insert vc não poderia fazer isso aqui?

insert into tabela_c
tabela_a.campo_1
tabela_b.campo_2
tabela_a.campo_3

nao eh possivel amigo mysql nao suporta, testei aki e nda tenho q passar para variaveis mesmo

sabe como posso fazer?

olha amigo
jeito ate acredito que tenha
mas particularmente eu prefiro
utilizar PostgreSQL para esse tipo de aplicação
ele é excelente
você pode trabalhar com varias linguagens, como o próprio java
para criar funções e triggers

amigo o topico eh sobre mysql

fiko grato por suas recomendacoes

alguem ai sabe como posso resolver esse problem em mysql?

vlws

Tem que ser MySQL 5 ou superior.

sim a versao que estou utilizando eh a 5.0

ninguem?

eh possivel fazer isso em mysql???

quero que a variavel A receba o valor do campo A da tabela A
e que a variavel B receba o valor do campo B da tabela B

eh possivel?

ou mysql tem mais essa limitação

vlws

bom amigos consegui resolver o problema, no meu caso utilizei dois cursores nao sei se foi a melhor forma mais no momento atende a demanda

o codigo ficou assim

DELIMITER $$

DROP PROCEDURE IF EXISTS `teste`.`carga_c` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `carga_c`()
begin

-- variaveis que serao utilizadas
  DECLARE existe_mais_linhas INT DEFAULT 0;
  DECLARE var_id int;
  DECLARE var_nome varchar(255);
  DECLARE var_sobrenome varchar(255);
  DECLARE var_dat varchar(255);

-- Definição do cursor
 DECLARE varreTabela CURSOR FOR SELECT dattaba, nomea FROM tabelaa
   inner JOIN tabelab ON tabelaa.dattaba=tabelab.dat
       where ((tabelaa.dattaba = tabelab.dat) and (tabelaa.nomea = tabelab.nomeb));

DECLARE cur2 CURSOR FOR SELECT sobreNome FROM tabelab
inner JOIN tabelaa ON tabelab.dat=tabelaa.dattaba
       where ((tabelab.dat = tabelaa.dattaba) and (tabelab.nomeb = tabelaa.nomea));

-- Definição da variável de controle de looping do cursor
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET existe_mais_linhas=1;

-- Abertura do cursor
  OPEN varreTabela;
  open cur2;

  -- Looping de execução do cursor
  meuLoop: LOOP
  FETCH varreTabela INTO var_dat, var_nome;
  fetch cur2 into var_sobrenome;

  -- Controle de existir mais registros na tabela
  IF existe_mais_linhas = 1 THEN
  LEAVE meuLoop;
  END IF;



insert into tabelac SET idc =var_id
                        ,nomea =var_nome
                        ,sobrenome =var_sobrenome
                        ,datc = var_dat;

  -- Retorna para a primeira linha do loop
  END LOOP meuLoop;


end $$

DELIMITER ;

existe uma outra forma de passar o conteudo de um campo para a variavel, exemplo

SELECT column[,…] INTO variable[,…] table_expression

SELECT id,data INTO x,y FROM test.t1 LIMIT 1;

fonte: http://xoopscube.com.br/xcDocs/mysql/ch11.php#variables-in-stored-procedures

espero q ajude os proximos

vlws

bom saber isso
valew