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