Olá, estou tentando criar um CURSOR para fins didáticos que atualiza um campo Char na minha tabela ESCOLA conforme a quantidade de níveis de ensino na tabela ESCOLA_NIVELENSINO.
Qualquer ajuda é bem vinda pois a ideia é eu fixar bem o conhecimento, vou deixar abaixo o código que eu estava tentando fazer e também as tabelas com os valores de inserts.
BEGIN TRANSACTION
DECLARE @CODIGO_ESCOLA INT
DECLARE @DESCRICAO VARCHAR(50)
DECLARE @CODIGO_CIDADE INT
DECLARE @NIVEL CHAR(1)
DECLARE CURSOR_ATIVIDADE_INTEGRADORA CURSOR FOR
SELECT
CODIGO_ESCOLA,
DESCRICAO,
CODIGO_CIDADE,
NIVEL
FROM ESCOLA
OPEN CURSOR_ATIVIDADE_INTEGRADORA
FETCH NEXT FROM CURSOR_ATIVIDADE_INTEGRADORA INTO
@CODIGO_ESCOLA, @DESCRICAO, @CODIGO_CIDADE, @NIVEL
WHILE @@Fetch _STATUS = 0
BEGIN
DECLARE CURSOR_COD_ESCOLA_ENSINO CURSOR FOR
SELECT ENV.CODIGO_NIVEL_ENSINO
FROM ESCOLA_NIVELENSINO ENV
INNER JOIN ESCOLA E
ON ENV.CODIGO_ESCOLA = E.CODIGO_ESCOLA
OPEN CURSOR_COD_ESCOLA_ENSINO
IF @CODIGO_NIVEL_ENSINO < 3
UPDATE ESCOLA
SET NIVEL = @NIVEL
WHERE CODIGO_NIVEL_ENSINO = @CODIGO_NIVEL_ENSINO
ELSE
IF @CODIGO_NIVEL_ENSINO >= 3 AND @CODIGO_NIVEL_ENSINO <=4
UPDATE ESCOLA
SET NIVEL = @NIVEL
WHERE CODIGO_NIVEL_ENSINO = @CODIGO_NIVEL_ENSINO
ELSE
UPDATE ESCOLA
SET NIVEL = @nivel
WHERE CODIGO_NIVEL_ENSINO = @CODIGO_NIVEL_ENSINO
FETCH NEXT FROM CURSOR_EXERCICIO_GRUPO INTO
@CODIGO, @nome , @VALOR, @ESTOQUE
END
CLOSE CURSOR_ATIVIDADE_INTEGRADORA
DEALLOCATE CURSOR_ATIVIDADE_INTEGRADORA
SELECT * FROM ESCOLA
ROLLBACK
My tables in database there are:
CREATE TABLE ESCOLA
(
CODIGO_ESCOLA BIGINT NOT NULL,
DESCRICAO VARCHAR(50),
CODIGO_CIDADE BIGINT,
CONSTRAINT PK_CODIGO_ESCOLA PRIMARY KEY(CODIGO_ESCOLA),
CONSTRAINT FK_CIDADE FOREIGN KEY(CODIGO_CIDADE) REFERENCES CIDADE(CODIGO_CIDADE)
)
CREATE TABLE ESCOLA_NIVELENSINO
(
CODIGO_ESCOLA BIGINT,
CODIGO_NIVEL_ENSINO BIGINT,
CONSTRAINT PK_CODESCOLA_CODNVENSINO PRIMARY KEY(CODIGO_ESCOLA, CODIGO_NIVEL_ENSINO),
CONSTRAINT FK_CODIGO_ESCOLA FOREIGN KEY(CODIGO_ESCOLA) REFERENCES ESCOLA(CODIGO_ESCOLA),
CONSTRAINT FK_CODIGO_NIVEL_ENSINO FOREIGN KEY(CODIGO_NIVEL_ENSINO) REFERENCES NIVEL_ENSINO(CODIGO_NIVEL_ENSINO)
)
CREATE TABLE NIVEL_ENSINO
(
CODIGO_NIVEL_ENSINO BIGINT NOT NULL,
DESCRICAO VARCHAR(50),
CONSTRAINT PK_NIVEL_ENSINO PRIMARY KEY(CODIGO_NIVEL_ENSINO)
)
The inserts values:
INSERT INTO NIVEL_ENSINO VALUES
(1,'Ensino fundamental'),
(2,'Ensino Médio'),
(3,'Ensino Técnico'),
(4,'Ensino Superior')
INSERT INTO ESCOLA VALUES
(1, 'ufrj ', 1),
(2, 'ufrgs ', 4),
(3, 'USP ', 3),
(4, 'Escolinha do Professor Raimundo', 10),
(5, 'Escola do Rock', 7)
INSERT INTO ESCOLA_NIVELENSINO VALUES
(1, 3),
(1, 4),
(2, 3),
(2, 4),
(3, 3),
(4, 1),
(4, 2),
(4, 3),
(5, 1),
(5, 2)