SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
CREATE TABLE conta_corrente ( cc_codigo_conta VARCHAR(12) PRIMARY KEY, cc_nome_clente VARCHAR(90) NOT NULL, cc_saldo DECIMAL(15,2) NOT NULL CHECK (cc_saldo >= 0) ); INSERT INTO conta_corrente VALUES ('001.012345-6', 'João', 4000.00), ('001.123456-7', 'Maria', 3000.00), ('001.234567-8', 'José', 2000.00), ('001.345678-9', 'Ana', 1000.00), ('001.456789-0', 'Pedro', 0.00); CREATE TABLE transferencia ( tr_codigo_operacao INT PRIMARY KEY AUTO_INCREMENT, tr_codigo_conta_origem VARCHAR(12) NOT NULL, tr_codigo_conta_destino VARCHAR(12) NOT NULL, tr_valor_transferido DECIMAL(15,2) NOT NULL, tr_datahora_transf DATETIME(6) DEFAULT CURRENT_TIMESTAMP(6), CHECK ( tr_codigo_conta_destino <> tr_codigo_conta_origem), CHECK ( tr_valor_transferido >= 0 ), FOREIGN KEY ( tr_codigo_conta_origem ) REFERENCES conta_corrente ( cc_codigo_conta ), FOREIGN KEY ( tr_codigo_conta_destino ) REFERENCES conta_corrente ( cc_codigo_conta ) ); -- Escreva um gatilho que ANTES de INSERIR um registro na tabela "transferencia": -- - atualize a tabela "conta_corrente" para subtrair o valor transferido do saldo usando a conta de origem na condição (where). -- - atualize a tabela "conta_corrente" para somar o valor transferido no saldo usando a conta de destino na condição (where). DELIMITER $$ CREATE TRIGGER gatilho_transf BEFORE INSERT ON transferencia FOR EACH ROW BEGIN -- tirando dinheiro da conta de origem UPDATE conta_corrente SET cc_saldo = cc_saldo - NEW.tr_valor_transferido WHERE cc_codigo_conta = NEW.tr_codigo_conta_origem; -- colocando dinheiro da conta de destino UPDATE conta_corrente SET cc_saldo = cc_saldo + NEW.tr_valor_transferido WHERE cc_codigo_conta = NEW.tr_codigo_conta_destino; END $$ -- DELIMITER ; -- Escreva uma procedure chamada sp_transferencia que realize a transferência de valores entre contas. -- A procedure deve receber os seguinte parâmetros de entrada (IN): -- - o código da conta de origem VARCHAR(12) - conta de onde sai o dinheiro. -- - o código da conta de destino VARCHAR(12) - conta para onde vai o dinheiro. -- - o valor transferido entre as contas DECIMAL(15,2). -- Os dados recebidos deverão simplesmente ocasionar uma nova linha na tabela "transferencia". CREATE PROCEDURE sp_transferencia (IN cc_origem VARCHAR(12), IN cc_destino VARCHAR(12), IN valor DECIMAL(15,2)) BEGIN INSERT INTO transferencia (tr_codigo_operacao, tr_codigo_conta_origem, tr_codigo_conta_destino, tr_valor_transferido, tr_datahora_transf) VALUES (default, cc_origem, cc_destino, valor, now() ); END $$ DELIMITER ; CALL sp_transferencia ('001.012345-6', '001.123456-7', '100.00'); select * from transferencia;
Stuck with a problem? Got Error? Ask ChatGPT!
Copy Clear