Você está na página 1de 6

#POSTGRE -> Banco de dados gratuito, aceita um fluxo de dados, uma carga de dado s #Maior que o mysql # MYSQL

>> POSTGRE >> SQL SERVER >> oracle CREATE DATABASE aula6; #cONECTAR NO BANCO DE DADOS \c aula6;

aula6=# -> Estou conebtado no banco de dados aula 6 #-> Mostrar os banco de dados \l #MOstrar as tabelas, as views criadas \d #postgree nao possui AUTO_INCREMENT CREATE TABLE cliente( id SERIAL, nome VARCHAR(20), email VARCHAR(40) UNIQUE, sexo CHAR(1), PRIMARY KEY(id) ); \d; #Descrever a tabela pessoa \d cliente; #No postgre devemos criar um campo inteiro e iremos criar uma #SEQUENCE para esse campo #Campo do Tipo SERIAL (Tipo como int e ja adiciona uma sequence para este campo) #CHECK -> para limitar os valores possiveis do campo ALTER TABLE cliente ADD CONSTRAINT CK_CLIENTE_SEXO CHECK (sexo IN('M','F')); INSERT INTO cliente(nome, email, sexo) VALUES('Saulo','saulo@gmail.com','F'), ('Renan', 'renan@gmail.com', 'F'), ('Helio', 'helio@gmail.com','M'), ('Marlon', 'marlon@gmail.com','M'); SELECT * FROM cliente; ----------------------------------------------#Postgre aceita HERANA entre tabelas CREATE TABLE pessoa( idpessoa INT,

nome VARCHAR(30), email VARCHAR(50), datanascimento DATE, PRIMARY KEY(idpessoa) ); CREATE SEQUENCE seq_pessoa; INSERT INTO pessoa(idpessoa, nome, email, datanascimento) VALUES(nextVal('seq_pessoa'), 'Jose','jose@gmail.com', '20/10/1988'); INSERT INTO pessoa(idpessoa, nome, email, datanascimento) VALUES(nextVal('seq_pessoa'), 'Maria','maria@gmail.com', '12/01/2011'); INSERT INTO pessoa(idpessoa, nome, email, datanascimento) VALUES(nextVal('seq_pessoa'), 'Juliana','juliana@gmail.com', '20/08/1994 '); INSERT INTO pessoa(idpessoa, nome, email, datanascimento) VALUES(nextVal('seq_pessoa'), 'Marcelo','marcelo@gmail.com', '27/10/2000 '); SELECt * FROM pessoa; SET DATESTYLE TO 'SQL, DMY'; CREATE TABLE pessoafisica( cpf VARCHAR(15) NOT NULL, rg VARCHAR(20) NOT NULL )INHERITS(pessoa); CREATE TABLE pessoajuridica( cnpj VARCHAR(20) NOT NULL )INHERITS(pessoa); INSERT INTO pessoafisica(idpessoa, nome, email, datanascimento, cpf, rg) VALUES (nextVal('seq_pessoa'),'Tinoco','tinoco@gmail.com', '24/10/1978', '123.456.789-8 8', '78778465'), (nextVal('seq_pessoa'),'Martin','martin@gmail.com', '24/08/1988', '123.456.456-8 8', '45454551'); SELECT * FROM pessoafisica; INSERT INTO pessoajuridica(idpessoa, nome, email, datanascimento, cnpj) VALUES (nextVal('seq_pessoa'),'Marlon LTDA','contato@mltda.com','20/12/2013','123123146 54'); SELECT * FROM pessoajuridica; --------------------------------------------------------------SELECT * FROM pessoa; SELECT * FROM pessoafisica; SELECT * FROM pessoajuridica; # Mostar somente quem for pessoa

SELECT * FROM ONLY pessoa; #cRIAR UMA SEQUENCE TESTE_SEQ COMEANDO PELO NUMERO 10 INCREMENTANDO POR 20 CREATE SEQUENCE teste_seq START WITH 10 INCREMENT BY 2; SELECT NEXTVAL('teste_seq'); SELECT NEXTVAL('teste_seq'); SELECT NEXTVAL('teste_seq'); -------------------------------------------------------------------CREATE TABLE funcionario( idfuncionario SERIAL PRIMARY KEY, nome VARCHAR(50), salario NUMERIC, dataAdmissao DATE ); \d funcionario; #No postgre nao existe o DELIMITER para programar CREATE OR REPLACE FUNCTION inserirFuncionario (varchar(50), NUMERIC, DATE) RETURNS varchar(50) AS $$ BEGIN INSERT INTO funcionario(nome, salario, dataAdmissao) VALUES($1, $2, $3); RETURN $1 END; $$ LANGUAGE plpgsql; SELECT inserirFuncionario('Jose', 4500.50, '20/10/2000'); SELECT inserirFuncionario('Rafaela', 4500, '20/10/1997'); SELECT inserirFuncionario('Leo', 2500, CURRENT_DATE); SELECT * FROM funcionario; -------------------------------------------------------------------#setOf -> Representa um registro de uma tabela CREATE OR REPLACE FUNCTION findFuncionarioByCod(int) RETURNS setOF funcionario AS $$ SELECT * FROM funcionario WHERE idfuncionario = $1; $$ ' cadastrado com sucesso';

LANGUAGE SQL; SELECT findFuncionarioByCod(3) AS FUNCIONARIO; --------------------------------------------------------------------#para listar varios registros dentro de uma funo utilizamos CURSOR CREATE OR REPLACE FUNCTION method(int) RETURNS INT AS $$ BEGIN IF $1 >= 18 THEN RAISE NOTICE 'Maior de idade: %', $1; ELSEIF $1 > 0 THEN RAISE NOTICE 'Menor de idade: %', $1; ELSE RAISE EXCEPTION 'Idade INVALIDA, %', $1; END IF; RETURN 0; END; $$ LANGUAGE PLPGSQL; SELECT method(20); SELECT method(15); SELECT method(0); ----------------------------------------------------------------------------CREATE OR REPLACE FUNCTION listarFuncionario() RETURNS BOOLEAN AS $$ DECLARE vnome funcionario.nome%TYPE; vsalario funcionario.salario%TYPE; vid funcionario.idfuncionario%TYPE; vdata funcionario.dataadmissao%TYPE; i INT = 0; limite INT = 0; registro REFCURSOR; BEGIN SELECT COUNT(*) INTO limite FROM funcionario; OPEN registro FOR SELECT idfuncionario, nome, salario, dataadmissao FROM funcionario; FOR i IN 1..limite LOOP FETCH registro INTO vid, vnome, vsalario, vdata;

RAISE RAISE RAISE RAISE RAISE

NOTICE NOTICE NOTICE NOTICE NOTICE

'Nome: %',vnome; 'ID: %',vid; 'Salario: %',vsalario; 'Admissao: %',vdata; '--------------------------';

END LOOP; CLOSE registro; RETURN true; END; $$ LANGUAGE PLPGSQL; SELECT listarFuncionario(); ----------------------------------------------CREATE OR REPLACE FUNCTION listarFuncionario2() RETURNS BOOLEAN AS $$ DECLARE registros RECORD; BEGIN FOR registros IN SELECT idfuncionario, nome, salario, dataadmissao FROM funcionario LOOP RAISE RAISE RAISE RAISE END LOOP; RETURN true; END; $$ LANGUAGE PLPGSQL; SELECT listarFuncionario2(); ----------------------------------------------\copy funcionario TO 'c:/tbfuncionario.txt' DELIMITER AS ';' \copy funcionario TO 'c:/tbfuncionario2.csv' DELIMITER AS ';' CREATE TABLE aluno( matricula SERIAL PRIMARY KEY, nome VARCHAR(20) NOT NULL, notas FLOAT[] NOT NULL ); \d aluno NOTICE NOTICE NOTICE NOTICE 'Nome: %',registros.nome; 'Data Admissao: %', registros.dataadmissao; 'Salario: %', registros.salario; '-----------------------';

INSERT INTO aluno(nome, notas) VALUES('Renan','{8,7,7.5}'); INSERT INTO aluno(nome, notas) VALUES('Saulo','{10,8,7}'); INSERT INTO aluno(nome, notas) VALUES('Rodrigo','{9,8,8}'); SELECT * FROM aluno; SELECT nome, notas[1] as TRIM1, notas[2] as TRIM2, notas[3] as TRIM3 FROM aluno; SELECT nome, to_char((notas[1] + notas[2] + notas[3]) /3, '99D9') as MEDIA FROM aluno; # D-> Separador DECIMAL

Você também pode gostar