A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Cursor Professor Esp. Diego André Sant’Ana

Apresentações semelhantes


Apresentação em tema: "Cursor Professor Esp. Diego André Sant’Ana"— Transcrição da apresentação:

1 Cursor Professor Esp. Diego André Sant’Ana
Disciplina: Banco de Dados II professordiegosantana.wordpress.com

2 O que é um Cursor? Um cursor representa uma tabela temporariamente armazenada em memória. O objetivo do nosso artigo é listar todos os telefones de um determinado usuário utilizando cursor no banco de dados PostgreSQL.

3 O que é um Cursor? Um cursor representa uma tabela temporariamente armazenada em memória. O objetivo do nosso artigo é listar todos os telefones de um determinado usuário utilizando cursor no banco de dados PostgreSQL.

4 Modelo Fonte: stgresql/utilizando-cursores-no-postgresql/

5 Script CREATE SCHEMA exemplo;
CREATE TABLE exemplo.usuario ( usuario_id SERIAL NOT NULL, nome CHARACTER VARYING(100) NOT NULL, data_nasc DATE NOT NULL, CONSTRAINT PK_usuario PRIMARY KEY (usuario_id) );

6 Script CREATE TABLE exemplo.telefone ( usuario_id INTEGER NOT NULL, fone_id INTEGER NOT NULL, ddd CHARACTER VARYING(2) NOT NULL, numero CHARACTER VARYING(10) NOT NULL, CONSTRAINT PK_telefone PRIMARY KEY (usuario_id,fone_id) ); ALTER TABLE exemplo.telefone ADD CONSTRAINT usuario_telefone FOREIGN KEY (usuario_id) REFERENCES exemplo.usuario (usuario_id);

7 Script INSERT INTO exemplo.usuario(nome, data_nasc) VALUES
('Maria', ' '), ('Pedro', ' '), ('Ana', ' '); INSERT INTO exemplo.telefone(usuario_id, fone_id, ddd, numero) VALUES (1, 1,'67', ' '), (1, 2,'67', ' '), (2, 1,'67', ' '), (2, 2,'67', ' '), (3, 1,'67', ' ') ;

8 Criando uma função com cursor
CREATE OR REPLACE FUNCTION exemplo.cur_telefones(integer) RETURNS SETOF exemplo.telefone AS $BODY$ DECLARE --parametros p_usuario_id ALIAS FOR $1; --cursor reg exemplo.telefone%ROWTYPE; BEGIN --busca os telefones do usuario informado FOR reg in SELECT t.usuario_id, t.fone_id, t.ddd, t.numero FROM exemplo.telefone t WHERE t.usuario_id = p_usuario_id LOOP RETURN NEXT reg; END LOOP; RETURN; END; $BODY$ LANGUAGE plpgsql VOLATILE;

9 Criando TYPE A criação de um tipo é necessária quando não temos nenhuma tabela que representa o tipo de retorno de uma busca. CREATE TYPE exemplo.type_cur_telefones AS ( nome character varying(100) , ddd character varying(2) , telefone character varying(10) );

10 Criando uma função utilizando tipo como retorno
DROP FUNCTION exemplo.cur_telefones(integer); CREATE OR REPLACE FUNCTION exemplo.cur_telefones(integer) RETURNS SETOF exemplo.type_cur_telefones AS $BODY$ DECLARE --parametros p_usuario_id ALIAS FOR $1; --cursor reg exemplo.type_cur_telefones%ROWTYPE; BEGIN --busca os telefones do usuario informado FOR reg in SELECT u.nome, t.ddd, t.numero FROM exemplo.usuario u INNER JOIN exemplo.telefone t ON(u.usuario_id = t.usuario_id) WHERE t.usuario_id = p_usuario_id LOOP RETURN NEXT reg; END LOOP; RETURN; END; LANGUAGE plpgsql VOLATILE;

11 REFERÊNCIAS sql/utilizando-cursores-no-postgresql/


Carregar ppt "Cursor Professor Esp. Diego André Sant’Ana"

Apresentações semelhantes


Anúncios Google