Buscar

AULA 10 CREATE PROCEDURE SP CALCULA IR

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

--ROTEIRO DE NOSSA AULA SOBRE CURSOR/VERTOR/ARRAY 
--MODELO FÍSICO A SER UTILIZADO 
 
 
 
 
--INIALMENTE CRIAMOS A TABELA QUE SERÁ UTILIZADA PARA A BUSCA DA ALÍQUOTA DE IR 
--CORRESPONDENTE AO SALÁRIO DO FUNCIONÁRIO 
--PARA CRIÁ-LA TEMOS: 
CREATE TABLE ALIQUOTA_IR 
(ALIQUOTA_ID INT IDENTITY PRIMARY KEY NOT NULL, 
ALIQUOTA INT NULL, 
VLR_INICIO NUMERIC(18,2) NULL, 
VLR_FINAL NUMERIC(18,2) NULL) 
 
--APÓS A CRIAÇÃO DA MESMA PODEMOS ENTÃO INCLUIR OS DADOS ABAIXO: 
INSERT INTO ALIQUOTA_IR VALUES (0,1,3000) 
INSERT INTO ALIQUOTA_IR VALUES (10,3001,6000) 
INSERT INTO ALIQUOTA_IR VALUES (15,6001,10000) 
INSERT INTO ALIQUOTA_IR VALUES (20,10001,100000) 
 
--PARA CRIAÇÃO DA PROCEDURE USAMOS CREATE E DEPOIS ALTER PARA ALTERÁ-LA 
CREATE PROCEDURE SP_CALCULA_IR 
 
--PARA CADA MÊS QUE FORMOS FAZER O CÁLCULO DO IR TEMOS QUE INFORMAR O MÊS E ANO, --PARA ISSO TEMOS QUE CRIAR OS PARÂMETROS @MES E @ANO PARA RECEBER OS DADOS 
--NECESSÁRIOS PARA O PROCESSAMENTO DA PROCEDURE 
@MES INT, @ANO INT 
 
AS 
--PARA QUE NÃO SEJA APRESENTADO LINHAS DE INFORMAÇÕES DURANTE A EXECUÇAO DA 
--PROCEDURE LIGAMOS NÃO CONTAGEM 
SET NOCOUNT ON 
 
--PRECISAMOS VERIFICAR SE A TABELA ESTÁ CRIADA NO BANCO DE DADOS 
--ASSIM ACESSMOS A TABELA DO SISTEMA --SYSOBJECTS-- E NELA É GRAVADA 
--TUDO O CRIAMOS NO BANCO DE DADOS, SEJA TABELAS, PROCEDURES E ETC. 
--EXISTE O OBJETO COM NOME IR? 
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME = 'IR') 
 
--SE EXISTIR ENTRA AQUI 
--TODO BLOCO DE IF E WHILE USAMOS O INÍCIO E FIM (BEGIN/END) 
 BEGIN 
 
--COMO A TABELA JÁ EXISTE VAMOS ENTÃO ELIMINAR OS DADOS SE HOUVEREM PARA NÃO 
--TERMOS DUPLICIDADE DE DADOS COM OS DADOS DOS PARÂMETROS INFORMADOS POR 
--EXEMPLO: EXECUTE SP_CALCULA_IR 10,2015 
 DELETE IR WHERE MES = @MES AND ANO = @ANO 
 END 
 
ELSE 
 
--SE NÃO EXISTIR A TABELA, ENTÃO A CRIAMOS. 
 BEGIN 
 CREATE TABLE IR 
 (IR_ID INT IDENTITY PRIMARY KEY NOT NULL, 
 NM_FUNCIONARIO VARCHAR(80) NULL, 
 SALARIO NUMERIC (18,2) NULL, 
 ALIQUOTA INT NULL, 
 DESCONTO_IR NUMERIC (18,2) NULL, 
 SALARIO_LIQUIDO NUMERIC (18,2) NULL, 
 MES INT NULL, 
 ANO INT NULL) 
 END 
 
--PARA NOSSO PROCESSAMENTO IDENTIFICAMOS QUE PRECISAREMOS DE VARIÁVEIS DE 
--MEMÓRIA PARA ARMAZENAR O IR_ID (PK) DA TABELA IR, O VALOR DO SALÁRIO E A 
--ALÍQUOTA QUE USAREMOS PARA CALCULAR O DESCONTO DE IR OS TIPOS DAS VARIÁVEIS 
--DEPENDEM DAS TABELAS ENVOLVIDAS ASSIM É NECESSÁRIO VERIFICAR NO MODELO FÍSICO 
DECLARE @IR_ID INT,@SALARIO NUMERIC (18,2), @ALIQUOTA INT 
 
--COMO É UMA TABELA FATO,IR, (DATAMART) NÃO PERTENCE AO BANCO COORPORATIVO VAMOS 
--A INCLUIR OS DADOS QUE PRECISAMOS DA TABELA FUNCIONÁRIO, E OS DADOS QUE SERÁO 
--CALCULADOS DEPOIS CADASTRAMOS COM ZEROS, QUE É O CASO DA ALÍQUOTA, DO 
--DESCONTO_IR, E DO SALARIO_LIQUIDO COMO ABAIXO 0,0,0 
INSERT INTO IR SELECT NM_FUNCIONARIO, SALARIO,0,0,0,@MES, @ANO FROM FUNCIONARIO 
 
--VAMOS CRIAR UM CURSOR (ARRAY/VETOR) PARA RECEBER OS DADOS QUE PRECISAMOS PARA 
--REALIZAR OS CÁLCULOS ASSIM APÓS TERMOS CADASTRADOS OS DADOS, TEMOS QUE BUSCAR 
--O VALOR DA ALÍQUOTA PARA CALCULAR O DESCONTO_IR E POR FIM O SALARIO_LIQUIDO, 
--MAS SOMENTE NO MÊS E ANO INFORMADO, POR ISSO TEMOS QUE USAR A CLÁUSULA 
--WHERE ANO = @ANO AND MES = @MES 
DECLARE PESQUISA_IR CURSOR 
FOR SELECT IR_ID FROM IR WHERE ANO = @ANO AND MES = @MES 
 
--APÓS A DECLARAÇÃO DO CURSOR VAMOS ABRI-LO 
OPEN PESQUISA_IR 
 
--TEMOS QUE COLOCAR O PONTEIRO DO CURSOR/VETOR NA PRIMEIRA LINHA ASSIM TEMOS O 
--COMANDO ABAIXO PERCEBA QUE PARA FAZER ISSO PRECISAMOS DE UMA VARIÁVEL DE 
--MEMÓRIA, POR ISSO A CRIAMOS ANTERIORMENTE SE HOUVER MAIS DE UMA COLUNA NO 
--CURSOR TEMOS CRIAR TANTAS COLUNAS QUANTAS NECESSITAMOS PARA NOSSO 
--PROCESSAMENTO, NESTE CASO SÓ PRECISAMOS DO IR_ID 
FETCH PESQUISA_IR INTO @IR_ID 
 
--COMEÇAMOS O LAÇO DE REPETIÇÃO COM A CONDIÇÃO FAÇA ENQUANTO O STATUS DE FIM DAS 
--LINHAS ARMEZANADAS NO CURSOR FOR FALSO, OU SEJA =0, QUANDO FOR 1 CHEGOU ATÉ A 
--ÚLTIMA LINHA 
WHILE @@FETCH_STATUS = 0 
 BEGIN 
 
--ENTENDA QUE TEMOS QUE TER NA MEMÓRIA O VALOR DO SALÁRIO PARA BUSCARMOS A 
--ALÍQUOTA NA OUTRA TABELA (ALIQUOTA_IR) ASSIM DA PRIMEIRA LINHA DO CURSOR 
--SELECIONAMOS O SALÁRIO COM BASE NA PK IR_ID 
 SELECT @SALARIO = SALARIO FROM IR WHERE IR_ID = @IR_ID 
 
--COM O SALÁRIO ARMAZENADO NA VARIÁVEL DE MEMÓRIA @SALARIO, FAZEMOS A BUSCA DA 
--ALÍQUITA CORRESPONDENTE, E ARMAZENAMOS @ALIQUITA, COM A CONDIÇÃO ABAIXO: 
--WHERE @SALARIO>= VLR_INICIAL AND @SALARIO<= VLR_FINAL 
--LEMBRE-SE QUE O INTERVALO É FECHADO ASSIM TEMOS QUE USAR AND, PARA VALORES 
--EXTREMADOS USAMOS OR EXEMPLO SALARIO > 10000 OR SALARIO < 5000 
 SELECT @ALIQUOTA = ALIQUOTA FROM ALIQUOTA_IR WHERE @SALARIO>= VLR_INICIAL AND @SALARIO<= VLR_FINAL 
 
--AGORA TEMOS O QUE PRECISAMOS PARA FAZER OS CÁLCULOS NECESSÁRIO ASSIM VAMOS 
--UTILIZAR OS VALORES ZERADOS DE DESCONTO_IR,ALIQUOTA E SALARIO_LIQUIDO MUITO 
--IMPORTANTE É QUE AGORA VOLTAMOS PARA A TABELA IR PARA FAZER O UPDATE, E PARA 
--NÃO ALTERAR O REGISTRO ERRADO USAMOS A PK, POR ISSO QUE ARMAZENAMOS A PK NA 
--VARIÁVEL DE MEMÓRIA @IR_ID ANTES DE IR PARA A TABELA DE IR 
 UPDATE IR SET DESCONTO_IR = SALARIO * @ALIQUOTA/100, ALIQUOTA = @ALIQUOTA, SALARIO_LIQUIDO = SALARIO - SALARIO * @ALIQUOTA/100 
 
--FEITO A ATUALIZAÇÃO NA LINHA APONTADA DO CURSO VAMOS AGORA PARA A PRÓXIMA, 
--NOTE QUE É O MESMO COMANDO QUE ESTÁ ANTES DO INÍCIO DO LAÇO DE REPETIÇÃO 
--WHILE (SEMPRE SERÁ ASSIM) 
 FETCH PESQUISA_IR INTO @IR_ID 
 END 
--APÓS O FIM DO LAÇO DE REPETIÇÃO PODEMOS FECHAR (CLOSE) O CURSO QUE 
--PREVIAMENTE ABRIAMOS (OPEN) 
 CLOSE PESQUISA_IR 
 
--POR FIM TIREMOS O CURSOR DA MEMÓRIA 
 DEALLOCATE PESQUISA_IR 
 
--ESTE SELECT É SOMENTE PARA VER O RESULTADO APÓS O PROCESSAMENTO DA PROCEDURE 
--DEPOIS O RETIRAREMOS 
SELECT * FROM IR WHERE ANO = @ANO AND MES = @MES 
 
 
 
--SELECT * FROM FUNCIONARIO 
--SP_CALCULA_IR 
--SELECT * FROM IR 
 
--CREATE TABLE ALIQUOTA_IR 
--(ALIQUOTA_ID INT IDENTITY PRIMARY KEY NOT NULL, 
--ALIQUOTA INT NULL, 
--VLR_INICIO NUMERIC(18,2) NULL, 
--VLR_FINAL NUMERIC(18,2) NULL) 
 
--INSERT INTO ALIQUOTA_IR VALUES (0,1,3000) 
--INSERT INTO ALIQUOTA_IR VALUES (10,3001,6000) 
--INSERT INTO ALIQUOTA_IR VALUES (15,6001,10000) 
--INSERT INTO ALIQUOTA_IR VALUES (20,10001,100000) 
 
--CREATE TABLE dbo.IR( 
--IR_ID int IDENTITY(1,1) NOT NULL, 
--NM_FUNCIONARIO varchar(80) NULL, 
--SALARIO numeric(18, 2) NULL, 
--ALIQUOTA INT NULL, 
--DESCONTO_IR numeric(18, 2) NULL, 
--SALARIO_LIQUIDO numeric(18, 2) NULL) 
 
 
 
ALTER PROCEDURE SP_CALCULA_IR 
AS 
SET NOCOUNT ON 
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name = 'IR') 
 BEGIN 
 TRUNCATE TABLE IR 
 END 
ELSE 
 BEGIN 
 CREATE TABLE IR (IR_ID INT IDENTITY PRIMARY KEY NOT NULL, 
 NM_FUNCIONARIO VARCHAR(80) NULL, 
 SALARIO NUMERIC(18,2) NULL, 
 DESCONTO_IR NUMERIC(18,2), 
 SALARIO_LIQUIDO NUMERIC(18,2)) 
 END 
 
INSERT INTO IR SELECT NM_FUNCIONARIO,SALARIO,0,0,0 FROM FUNCIONARIO 
 
DECLARE @INICIO INT,@FIM INT,@IR_ID INT,@SALARIO NUMERIC(18,2),@ALIQUOTA INT 
 
SELECT @INICIO=MIN(IR_ID),@FIM=MAX(IR_ID) FROM IR 
 
 
WHILE @INICIO <= @FIM 
 BEGIN 
 SELECT @IR_ID=IR_ID, @SALARIO = SALARIO FROM IR WHERE IR_ID = @INICIO 
 SELECT @ALIQUOTA=ALIQUOTA FROM ALIQUOTA_IR WHERE VLR_INICIO <= @SALARIO AND VLR_FINAL >= @SALARIO 
 UPDATE IR SET DESCONTO_IR = SALARIO * @ALIQUOTA / 100,SALARIO_LIQUIDO = SALARIO - (SALARIO * @ALIQUOTA / 100),ALIQUOTA=@ALIQUOTA WHERE IR_ID = @IR_ID 
 SET @INICIO = @INICIO + 1 
 END 
 
SELECT * FROM IR 
 
 
CREATE PROCEDURE SP_CURSOR_FUNCIONARIO_IR 
AS 
DECLARE @IR_ID INT,@ALIQUOTA INT,@SALARIO NUMERIC(18,2) 
 
 
DECLARE PESQUISA_FUNCIONARIO CURSOR 
FOR 
SELECT IR_ID,SALARIO FROM IROPEN PESQUISA_FUNCIONARIO 
FETCH PESQUISA_FUNCIONARIO INTO @IR_ID,@SALARIO 
 
WHILE @@FETCH_STATUS = 0 
 BEGIN 
 SELECT @SALARIO=SALARIO FROM IR WHERE IR_ID = @IR_ID 
 
 SELECT @ALIQUOTA=ALIQUOTA FROM ALIQUOTA_IR WHERE VLR_INICIO<= 
 @SALARIO AND VLR_FINAL >= @SALARIO 
 
 UPDATE IR SET DESCONTO_IR = SALARIO * @ALIQUOTA/100, 
 SALARIO_LIQUIDO = SALARIO - (SALARIO * @ALIQUOTA/100), 
 ALIQUOTA=@ALIQUOTA WHERE IR_ID = @IR_ID 
 
 
 FETCH PESQUISA_FUNCIONARIO INTO @IR_ID,@SALARIO 
 END 
CLOSE PESQUISA_FUNCIONARIO 
DEALLOCATE PESQUISA_FUNCIONARIO 
 
-- 
 
alter PROCEDURE SP_IR 
@MES INT, @ANO INT 
AS 
SET NOCOUNT ON 
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME = 'IR') 
 BEGIN 
 DELETE IR WHERE MES = @MES AND ANO = @ANO 
 END 
ELSE 
 BEGIN 
 CREATE TABLE IR 
 (IR_ID INT IDENTITY PRIMARY KEY NOT NULL, 
 NM_FUNCIONARIO VARCHAR(80) NULL, 
 SALARIO NUMERIC (18,2) NULL, 
 ALIQUOTA INT NULL, 
 DESCONTO_IR NUMERIC (18,2) NULL, 
 SALARIO_LIQUIDO NUMERIC (18,2) NULL, 
 MES INT NULL, 
 ANO INT NULL) 
 END 
 
DECLARE @IR_ID INT,@SALARIO NUMERIC (18,2), @ALIQUOTA INT 
 
INSERT INTO IR SELECT NM_FUNCIONARIO, SALARIO,0,0,0,@MES, @ANO FROM FUNCIONARIO 
 
DECLARE PESQUISA_IR CURSOR 
FOR SELECT IR_ID FROM IR WHERE ANO = @ANO AND MES = @MES 
OPEN PESQUISA_IR 
 
FETCH PESQUISA_IR INTO @IR_ID 
 
WHILE @@FETCH_STATUS = 0 
 BEGIN 
 SELECT @SALARIO = SALARIO FROM IR WHERE IR_ID = @IR_ID 
 SELECT @ALIQUOTA = ALIQUOTA FROM ALIQUOTA_IR WHERE @SALARIO>= VLR_INICIAL AND @SALARIO<= VLR_FINAL 
 UPDATE IR SET DESCONTO_IR = SALARIO * @ALIQUOTA/100, ALIQUOTA = @ALIQUOTA, SALARIO_LIQUIDO = SALARIO - SALARIO * @ALIQUOTA/100 
 FETCH PESQUISA_IR INTO @IR_ID 
 END 
 CLOSE PESQUISA_IR 
 DEALLOCATE PESQUISA_IR 
SELECT * FROM IR WHERE ANO = @ANO AND MES = @MES

Continue navegando