AplicativosemPHP23072007
644 pág.

AplicativosemPHP23072007


DisciplinaImplementação de Aplicação para Computador12 materiais54 seguidores
Pré-visualização50 páginas
\u2013 Página 225/644
PostgreSQL Prático
http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico
Com isso evitando repetições ou a reinvenção da roda.
Tutorial sobre o phpPgAdmin
- Baixar de - http://phppgadmin.sourceforge.net/
- Copiar para o diretório web e descompactar no diretório "phppgadmin"
- Editar o arquivo conf/config.inc.php e alterar para dois servidores (um local e outro remoto) caso 
assim queira:
 //...
 // Servidor Local
 // Display name for the server on the login screen
 $conf['servers'][0]['desc'] = 'Local';
 // Hostname or IP address for server. Use '' for UNIX domain socket.
 // use 'localhost' for TCP/IP connection on this computer
 $conf['servers'][0]['host'] = '127.0.0.1';
 $conf['servers'][0]['defaultdb'] = 'nomebancodefault';
 //...
 // Servidor Remoto
 // Example for a second server
 $conf['servers'][1]['desc'] = 'Remoto';
 $conf['servers'][1]['host'] = '10.99.00.11';
 $conf['servers'][1]['port'] = 5432;
 $conf['servers'][1]['defaultdb'] = 'nomebancodefault';
 //...
 // If extra login security is true, then logins via phpPgAdmin with no
 // password or certain usernames (pgsql, postgres, root, administrator)
 // will be denied. Only set this false once you have read the FAQ and
 // understand how to change PostgreSQL's pg_hba.conf to enable
 // passworded local connections.
 $conf['extra_login_security'] = false;
 // Importantes para Importar/Exportar
 $conf['servers'][0]['pg_dump_path'] = '/usr/local/pgsql/bin/pg_dump';
 $conf['servers'][0]['pg_dumpall_path'] = 
'/usr/local/pgsql/bin/pg_dumpall';
- Pronto, basta abrir http://localhost/phppgadmin
WikiBooks, Democratizando o Conhecimento
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP \u2013 Página 226/644
Criando Chave Estrangeira Composta no phpPgAdmin e no 
PGAdmin
O exemplo é para uma chave com 4 campos, mas o procedimento é válido para qualquer chave 
composta.
Relacionar composicoes com precos.
Quero que ao digitar um preço em composições o SGBD verifique a integridade do mesmo em 
precos.
Temos uma tabela cuja chave primária é composta por 4 campos:
tabela, insumo_grupo, insumo, fornecedor e queremos relacionar com outra tabela que também 
contém os mesmos campos com os mesmos tipos de dados.
Como isso pode ter algum engano, seguem os passos.
Esquema das tabelas:
CREATE TABLE "composicoes" (
 "servico" character varying(10) NOT NULL,
 "insumo_grupo" character varying(6) NOT NULL,
 "insumo" character varying(10) NOT NULL,
 "quantidade" real NOT NULL DEFAULT 0,
 "coeficiente" real NOT NULL DEFAULT 0,
 "data_inclusao" timestamp without time zone,
 "data_alteracao" timestamp without time zone,
 "data_cancelamento" timestamp without time zone,
 "uid_inclusao" character varying(10),
 "uid_alteracao" character varying(10),
 "uid_cancelamento" character varying(10),
 "tabela" smallint NOT NULL DEFAULT 2006,
 "fornecedor" smallint NOT NULL DEFAULT 1,
 CONSTRAINT "composicoes_fk_insumo" FOREIGN KEY (insumo_grupo, insumo) 
REFERENCES insumos(grupo, insumo),
 CONSTRAINT "composicoes_fk_servicos" FOREIGN KEY (servico) REFERENCES 
servicos(servico),
 CONSTRAINT "composicoes_pkey" PRIMARY KEY (servico, insumo_grupo, insumo)
) WITH OIDS;
CREATE TABLE "precos" (
 "tabela" smallint NOT NULL,
 "insumo_grupo" character varying(6) NOT NULL,
 "insumo" character varying(10) NOT NULL,
 "fornecedor" smallint NOT NULL,
 "custo_produtivo" real,
 "custo_improdutivo" real,
 "data_coleta" timestamp without time zone,
 "data_inclusao" timestamp without time zone,
 "data_alteracao" timestamp without time zone,
 "data_cancelamento" timestamp without time zone,
 "uid_inclusao" character varying(10),
 "uid_alteracao" character varying(10),
 "uid_cancelamento" character varying(10),
 CONSTRAINT "precos_fornecedor_fk" FOREIGN KEY (fornecedor) REFERENCES 
cadastro.fornecedor(codigo_fornecedor) ON UPDATE RESTRICT ON DELETE RESTRICT,
 CONSTRAINT "precos_insumos_fk" FOREIGN KEY (insumo_grupo, insumo) REFERENCES 
insumos(grupo, insumo),
WikiBooks, Democratizando o Conhecimento
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP \u2013 Página 227/644
 CONSTRAINT "precos_pk" PRIMARY KEY (tabela, insumo_grupo, insumo, 
fornecedor)
) WITH OIDS;
phpPgAdmin
Observe que na tabela de destino (precos), de onde queremos trazer uma informação, a ordem da 
chave é "tabela, insumo_grupo, insumo e fornecedor". Já em coposicoes, estes campos estão em 
ordem diferente. Mas no momento de criar a chave estrangeira devemos adicionar na mesma ordem 
da precos. Veja abaixo.
- Abrir a tabela (composicoes) para a qual queremos inserir uma chave estrangeira no phpPgAdmin
- Clicar na aba Restrição
- Clicar em adicionar chave estrangeira
- Digitar um nome para a chave: composicoes_precos_fk
- Agora vem a dica: selecione nesta ordem à esquerda e clique na seta dupla após selecionar cada 
um:
 - primeiro tabela
 - depois insumo_grupo
 - depois insumo
 - por fim fornecedor (caso altere esta ordem a chave não será criada)
- Em Tabela alvo selecione preco
- Clique em Adicionar (abaixo)
- Á esquerda selecione os quatro campos de precos (tabela, insumo_grupo, insumo e fornecedor) e 
clique na seta dupla para a direita.
- Clique em Adicionar abaixo.
PGAdmin
- Abrir a tabela no PgAdmin (duplo clique no nome da tabela à esquerda)
- Clique em Constraints
- Selecione Fireign Key abaixo e clique em Add
- Digite um nome em name "composicoes_precos_fk"
- Em references selecione "precos"
- Clique na aba Columns
- Em Local column selecione 'tabela'
WikiBooks, Democratizando o Conhecimento
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP \u2013 Página 228/644
- Em Referecing selecione 'tabela' e clique em Add
- De forma semelhante adicione os 3 pares restantes: insumo_grupo - insumo_grupo, insumo - 
insumo e fornecedor - fornecedor.
Tive problema ao adicionar insumo, então adicionei fornecedor antes e depois insumo e foi bem.
- Então clique em OK, confira e OK novamente.
PlPgSQL Tutorial
Esta é uma das linguagens de funções armazenadas com que trabalha o PostgreSQL. É a mais 
popular das linguagens no PostgreSQL.
Delimitadores
O código de uma função plpgsql é especificado em CREATE FUNCTION como uma string literal 
delimitado por aspas.
1 Apóstrofo (corpo da função)
CREATE FUNCTION olamundo() RETURNS integer AS '
 ....
' LANGUAGE plpgsql;
Inicia após AS e termina antes de LANGUAGE
2 Apóstrofos (mascar string literal no corpo da função)
a_output := Blah;
SELECT * FROM users WHERE f_name=foobar;
4 Apóstrofos (string constante no corpo da função)
a_output := a_output || AND name LIKE 'foobar' AND xyz
Mais detalhes na documentação oficial.
Declaração de Variáveis
user_id integer;
quantity numeric(5);
url varchar;
myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;
WikiBooks, Democratizando o Conhecimento
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP \u2013 Página 229/644
Sintaxe geral da declaração de variáveis:
nome [ CONSTANT ] tipo [ NOT NULL ] [ { DEFAULT | := } expressão ];
Exemplos:
quantity integer DEFAULT 32;
url varchar := 'http://mysite.com';
user_id CONSTANT integer := 10;
Declarado Funções
CREATE FUNCTION func_escopo() RETURNS integer AS $$
DECLARE
quantidade integer := 30;
BEGIN
RAISE NOTICE 'Aqui a quantidade é %', quantidade; -- A quantidade aqui é 30
quantidade := 50;
--
-- Criar um sub-bloco
--
DECLARE
quantidade integer := 80;
BEGIN
RAISE NOTICE 'Aqui a quantidade é %', quantidade; -- A quantidade aqui é 80
END;
RAISE NOTICE 'Aqui a quantidade é %', quantidade; -- A quantidade