Execute o codigo para criar a tabela tb_saldo.
CREATE TABLE tb_saldo ( fk_cliente int auto_increment primary key, nome varchar(60) not null, cpf varchar(20) not null unique, saldo decimal(10,2), dt_cadastro timestamp default current_timestamp ) Engine =InnoDB;
O código abaixo verifica se já existe uma procedure com o mesmo nome. Caso exista ele deleta a procedure e logo depois ele cria a sp_criar_usuario novamente.
GO DROP PROCEDURE IF EXISTS sp_criar_usuario; GO create procedure sp_criar_usuario(v_nome varchar(60), v_cpf char(20), v_valor decimal(10,2)) BEGIN IF ( (v_nome != '') AND (v_cpf != '') AND (v_valor >= 0) AND ((select count(cpf) from tb_saldo where cpf = v_cpf) = 0)) THEN INSERT INTO tb_saldo (nome,cpf,saldo) VALUES (v_nome, v_cpf,v_valor); ELSE SELECT 'Erro ao cadastrar!' AS Msg; END IF; END;
Crio a stored procedure sp_credito para adicionar credito.
GO DROP PROCEDURE IF EXISTS sp_credito; GO CREATE PROCEDURE sp_credito(v_cpf CHAR(20), v_valor DECIMAL(10,2)) BEGIN IF (SELECT count(cpf) FROM tb_saldo WHERE cpf = v_cpf) THEN UPDATE tb_saldo SET saldo = saldo + v_valor WHERE cpf = v_cpf; ELSE SELECT 'CPF não encontrado!' AS Msg; END IF; END;
Crio a stored procedure sp_transferencia para transferir credito entre usuários.
GO DROP PROCEDURE IF EXISTS sp_transferencia; GO CREATE PROCEDURE sp_transferencia(v_origem VARCHAR(20), v_destino VARCHAR(20), v_valor DECIMAL(10,2)) BEGIN if ((select count(cpf) FROM tb_saldo WHERE cpf = v_origem AND saldo >= v_valor) > 0 AND (SELECT count(cpf) FROM tb_saldo WHERE cpf = v_destino) > 0 ) THEN UPDATE tb_saldo SET saldo = saldo - v_valor WHERE cpf = v_origem; UPDATE tb_saldo SET saldo = saldo + v_valor WHERE cpf = v_destino; ELSE SELECT 'Erro!' AS Msg; END IF; END;
Crio a stored procedure sp_pks_clientes para retornar todas pk_cliente com o valor igual ou superior ao informado no argumento. O retorno é uma string separanda por virgula.
A função group_concat ira concatenar os registros de fk_cliente para o retorno.
GO DROP PROCEDURE IF EXISTS sp_pks_clientes; GO CREATE PROCEDURE sp_pks_clientes(v_valor DECIMAL(10,2)) BEGIN DECLARE v_pks_clientes varchar(200); SET v_pks_clientes = (SELECT group_concat(fk_cliente) AS codigos FROM tb_saldo WHERE saldo >= v_valor); SELECT v_pks_clientes; END;
Para chamar uma procedure é necessário usar “call sp_nome(argumentos);”.
Crio o usuário Maria.
call sp_criar_usuario('Maria','03984582901','50');
Crio o usuário João.
call sp_criar_usuario('João','12345678910','0');
Adiciono o valor para Maria
call sp_credito('03984582901',40);
Faço a transferencia
call sp_transferencia('03984582901','12345678910',40);
Verifico retorno de todas as pk_cliente em uma string com o valor igual ou superior ao informado na sp_usuarios.
call sp_usuarios(20);
Verifico se os valores estão corretos
select * from tb_saldo
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
-
Douglas
