Como usar CURSOR em Stored Procedures - Curso de SQL - Aula 40

Поделиться
HTML-код
  • Опубликовано: 21 янв 2025
  • #cfbcursos #sql #mysql #sqlite
    Cursor em Stored Procedures - Curso de SQL - Aula 40
    Na aula de hoje do curso de SQL vamos continuar aprendendo sobre Stored Procedures. Vamos aprender sobre como usar CURSOR em loops para trabalhar com os registros retornados por uma consulta.
    SQL (Structured Query Language), ou Linguagem de Consulta Estruturada, é a linguagem de pesquisa declarativa padrão para banco de dados relacional. Muitas das características originais do SQL foram inspiradas na álgebra relacional.
    Em nosso curso de SQL você vai aprender os segredos e as técnicas de utilização do SQL.
    Link deste vídeo: • Como usar CURSOR em St...
    Site do canal
    cfbcursos.com.br
    Colabore com nosso canal:
    Qualquer valor usando o PIX: pixcfbcursos@gmail.com
    Página de cursos no site
    cfbcursos.com.b...
    e-mails:
    perguntas@cfbcursos.com.br
    canalfessorbruno@gmail.com
    Outros Links:
    Vídeo Colabore com nosso canal: • Video
    Canal youtube: / canalfessorbruno
    Instagram: cfbcursos ou @cfbcursos
    Twitter: @cfbcursos
    Facebook: canalfessorbruno
    RUclips: / canalfessorbruno
    vakinhas
    www.vakinha.co...
    www.vakinha.co...
    Produção: Bruno P. Campos / CFB Cursos
    Edição: Bruno P. Campos / CFB Cursos
    Licença padrão do RUclips

Комментарии • 24

  • @feehhs2
    @feehhs2 Год назад +1

    Muito boa sua explicação!

  • @sandysk8
    @sandysk8 Год назад

    Estava procurando algo assim, muito obrigado.

  • @Dark29132
    @Dark29132 Год назад

    Parabéns pelo trabalho

  • @felicidadeetudonavida3434
    @felicidadeetudonavida3434 3 года назад +2

    Gosto muito das suas aulas meu brother 🙏👏👏👏👏👏

  • @AndersonOliveira-qb9hx
    @AndersonOliveira-qb9hx 3 года назад

    TOP

  • @sandysk8
    @sandysk8 Год назад

    Valeu!

  • @suitesistemas8833
    @suitesistemas8833 Год назад

    obrigado

  • @77mcouto
    @77mcouto 3 года назад

    show

  • @gabrielsamaniego5678
    @gabrielsamaniego5678 3 года назад +1

    Muito BOM o conteudo!!! parabens ... vc tem algum exemplo de Como usar CURSOR em Stored Procedures que ja existe para UPDATE de dados ? o SP precisa de (ID varchar, old datee new date)....Obrigado!!

  • @Juniordigital
    @Juniordigital 3 года назад +2

    bom, reassistindo aqui acho q entendi q o cursor é tipo a seleção da parada, cursor mesmo, entendi raciocinando visualmente

  • @Loucrazy1
    @Loucrazy1 3 года назад

    o q q é esse handler?

  • @eduardodocarmo8420
    @eduardodocarmo8420 3 года назад +4

    Professor, eu rodei aqui com sum também e verifiquei que o loop está somando 2x o último valor; acrescentei no set soma = soma + vv um if se o fimloop != 0 o miolo do while...do...end...while ficou assim " FETCH MEUCURSOR INTO VV;
    IF (FIMLOOP != 1) THEN
    SET SOMA = SOMA + VV;
    END IF;" aí a soma bateu com o sum. Abraços.

    • @robertobarbosa3201
      @robertobarbosa3201 3 года назад

      Aqui também percebi essa diferença, testei sua solução e funcionou, porém, fiz outro código um pouco maior (isso não é bom) usando o 'loop' que ficou assim:
      testeLoop:loop
      fetch testeCursor into valorVenda;
      if(saidaLoop != 1) then
      set soma = soma + valorVenda;
      else
      leave testeloop;
      end if;
      end loop;

  • @ulissesavelar9360
    @ulissesavelar9360 3 года назад +3

    Boa tarde , muito bom conteúdo como sempre :)
    Uma pergunta, posso fazer o proposto usando um For loop? Pois já ouvi dizer que cursor requer muitos recursos do banco já o for não, procede ?

  • @Juniordigital
    @Juniordigital 3 года назад +2

    essa aula foi a mais difícil de eu entender desse curso, ainda to tentando rs não entendi direito o que é cursor

  • @Juniordigital
    @Juniordigital 3 года назад +1

    o que é fetch?

    • @cfbcursos
      @cfbcursos  3 года назад +1

      O fetch serve para recuperar uma linha específica do cursor.

    • @Juniordigital
      @Juniordigital 3 года назад

      @@cfbcursos aaa ta!!!!

  • @gabrielgoncalves5865
    @gabrielgoncalves5865 3 года назад +1

    Professor, com esse curso, posso colocar no currículo SQL intermediário ou avançado?

    • @cfbcursos
      @cfbcursos  3 года назад

      Intermediário, avançado exige experiência

  • @victor-honorato
    @victor-honorato 2 года назад

    essa aula foi pesada!

  • @linecker94
    @linecker94 2 года назад

    muito confuso, especialmente o comando

  • @77mcouto
    @77mcouto 3 года назад +3

    prof..... estou enviando um script de banco para que se vc estiver interesse em fazer um curso de modelagem ou utilizar para aulas ou para o pessoal que stiver assitindo poder usar como estudo
    Criar Banco
    CREATE DATABASE db_Faculdade;
    USE db_Faculdade;
    -- Criar Tabelas
    CREATE TABLE Departamento (
    Cod_Departamento INT PRIMARY KEY AUTO_INCREMENT,
    Nome_departamento VARCHAR(20) NOT NULL
    );
    CREATE TABLE Professor (
    Cod_Professor INT PRIMARY KEY AUTO_INCREMENT,
    Nome_Professor VARCHAR(20) NOT NULL,
    Sobrenome_Professor VARCHAR(50) NOT NULL,
    Status_Professor TINYINT,
    Cod_Departamento INT,
    CONSTRAINT fk_Codigo_departamento FOREIGN KEY(Cod_Departamento) REFERENCES Departamento (Cod_Departamento)
    );
    CREATE TABLE Curso (
    Cod_Curso INT PRIMARY KEY AUTO_INCREMENT,
    Nome_Curso VARCHAR(30),
    Cod_Departamento INT,
    CONSTRAINT fk_Cod_Departamento FOREIGN KEY (Cod_Departamento) REFERENCES Departamento (Cod_Departamento)
    );
    CREATE TABLE Turma (
    Cod_Turma INT PRIMARY KEY AUTO_INCREMENT,
    Cod_Curso INT,
    Periodo VARCHAR(8),
    Num_Alunos INT,
    Data_Inicio DATE,
    Data_Fim DATE,
    CONSTRAINT fk_Cod_Curso FOREIGN KEY (Cod_Curso) REFERENCES Curso (Cod_Curso)
    );
    CREATE TABLE Disciplina (
    Cod_Disciplina INT PRIMARY KEY AUTO_INCREMENT,
    Cod_Disciplina_Depende INT NULL, /* Auto-relacionamento */
    Nome_Disciplina VARCHAR(30),
    Cod_Departamento INT NOT NULL,
    Carga_Horaria INT NOT NULL,
    Descrição VARCHAR(80),
    Num_Alunos INT NOT NULL,
    CONSTRAINT fk_Cod_Departamento_Disciplina FOREIGN KEY (Cod_Departamento) REFERENCES Departamento (Cod_Departamento),
    CONSTRAINT fk_Cod_Disciplina FOREIGN KEY (Cod_Disciplina_Depende) REFERENCES Disciplina (Cod_Disciplina)
    );
    CREATE TABLE Prof_Disciplina (
    Cod_Professor INT NOT NULL,
    Cod_Disciplina INT NOT NULL,
    PRIMARY KEY (Cod_Professor, Cod_Disciplina),
    CONSTRAINT fk_Cod_Professor_Prof FOREIGN KEY (Cod_Professor) REFERENCES Professor (Cod_Professor),
    CONSTRAINT fk_Cod_Disciplina_Prof FOREIGN KEY (Cod_Disciplina) REFERENCES Disciplina (Cod_Disciplina)
    );
    CREATE TABLE Curso_Disciplina (
    Cod_Curso INT NOT NULL,
    Cod_Disciplina INT NOT NULL,
    PRIMARY KEY (Cod_Curso, Cod_Disciplina),
    CONSTRAINT fk_Cod_Curso_Disci FOREIGN KEY (Cod_Curso) REFERENCES Curso (Cod_Curso),
    CONSTRAINT fk_Cod_Disciplina_Disci FOREIGN KEY (Cod_Disciplina) REFERENCES Disciplina (Cod_Disciplina)
    );
    CREATE TABLE Aluno (
    RA INT PRIMARY KEY AUTO_INCREMENT,
    Nome_Aluno VARCHAR(20) NOT NULL,
    Sobrenome_Aluno VARCHAR(20) NOT NULL,
    CPF VARCHAR(11) NOT NULL,
    Status_Aluno TINYINT(1) NOT NULL,
    Cod_Turma INT,
    Sexo VARCHAR(1),
    Cod_Curso INT,
    Nome_Pai VARCHAR(50) NOT NULL,
    Nome_Mae VARCHAR(50) NOT NULL,
    Email VARCHAR(50) NOT NULL,
    Whatsapp VARCHAR(20) NOT NULL,
    CONSTRAINT fk_Cod_Turma_Aluno FOREIGN KEY(Cod_Turma) REFERENCES Turma (Cod_Turma),
    CONSTRAINT fk_Cod_Curso_Aluno FOREIGN KEY(Cod_Curso) REFERENCES Curso (Cod_Curso)
    );
    CREATE TABLE Aluno_Disc (
    RA INT NOT NULL,
    Cod_Disciplina INT NOT NULL,
    PRIMARY KEY (RA, Cod_Disciplina),
    CONSTRAINT fk_RA_Aluno FOREIGN KEY (RA) REFERENCES Aluno (RA),
    CONSTRAINT fk_Cod_Disciplina_Aluno FOREIGN KEY (Cod_Disciplina) REFERENCES Disciplina (Cod_Disciplina)
    );
    CREATE TABLE Historico (
    Cod_Historico INT PRIMARY KEY AUTO_INCREMENT,
    RA INT NOT NULL,
    Data_Inicio DATE NOT NULL,
    Data_Final DATE,
    CONSTRAINT fk_Cod_RA FOREIGN KEY (RA) REFERENCES Aluno (RA)
    );
    CREATE TABLE Disc_Hist (
    Cod_Historico INT NOT NULL,
    Cod_Disciplina INT NOT NULL,
    Nota INT,
    Frequência INT,
    PRIMARY KEY (Cod_Historico, Cod_Disciplina),
    CONSTRAINT fk_Cod_Historico FOREIGN KEY (Cod_Historico) REFERENCES Historico (Cod_Historico),
    CONSTRAINT fk_Cod_Disciplina_Hist FOREIGN KEY (Cod_Disciplina) REFERENCES Disciplina (Cod_Disciplina)
    );
    CREATE TABLE Tipo_Telefone(
    Cod_Tipo_Telefone INT PRIMARY KEY AUTO_INCREMENT,
    Tipo_Telefone VARCHAR(8)
    );
    CREATE TABLE Telefones_Aluno (
    Cod_Telefones_Aluno INT PRIMARY KEY AUTO_INCREMENT,
    RA INT NOT NULL,
    Cod_Tipo_Telefone INT NOT NULL,
    Num_Telefone VARCHAR(20) NOT NULL,
    CONSTRAINT fk_Cod_RA_Tel FOREIGN KEY (RA) REFERENCES Aluno (RA),
    CONSTRAINT fk_Cod_Tipo_Telefone FOREIGN KEY (Cod_Tipo_Telefone) REFERENCES Tipo_Telefone (Cod_Tipo_Telefone)
    );
    CREATE TABLE Tipo_Logradouro (
    Cod_Tipo_Logradouro INT PRIMARY KEY AUTO_INCREMENT,
    Tipo_Logradouro VARCHAR(11)
    );
    CREATE TABLE Endereco_Aluno (
    Cod_Endereco_Aluno INT PRIMARY KEY AUTO_INCREMENT,
    RA INT NOT NULL,
    Cod_Tipo_Logradouro INT NOT NULL,
    Nome_Rua VARCHAR(50) NOT NULL,
    Num_Rua INT NOT NULL,
    Complemento VARCHAR(20) NULL,
    CEP VARCHAR(8) NOT NULL,
    CONSTRAINT fk_Cod_RA_End FOREIGN KEY(RA) REFERENCES Aluno (RA),
    CONSTRAINT fk_Cod_Tipo_Lougradouro FOREIGN KEY(Cod_Tipo_Logradouro) REFERENCES Tipo_Logradouro (Cod_Tipo_Logradouro)
    );
    Inserindo dados nas tabelas
    Após criarmos as tabelas iremos carregá-las com alguns dados para que seja possível realizar testes no banco de dados. Insira registros usando os códigos a seguir (você pode inserir mais registros, se assim o desejar):
    -- Carga de Dados para Testes
    INSERT INTO Departamento (Nome_Departamento)
    VALUES
    ('Ciências Humanas'),
    ('Matemática'),
    ('Biológicas'),
    ('Estágio');
    INSERT INTO Professor (Nome_Professor, Sobrenome_Professor, Status_Professor, Cod_Departamento)
    VALUES
    ('Fábio', 'dos Reis', 0, 2),
    ('Sophie', 'Allemand', 1, 1),
    ('Monica', 'Barroso', 1, 3);
    INSERT INTO Curso (Nome_Curso, Cod_Departamento)
    VALUES
    ('Matemática', 2),
    ('Psicologia', 1),
    ('Análise de Sistemas', 2),
    ('Biologia', 3),
    ('História', 1),
    ('Engenharia', 2);
    INSERT INTO Turma (Cod_Curso, Periodo, Num_Alunos, Data_Inicio, Data_Fim)
    VALUES
    (2, 'Manhã', 20, '2016-05-12', '2017-10-15'),
    (1, 'Noite', 10, '2014-05-12', '2020-03-05'),
    (3, 'Tarde', 15, '2012-05-12', '2014-05-10');
    INSERT INTO Disciplina (Nome_Disciplina, Cod_Departamento, Carga_Horaria, Descrição, Num_Alunos)
    VALUES
    ('Raciocínio Lógico', 2, 1200, 'Desenvolver o raciocínio lógico', 50),
    ('Psicologia Cognitiva', 1, 1400, 'Entender o funcionamento do aprendizado', 30),
    ('Programação em C', 2, 1200, 'Aprender uma linguagem de programação', 20),
    ('Eletrônica Digital', 2, 300, 'Funcionamento de circuitos digitais', 30);
    INSERT INTO Aluno (Nome_Aluno, Sobrenome_Aluno, CPF, Status_Aluno, Cod_Turma, Sexo, Cod_Curso, Nome_Pai, Nome_Mae, Email, Whatsapp)
    VALUES
    ('Marcos', 'Aurelio Martins', 14278914536, 1, 2, 'M', 3, 'Marcio Aurelio', 'Maria Aparecida', 'marcosaurelio@gmail.com', 946231249),
    ('Gabriel', 'Fernando de Almeida', 14470954536, 1, 1, 'M', 1, 'Adão Almeida', 'Fernanda Almeida', 'gabrielalmeida@yahoo.com', 941741247),
    ('Beatriz', 'Sonia Meneguel', 1520984537, 1, 3, 'F', 3, 'Samuel Meneguel', 'Gabriella Meneguel', 'batrizmene@hotmail.com', 945781412),
    ('Jorge', 'Soares', 14223651562, 1, 3, 'M', 4, 'João Soares', 'Maria Richter', 'jorgesoares@gmail.com', 925637857),
    ('Ana Paula', 'Ferretti', 32968914522, 1, 3, 'F', 5, 'Marcio Ferretti', 'Ana Hoffbahn', 'anapaulaferretti@hotmail.com', 974267423),
    ('Mônica', 'Yamaguti', 32988914510, 1, 2, 'F', 6, 'Wilson Oliveira', 'Fernanda Yamaguti', 'monyamaguti@outlook.com', 932619560);
    INSERT INTO Aluno_Disc (RA, Cod_Disciplina)
    VALUES
    (3, 1),
    (1, 2),
    (2, 3),
    (4, 3),
    (5, 4),
    (6, 1);
    INSERT INTO Curso_Disciplina(Cod_Curso, Cod_Disciplina)
    VALUES
    (1, 1),
    (2, 2),
    (3, 3),
    (6, 4);
    INSERT INTO Prof_Disciplina(Cod_Professor, Cod_Disciplina)
    VALUES
    (2, 1),
    (1, 2),
    (3, 3),
    (2, 4);
    INSERT INTO Historico (RA, Data_Inicio, Data_Final)
    VALUES
    (2, '2016-05-12', '2017-10-15'),
    (3, '2014-05-12', '2020-03-05'),
    (1, '2010-05-12', '2012-05-10');
    INSERT INTO Tipo_Logradouro (Tipo_Logradouro)
    VALUES
    ('Rua'),
    ('Avenida'),
    ('Alameda'),
    ('Travessa');
    INSERT INTO Endereco_Aluno (RA, Cod_Tipo_Logradouro, Nome_Rua, Num_Rua, Complemento, CEP)
    VALUES
    (2, 1, 'das Giestas', 255, 'Casa 02', 02854000),
    (3, 3, 'Lorena', 10, 'Apto 15', 02945000),
    (1, 2, 'do Cursino', 1248, '', 0851040),
    (4, 1, 'das Heras', 495, '', 03563142),
    (5, 3, 'Santos', 1856, '', 04523963),
    (6, 4, 'Matão', 206, '', 04213650);