• Nenhum resultado encontrado

01 relatorioListEx5 240

N/A
N/A
Protected

Academic year: 2021

Share "01 relatorioListEx5 240"

Copied!
74
0
0

Texto

(1)

Pós-Graduação em Engenharia Eletrônica e

Computação - Área Informática (PG/EEC-I)

Relatório ListEx 5

CE-240

Projeto de Sistema de Banco de Dados

Prof. Dr. Adilson Marques da Cunha

Aluno: Jedson Zendron Figueiredo

(2)

SUMÁRIO

1 OBJETIVO ... 4

2 RESULTADOS DO DESENVOLVIMENTO DO TRABALHO ... 5

2.1. COMPOSIÇÃODOSAPLICATIVOSDEBANCODEDADOS ... 5

2.2. ELEIÇÃODEFUNÇÕESAOSINTEGRANTESDOGRUPO ... 5

2.2.1. Dicionarizador ... 6 2.2.2. Normalizador ... 6 2.2.3. Integrador ... 6 2.3. DICIONARIZAÇÃO ... 6 2.4. NORMALIZAÇÃO ... 7 2.5. INTEGRAÇÃO ... 7 2.5.1. Re-Definição do Problema ... 7 2.5.1.1. Re-Tematização... 7 2.5.1.2. Re-Contextualização... 7 2.5.2. Re-Definição do Problema ... 8

2.5.2.1. Efeitos Adversos (O que está errado?) ... 8

2.5.2.2. Causas (Por que está errado?) ... 9

2.5.2.3. Tarefa (O que, quando e onde se deseja realizar?)... 9

2.5.2.4. Propósito (Para que se deseja realizar tal tarefa?) ... 10

2.5.2.5. Enunciado do Problema (Objetivo + Finalidade)... 10

2.5.3. Definição da Solução ... 10

2.5.3.1. Alternativas de Soluções Possíveis (ASP) ... 10

2.5.3.2. Análise APA (Adequabilidade + Praticabilidade + Aceitabilidade) ... 11

2.5.3.3. Alternativa de Solução Escolhida (ASE) ... 11

2.5.3.4. Enunciado da Solução ... 11

2.5.4. Re-Definição do Título ... 11

2.5.4. Re-Especificação de Requisitos ... 12

(3)

2.6.1. Verificação das Consultas realizadas nos ABD DWS e PDD ... 13

2.6.1.1. Primeira Consulta ... 13

2.6.1.2. Segunda Consulta ... 13

2.6.1.3. Terceira Consulta... 14

2.6.1.4. Quarta Consulta ... 15

2.7. CONSULTAS NO BANCO DE DADOS SETORIAL MDD-DD ... 16

2.7.1. Quinta Consulta ... 16 2.7.2. Sexta Consulta ... 17 2.7.3. Sétima Consulta ... 18 2.7.4. Oitava Consulta ... 19 2.7. ANOMALIAS ELIMINADAS ... 19

3 CONCLUSÃO... 21

ANEXO A – RESULTADOS DAS CONSULTAS REALIZADAS ... 22

ANEXO B – MODELO ENTIDADE E RELACIONAMENTO (MER)

DO APLICATIVO DE BANCO DE DADOS SETORIAL, CRIADO

NO ERWIN 7 ... 37

ANEXO C – SCRIPT GERADO, PELO ERWIN 7, PARA O

APLICATIVO DE BANCO DE DADOS SETORIAL (BDS) ... 38

(4)

1 OBJETIVO

Esse documento tem por objetivo integrar e implementar a integração de Aplicativos de BD nos Bancos de Dados Setoriais – BDS ou Subject Databases das Empresas ATD (Aquisição e o Tratamento de Dados Hidrológicos) e MDD (Monitoramento e a Difusão de Dados Hidrológicos) escolhidas como Estudo de Caso, visando testar as funcionalidades de suas integrações setoriais debaixo do SGBD previamente escolhido (SQL Developer), e verificar a melhoria das suas eficiências setoriais e a redução dos desperdícios de seus recursos.

(5)

2 RESULTADOS DO DESENVOLVIMENTO DO TRABALHO

Na ListEx4 foi desenvolvido a criação das tabelas, inserção de tuplas, a fim de testar as consultas (ou queries) de uma ou mais relações, e uma consulta georreferenciada, envolvendo pelo menos duas relações, no Aplicativo de Banco de Dados (Gerenciamento de Difusão de Dados via Web Server - GDD), a partir da 3ªFN do Modelo Entidade e Relacionamento (MER), criado no ERwin 7.

Com isso, este trabalho propicia o desenvolvimento da integração de Aplicativos de BD no Banco de Dados Setorial (BDS). E as informações descritas neste documento correspondem ao desenvolvimento de um Banco de Dados Didático, não possuindo necessariamente dados reais.

O MER, criado no ERwin 7, para o Aplicativo de BD BDS, encontra-se no

ANEXO B e o script SQL do mesmo, no ANEXO C.

2.1. COMPOSIÇÃO DOS APLICATIVOS DE BANCO DE DADOS

O Banco de Dados Setorial MDD-DD (Difusão de Dados) é composto de três Aplicativos de Banco de Dados:

1. Disponibilização de Dados via Web Services – DWS; Responsável: Luciene Fernandes de Oliveira.

2. Gerenciamento de Difusão de Dados via Web Server – GDD; Responsável: Jedson Zendron Figueiredo.

3. Padronização da Difusão de Dados via XML – PDD; Responsável: Rodrigo Pintus Gonçalves da Costa.

2.2. ELEIÇÃO DE FUNÇÕES AOS INTEGRANTES DO GRUPO

A eleição dos integrantes do grupo corresponde às funções que cada um exercerá, tais como: Dicionarizador, Normalizador e Integrador para os Ambientes de Softwares Básicos escolhidos.

(6)

2.2.1. Dicionarizador

A Luciene Fernandes de Oliveira, que se responsabilizou por organizar, padronizar, documentar e manter atualizados os quarto (03) componentes do Sistema de Dicionário de Dados do Banco de Dados Setorial (BDS) MDD-DD, evitando inconsistências, duplicidades, homônimos ou quaisquer outras anomalias e discrepâncias, utilizando a Técnica de Trigramação.

2.2.2. Normalizador

O Rodrigo Pintus Gonçalves da Costa, que se responsabilizou por organizar, padronizar, documentar, normalizar, re-normalizar e manter atualizado os Modelos Conceituais ou Modelos Entidades e Relacionamentos (MER); os Modelos de Dados Setoriais (MDS) e as suas cardinalidades, mantendo o número de atributos por Entidade menor ou igual a sete.

2.2.3. Integrador

O Jedson Zendron Figueiredo, que se responsabilizou por organizar, coordenar, compilar, integrar e manter sempre disponível a última versão atualizada do Banco de Dados Setorial (BDS) MDD-DD, para que os demais integrantes do grupo pudessem ajudá-lo nas tarefas de integração. Coube ao Integrador: a Re-contextualização; a Re-objetivação; a Re-intitulação do Setor, bem como a Re-especificação de Requisitos.

2.3. DICIONARIZAÇÃO

A Dicionarização do Banco de Dados Setorial MDD-DD, encontra-se na Página de Índices do Luciene Fernandes de Oliveira.

No endereço:

(7)

2.4. NORMALIZAÇÃO

A Normalização do Banco de Dados Setorial MDD-DD, encontra-se na Página de Índices do Rodrigo Pintus Gonçalves da Costa.

No endereço:

http://sites.google.com/site/itarodrigocosta/diciplinas/Relatorio_ListEx05.pdf

2.5. INTEGRAÇÃO

A Integração do Banco de Dados Setorial MDD-DD se encontra logo a seguir, descrevendo a Re-contextualização; a Re-objetivação (re-definição do Problema e da Alternativa de Solução Escolhida para o Setor); a Re-intitulação do Setor. Visando organizar, coordenar, compilar, integrar e manter sempre disponível a última versão atualizada do BDS ou Subject Database, para que os demais integrantes do grupo possam ajudá-lo nas tarefas de integração.

2.5.1. Re-Definição do Problema

2.5.1.1. Re-Tematização

A Temática principal definida foi o Banco de Dados Setorial Difusão de Dados Hidrológicos via Web Services, do Sistema de Aquisição, Tratamento, Monitoramento e Difusão de Dados Hidrológicos (Sis ATMH), que é um Holding que atua com informações hidrológicas e é formada pela integração das empresas: Aquisição e Tratamento de Dados (ATD) e Monitoramento e Difusão de Dados (MDD).

2.5.1.2. Re-Contextualização

Em meados de 2007, iniciou-se no Instituto Tecnológico de Aeronáutica (ITA), o Projeto de Integração e Cooperação Amazônica para Modernização do Monitoramento Hidrológico (ICA-MMH) da Agência Nacional de Águas (ANA) em parceria com o Instituto de Pesquisas Hidrológicas da Universidade Federal do Rio Grande do Sul (IPH-UFRGS), o qual se prospectou desde o início do ano de 2006.

(8)

Durante o 1º Semestre de 2009, aproximadamente, após 18 meses do início do referido projeto, parte dele foi estabelecido como Estudo de Caso, para as Disciplinas ministradas pelo Prof. Dr. Adilson Marques da Cunha dando origem ao chamado Projeto Acadêmico de Sistema de Aquisição, Tratamento, Monitoramento e Difusão de Dados Hidrológicos (Sis ATMH), que considera as macro-funcionalidades requeridas pelo Projeto Real, mas exige completeza das soluções apresentadas pelos alunos em nível adequado e, portanto diferente. Com a referência deste Projeto, o intuito da ANA é adquirir informações hidrológicas por meio de estações de coleta de dados (Plataformas de Coleta de Dados – PCDs) localizadas em diferentes latitudes, longitudes e altitudes da Bacia Amazônica.

Contudo, atende a necessidade da disponibilização das informações hidrológicas (tais como: índices de chuva, índices de poluição e níveis de rios), via Web Services, bem como o gerenciamento, via Web Server, dos tipos de dados a serem difundidos para os principais envolvidos com o Sis ATMH (tais como: órgãos federais, estaduais, municipais, universidades e usuários da sociedade), utilizando arquivos XML para a padronização dos dados disponibilizados, visando melhorar a qualidade, integridade e acesso às informações e reduzir os desperdícios de recursos, como também, as falhas de comunicações.

A empresa Holding do Projeto de Sis ATMH foi designada para realizar tal tarefa, porém não existe ainda um sistema de informação capaz de propiciar tal necessidade. Este sistema deve estar disponível, sem completeza, em junho de 2009.

2.5.2. Re-Identificação do Problema

2.5.2.1. Efeitos Adversos (O que está errado?)

Ea1: Ineficiência no gerenciamento de difusão de dados;

Ea2: Aumento da utilização de recursos envolvidos, como: tempo, humanos,

financeiros e materiais;

(9)

Ea4: Não se consegue acessar informações hidrológicas em uma única fonte

de dados;

Ea5: Existem falhas de comunicação;

Ea6: Os dados hidrológicos estão espalhados em diversos bancos de dados; e Ea7: Os dados e/ou informações não são, adequadamente, disponibilizadas.

2.5.2.2. Causas (Por que está errado?)

C1: Não existe um mecanismo que difunde os dados de maneira coordenada e

filtrada para os usuários externos;

C2: Não existe qualidade e integridade para o acesso às informações;

C3: Não possui um serviço Web para disponibilizar as informações de forma

dinâmica;

C4: Não existe um controle de quando as informações foram alteradas e/ou

difundidas;

C5: As pessoas não possuem informações hidrológicas que ocasionam riscos

à sociedade;

C6: Não existe um software e/ou aplicativo que permita o acesso às

informações hidrológicas de forma concentrada; e

C7: Não Existe uma padronização para disponibilização dos dados.

2.5.2.3. Tarefa (O que, quando e onde se deseja realizar?)

Dotar a Difusão de Dados via Web Services, o Gerenciamento via Web Server e a Padronização dos dados disponibilizados, via XML, do Projeto de Sistema de Aquisição, Tratamento, Monitoramento e Difusão de Dados Hidrológicos (Sis ATMH), até o final do 1º Semestre Letivo de 2009, de um Aplicativo de Banco de Dados capaz de propiciar a difusão e distribuição de informações hidrológicas (tais como: índices de chuvas, índices de poluição e níveis de rios) para os envolvidos no Sistema, como: órgãos federais, estaduais, municipais, universidades e usuários da sociedade.

(10)

2.5.2.4. Propósito (Para que se deseja realizar tal tarefa?)

Visando atender a qualidade, integridade e acesso às informações e reduzir os desperdícios de recursos envolvidos como: tempo, humanos, financeiros e materiais, bem como as falhas de comunicações.

2.5.2.5. Enunciado do Problema (Objetivo + Finalidade)

Dotar a Difusão de Dados via Web Services, o Gerenciamento via Web Server e a Padronização dos dados disponibilizados, via XML, do Projeto de Sistema de Aquisição, Tratamento, Monitoramento e Difusão de Dados Hidrológicos (Sis ATMH), até o final do 1º Semestre Letivo de 2009, de um Aplicativo de Banco de Dados capaz de propiciar a difusão e distribuição de informações hidrológicas (tais como: índices de chuvas, índices de poluição e níveis de rios) para os envolvidos no Sistema, como: órgãos federais, estaduais, municipais, universidades e usuários da sociedade, visando atender a qualidade, integridade e acesso às informações e reduzir os desperdícios de recursos envolvidos como: tempo, humanos, financeiros e materiais, bem como as falhas de comunicações.

2.5.3. Definição da Solução

2.5.3.1. Alternativas de Soluções Possíveis (ASP)

ASP1: Desenvolver um Protótipo de Aplicativo de Banco de Dados de acordo

com os requisitos específicos para o Projeto Sis ATMH, que propicie a Difusão de Dados via Web Services, o Gerenciamento via Web Server e a Padronização dos dados disponibilizados, via XML, até o final do 1º Semestre Letivo de 2009;

ASP2: Manter a situação atual com o sistema; e

ASP3: Comprar uma solução pronta, visando atender as necessidades do

(11)

2.5.3.2. Análise APA (Adequabilidade + Praticabilidade + Aceitabilidade)

APA1: ASP1 à Atende quanto a Adequabilidade, Praticabilidade e

Aceitabilidade, portanto é ADEQUADA, PRATICÁVEL e ACEITÁVEL;

APA2: ASP2 à Não é possível afinidade, portanto é considerada INADEQUADA; e

APA3: ASP3 à Não é praticável, pois o fator de qualidade não está presente,

visto que a compra de uma solução pronta certamente não atenderá a todos os requisitos mínimos, necessários e suficientes para atender as necessidades do Projeto Sis ATMH, portanto é IMPRATICÁVEL.

2.5.3.3. Alternativa de Solução Escolhida (ASE)

ASE1: ASP1 à Desenvolver um Protótipo de Aplicativo de Banco de Dados de

acordo com os requisitos específicos para o Projeto Sis ATMH, que propicie a Difusão de Dados via Web Services, o Gerenciamento via Web Server e a Padronização dos dados disponibilizados, via XML, até o final do 1º Semestre Letivo de 2009;

2.5.3.4. Enunciado da Solução

Desenvolver um Protótipo de Aplicativo de Banco de Dados de acordo com os requisitos específicos para o Projeto Sis ATMH, que propicie a Difusão de Dados via Web Services, o Gerenciamento via Web Server e a Padronização dos dados disponibilizados, via XML, até o final do 1º Semestre Letivo de 2009, a fim de melhorar a difusão e distribuição das informações hidrológicas, a qualidade, integridade e acesso às informações, e reduzir os desperdícios de recursos, bem como as falhas de comunicações.

2.5.4. Re-Definição do Título

Um Aplicativo de Banco de Dados para o Sistema de Difusão de Dados via

(12)

2.5.5. Re-Especificação de Requisitos

1) O SDD deverá ser capaz de propiciar a interoperabilidade com o Módulo de Segurança da ANA;

2) O SDD deverá ser capaz de propiciar a customização da classificação de informações hidrológicas e/ou operacionais (como por exemplo, ostensiva, confidencial e evento crítico);

3) O SDD deverá ser capaz de propiciar a customização do acesso às informações hidrológicas e/ou operacionais aos interessados (como por exemplo, órgãos federais, estaduais, municipais, universidades e usuários da sociedade);

4) O SDD deverá ser capaz de propiciar a difusão de informações hidrológicas e/ou operacionais, pelos seguintes meios:

a. Disponibilização de Dados por Web Services (DWS),

b. Gerenciamento da Difusão de Dados por Web Server (GDD), e c. Padronização da Difusão por exportação de pacotes de Dados

(PDD).

5) O SDD deverá ser capaz de propiciar uma interface para feedback das informações difundidas aos interessados (como por exemplo núcleos regionais, universidades, países envolvidos e sociedade).

2.6. CHECAGEM DAS IMPLEMENTAÇÕES DO GRUPO NA LISTEX 04

De acordo com as implementações realizadas na Listex 4 pelos demais integrantes do grupo, foi necessário verificar e testar se as 04 (quatro) consultas (ou queries), no Nível de Decisão Operacional desenvolvidas envolvendo 1 (uma), 2 (duas), 3 (três) e/ou mais relações dos Aplicativos de Banco de Dados DWS e PDD, encontram-se aceitáveis, com o Aplicativo de Banco de Bancos GDD, para o Banco de Dados Setorial (BDS).

(13)

2.6.1. Verificação das Consultas realizadas nos ABD DWS e PDD

Por meio dos Modelos de Dados Relacionais, na 3ªFN, dos Aplicativos de BD DWS e PDD, demonstram-se abaixo, as verificações e os testes das 04 (quatro) consultas (ou queries) em Linguagem Natural (LN) e Linguagem Estruturada de Consultas (Structured Query Language – SQL).

As verificações e os testes serão realizados a partir da integração dos Aplicativos de BD, ao Banco de Dados Setorial (BDS), a fim de validar a aceitabilidade dos respectivos Aplicativos de BD, para o BDS.

2.6.1.1. Primeira Consulta

A Primeira Consulta deverá envolver uma relação e pelo menos um comando

Select e um comando Project (ou equivalentes):

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS Encontre o nome do orgão de código igual a 1

SELECT org_nm FROM SDDTB_ORGAO WHERE org_id = 1;

Anexo A.1

GDD Encontre o código do tipo de dado com a descrição Confidencial SELECT tip_id FROM SDDTB_TIPDADO WHERE tip_tx_descricao= 'Confidencial'; Anexo A.2

PDD Encontre o serviço de código igual a 2 SELECT ser_tx_titulo FROM SDDTB_SERVICO WHERE ser_id = 2; Anexo A.3 2.6.1.2. Segunda Consulta

A Segunda Consulta deverá envolver duas relações e pelo menos um comando Select, um Project e um Join (ou equivalentes):

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS Encontre o código de acesso do orgão com o nome igual a CPTEC

SELECT ace.ace_id

FROM SDDTB_ORGAO org, SDDTB_ACESSO ace

WHERE org.org_nm='CPTEC' AND org.org_id = ace.ace_org_id;

(14)

GDD Encontre a descrição e a data do gerenciamento para as difusões ocorridas no dia 11/05/09

SELECT ger.ger_tx_descricao, ger.ger_dt

FROM SDDTB_DIFUSAO dif, SDDTB_GERENCIAMENTO ger WHERE dif.dif_dt= '11.05.09' AND dif.dif_ger_id = ger.ger_id;

Anexo A.5

PDD Encontrem os códigos dos contratos que utilizam o serviço de Informações de Telemetria

SELECT con.con_id

FROM SDDTB_SERVICO ser, SDDTB_CONTRATO con WHERE ser.ser_tx_titulo= 'Informações de Telemetria' AND ser.ser_id = con.con_ser_id;

Anexo A.6

2.6.1.3. Terceira Consulta

A Terceira Consulta deverá envolver três ou mais relações e pelo menos um comando Select, um Project e um Join (ou equivalentes):

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS Encontrem os nomes dos órgãos e os Dados Hidrológicos que podem ser acessados por eles, para os dados que foram difundidos no dia 13/05/09

SELECT org.org_nm, dhi.dhi_tx_descricao

FROM SDDTB_ORGAO org, SDDTB_ACESSO ace, SDDTB_CONTRATO con, SDDTB_FUNCAO fun, SDDTB_GERENCIAMENTO ger, SDDTB_DIFUSAO dif, SDDTB_DADOHIDRO dhi WHERE dif.dif_dt='13.05.09' AND dif.dif_dhi_id = dhi.dhi_id AND dif.dif_ger_id = ger.ger_id AND ger.ger_fun_id = fun.fun_id AND con.con_fun_id = fun.fun_id AND ace.ace_id = con.con_ace_id AND org.org_id = ace.ace_org_id;

Anexo A.7

GDD Encontre o dado hidrológico, a cidade de coleta e o tipo de dado a ser difundido, para o gerenciamento ocorrido no dia 10/05/09 SELECT dhi.dhi_tx_descricao, dhi.dhi_tx_cidade, tip.tip_tx_descricao FROM SDDTB_GERENCIAMENTO ger, SDDTB_DIFUSAO dif, SDDTB_DADOHIDRO dhi, SDDTB_TIPDADO tip WHERE ger.ger_dt= '10.05.09' AND dif.dif_ger_id = ger.ger_id AND dif.dif_tip_id = tip.tip_id AND dif.dif_dhi_id = dhi.dhi_id;

(15)

PDD Encontrem as funções que são utilizadas pelo serviço de Informações Hidrológicas

SELECT fun.fun_tx_titulo FROM SDDTB_SERVICO ser, SDDTB_CONTRATO con, SDDTB_FUNCAO fun WHERE ser.ser_tx_titulo= 'Informações Hidrológicas' AND ser.ser_id = con.con_ser_id AND con.con_fun_id = fun.fun_id GROUP BY fun.fun_tx_titulo;

Anexo A.9

2.6.1.4. Quarta Consulta

A Quarta Consulta deverá ser georreferenciada e envolver pelo menos duas relações, um comando Select, um Project e um Join (ou equivalentes):

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS Encontrem os nomes dos órgãos e os Dados Hidrológicos que podem ser acessados por eles, para os dados localizados na longitude entre -9.08 à -7.29 e de latitude entre 13.35 à -8.38

SELECT org.org_nm, dhi.dhi_tx_descricao

FROM SDDTB_ORGAO org, SDDTB_ACESSO ace, SDDTB_CONTRATO con, SDDTB_FUNCAO fun, SDDTB_GERENCIAMENTO ger, SDDTB_DIFUSAO dif, SDDTB_DADOHIDRO dhi WHERE SDO_FILTER(dhi.dhi_ft_localizacao, SDO_GEOMETRY(2003,8292,NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(-9.08,-13.35,-7.29, -8.38))) = 'TRUE'

AND dhi.dhi_id = dif.dif_dhi_id AND dif.dif_ger_id = ger.ger_id AND ger.ger_fun_id = fun.fun_id AND con.con_fun_id = fun.fun_id AND ace.ace_id = con.con_ace_id AND org.org_id = ace.ace_org_id order by org.org_nm;

(16)

GDD Encontre o tipo de dado que foi difundido no dia 13/05/09, na posição de longitude entre -9.08 à -7.29 e de latitude entre -13.35 à -8.38

SELECT tip.tip_tx_descricao FROM SDDTB_DADOHIDRO dhi, SDDTB_DIFUSAO dif, SDDTB_TIPDADO tip WHERE SDO_FILTER(dhi.dhi_ft_localizacao, SDO_GEOMETRY(2003,8292,NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(-9.08,-13.35,-7.29,-8.38))) = 'TRUE' AND dif.dif_dhi_id = dhi.dhi_id AND dif.dif_dt = '13.05.09' AND dif.dif_tip_id = tip.tip_id;

Anexo A.11

PDD Encontrem os serviços que são utilizados para executar funções para buscar os dados hidrológicos localizados na longitude entre -9.08 à -7.29 e de latitude entre -13.35 à -8.38

SELECT ser.ser_tx_titulo FROM SDDTB_SERVICO ser, SDDTB_CONTRATO con, SDDTB_FUNCAO fun, SDDTB_GERENCIAMENTO ger, SDDTB_DIFUSAO dif, SDDTB_DADOHIDRO dhi WHERE SDO_FILTER(dhi.dhi_ft_localizacao, SDO_GEOMETRY(2003,8292,NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(-9.08,-13.35,-7.29, -8.38))) = 'TRUE'

AND dhi.dhi_id = dif.dif_dhi_id AND dif.dif_ger_id = ger.ger_id AND ger.ger_fun_id = fun.fun_id AND con.con_fun_id = fun.fun_id AND ser.ser_id = con.con_ser_id GROUP BY ser.ser_tx_titulo;

Anexo A.12

2.7. CONSULTAS NO BANCO DE DADOS SETORIAL (BDS) MDD-DD

Logo abaixo será demonstrado à implementação de 04 (quatro) consultas (queries) adicionais, como parte dos Aplicativos de BD DWS, GDD e PDD devidamente integrado no Aplicativo de Banco de Dados Setorial (BDS).

2.7.1. Quinta Consulta

A Quinta Consulta deverá ser formulada e implementada no Nível de Decisão Tático, envolvendo, simultaneamente, pelo menos 01 (uma) relação do Aplicativo de BD GDD e 01 (uma) relação de um Aplicativo de BD DWS ou

(17)

PDD, mas que esteja debaixo do Banco de Dados Setorial (BDS) ou Subject

Database.

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS Encontrem os tipos de dados que possuem um acesso de código igual a 1

SELECT tip.tip_tx_descricao FROM SDDTB_TIPDADO tip, SDDTB_DIFUSAO dif, SDDTB_GERENCIAMENTO ger, SDDTB_FUNCAO fun, SDDTB_CONTRATO con, SDDTB_ACESSO ace WHERE ace.ace_id = 1

AND ace.ace_id = con.con_ace_id AND con.con_fun_id = fun.fun_id AND fun.fun_id = ger.ger_fun_id AND ger.ger_id = dif.dif_ger_id AND dif.dif_tip_id = tip.tip_id GROUP BY tip.tip_tx_descricao;

Anexo A.13

PDD Encontrem os gerenciamentos que utilizaram a função getVolumeDeRios()

SELECT ger.ger_tx_descricao FROM SDDTB_GERENCIAMENTO ger, SDDTB_FUNCAO fun

WHERE

fun.fun_tx_titulo='getVolumeDeRios()' AND fun.fun_id = ger.ger_fun_id;

Anexo A.14

2.7.2. Sexta Consulta

A Sexta Consulta deverá ser também formulada e implementada no Nível de Decisão Tático, envolvendo, simultaneamente uma relação do Aplicativo de BD GDD e 01 (uma) relação de 02 (dois) Aplicativos de BD (DWS e PDD), que estejam debaixo do Banco de Dados Setorial (BDS) ou Subject Database.

(18)

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS e PDD

Encontrem as datas de gerenciamento, para o acesso de código igual a 3

SELECT ger.ger_dt FROM

SDDTB_GERENCIAMENTO ger, SDDTB_FUNCAO fun, SDDTB_CONTRATO con, SDDTB_ACESSO ace WHERE ace.ace_id = 3 AND ace.ace_id = con.con_ace_id AND con.con_fun_id = fun.fun_id AND fun.fun_id = ger.ger_fun_id GROUP BY ger.ger_dt; Anexo A.15 2.7.3. Sétima Consulta

A Sétima Consulta deverá ser formulada e implementada Nível de Decisão Tático, envolvendo, simultaneamente uma relação do Aplicativo de BD GDD e 02 (duas) relações de 02 (dois) Aplicativos de BD (DWS e PDD).

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS e PDD

Encontrem os gerenciamentos que foram realizamos para o órgão IPH-UFRGS

SELECT ger.ger_tx_descricao FROM

SDDTB_GERENCIAMENTO ger, SDDTB_FUNCAO fun, SDDTB_CONTRATO con, SDDTB_ACESSO ace, SDDTB_ORGAO org WHERE org.org_nm='IPH-UFRGS' AND org.org_id = ace.ace_org_id AND ace.ace_id = con.con_ace_id AND con.con_fun_id = fun.fun_id AND fun.fun_id = ger.ger_fun_id; Anexo A.16

(19)

2.7.4. Oitava Consulta

A Oitava Consulta deverá ser georreferenciada e também formulada e implementada Nível de Decisão Tático, envolvendo, simultaneamente uma relação georreferenciada do Aplicativo de BD GDD e pelo menos 01 (uma) relação georreferenciada de pelo menos 01 (um) Aplicativo de BD georreferenciado (DWS ou PDD), e que esteja debaixo do Banco de Dados Setorial BDS ou Subject Database.

Observação: Durante a integração, verificaram-se algumas anomalias existentes. Para isso, foi necessário manter somente uma tabela que possui um atributo georreferenciado. Com essa realizade, logo a seguir será implementado uma consulta georreferenciado para encontrar a Origem, o Destino e a Distância das localizações de coleta dos Dados Hidrológicos.

Aplicativos Consulta Linguagem Natural Consulta SQL Resultados

DWS, GDD e PDD

Encontre a Origem, o Destino e a Distância das localizações de coleta dos Dados Hidrológicos

SELECT dhiA.dhi_id Origem, dhiB.dhi_id Destino, MDSYS.SDO_GEOM.SDO_DI STANCE(dhiA.dhi_ft_localizaca o, dhiB.dhi_ft_localizacao, 0.005) FROM SDDTB_DADOHIDRO dhiA, SDDTB_DADOHIDRO dhiB WHERE dhiA.dhi_id < dhiB.dhi_id; Anexo A.17 2.8. ANOMALIAS ELIMINADAS

Durante a fase de integração e implementação do BDS, houve a necessidade de eliminar anomalias encontradas, obtida no processo, até atingir-se uma 3ªFN aceitável. As anomalias foram:

1) As novas entidades SDDTB_DADOHIDRO e SDDTB_TIPDADO correspondem com as mesmas informações cabíveis nos ABD DWS e GDD;

(20)

2) Houve a necessidade de eliminar 3 (três) entidades do Aplicativo de BD DWS, devido a inconsistência dos dados na fase de integração;

3) Houve a necessidade de re-normalizar, a fim de que os relacionamentos, a partir do Modelo Entidade e Relacionamento (MER) de cada ABD, pudessem ser aceitáveis na 3ªFN;

4) Houve a necessidade de manter somente uma entidade envolvendo o atributo georreferenciado (dhi_ft_localizacao), devido às eventuais duplicidades;

5) No ABD PDD foi necessário eliminar a entidade Permissao, por que os dados georreferenciados serão cadastrados, modificados, excluídos e consultados na nova entidade SDDTB_DADOHIDRO, através do atributo dhi_ft_localizacao; e

6) Os ABD DWS, GDD e PDD, utilizarão somente uma entidade para representar dados georreferenciados, através do atributo dhi_ft_localizacao, na entidade SDDTB_DADOHIDRO.

(21)

3 CONCLUSÃO

Ao final da integração do Banco de Dados Setorial, que foi realizada com sucesso, pode-se notar que o trabalho em grupo, e sincronizado, é fundamental. E durante a integração, pequenas modificações se fizeram necessárias, tais como, nomes de atributos, relações com novas Entidades foram mudadas e entidades redundantes.

Já com o Banco de Dados Setorial implementado, comprovou-se que a integração foi realizada com êxito, através de consultas de verificação e teste, envolvendo várias relações simultaneamente.

Após a realização desta Lista de Exercícios (ListEx 05), foi possível verificar a importância da utilização das técnicas de Normalização, Trigramação, entre outros, minimizando assim gastos futuros com reparos de erros. A implantação no Oracle 11g dos Scripts SQL gerados foram realizados com sucesso, permitindo elaborar as Consultas (queries), completando assim os requisitos da Lista de Exercícios.

(22)

ANEXO A – RESULTADOS DAS CONSULTAS REALIZADAS

Anexo A.1 – Demonstração de Consulta envolvendo uma relação do Aplicativo de Banco de Dados DWS

(23)

Anexo A.2 – Demonstração de Consulta envolvendo uma relação do Aplicativo de Banco de Dados GDD

Anexo A.3 – Demonstração de Consulta envolvendo uma relação do Aplicativo de Banco de Dados PDD

(24)

Anexo A.4 – Demonstração de Consulta envolvendo duas relações do Aplicativo de Banco de Dados DWS

(25)

Anexo A.5 – Demonstração de Consulta envolvendo duas relações do Aplicativo de Banco de Dados GDD

(26)

Anexo A.6 – Demonstração de Consulta envolvendo duas relações do Aplicativo de Banco de Dados PDD

(27)

Anexo A.7 – Demonstração de Consulta envolvendo três ou mais relações do Aplicativo de Banco de Dados DWS

(28)

Anexo A.8 – Demonstração de Consulta envolvendo três ou mais relações do Aplicativo de Banco de Dados GDD

Anexo A.9 – Demonstração de Consulta envolvendo três ou mais relações do Aplicativo de Banco de Dados PDD

(29)

Anexo A.10 – Demonstração de Consulta Georreferenciada envolvendo pelo menos duas relações do Aplicativo de Banco de Dados DWS

(30)

Anexo A.11 – Demonstração de Consulta Georreferenciada envolvendo pelo menos duas relações do Aplicativo de Banco de Dados GDD

(31)

Anexo A.12 – Demonstração de Consulta Georreferenciada envolvendo pelo menos duas relações do Aplicativo de Banco de Dados PDD

(32)

Anexo A.13 – Demonstração de Consulta envolvendo 01(uma) relação do Aplicativo de BD GDD, com 01(uma) relação do Aplicativo de BD DWS

(33)

Anexo A.14 – Demonstração de Consulta envolvendo 01 (uma) relação do Aplicativo de BD GDD, com 01 (uma) relação do Aplicativo de BD PDD

(34)

Anexo A.15 – Demonstração de Consulta envolvendo 01 (uma) relação do Aplicativo de BD GDD, com 01(uma) relação de 02(dois) Aplicativos de BD (DWS

(35)

Anexo A.16 – Demonstração de Consulta envolvendo 01 (uma) relação do Aplicativo de BD GDD, com 02(duas) relações de 02(dois) Aplicativos de BD

(36)

Anexo A.17 – Demonstração de Consulta encontrando a Origem, o Destino e a Distância das localizações de coletas dos Dados Hidrológicos

(37)

ANEXO B – MODELO ENTIDADE E RELACIONAMENTO (MER)

DO APLICATIVO DE BANCO DE DADOS SETORIAL, CRIADO

NO ERWIN 7

(38)

ANEXO C – SCRIPT GERADO, PELO ERWIN 7, PARA O

APLICATIVO DE BANCO DE DADOS SETORIAL (BDS)

CREATE TABLE SDDTB_ACESSO ( ace_id INTEGER NOT NULL, ace_org_id INTEGER NOT NULL );

CREATE UNIQUE INDEX XPKSDDTB_ACESSO ON SDDTB_ACESSO (

ace_id ASC );

ALTER TABLE SDDTB_ACESSO

ADD ( CONSTRAINT XPKSDDTB_ACESSO PRIMARY KEY (ace_id) ) ;

CREATE TABLE SDDTB_CONTRATO ( con_id INTEGER NOT NULL, con_ser_id INTEGER NOT NULL, con_fun_id INTEGER NOT NULL, con_ace_id INTEGER NOT NULL );

CREATE UNIQUE INDEX XPKSDDTB_CONTRATO ON SDDTB_CONTRATO ( con_id ASC, con_ser_id ASC, con_fun_id ASC, con_ace_id ASC );

(39)

ALTER TABLE SDDTB_CONTRATO

ADD ( CONSTRAINT XPKSDDTB_CONTRATO PRIMARY KEY (con_id, con_ser_id, con_fun_id, con_ace_id) ) ;

CREATE TABLE SDDTB_DADOHIDRO (

dhi_ft_localizacao VARCHAR2(100) NULL, dhi_tx_cidade VARCHAR2(100) NULL, dhi_tx_descricao VARCHAR2(500) NULL, dhi_id INTEGER NOT NULL

);

CREATE UNIQUE INDEX XPKSDDTB_DADOHIDRO ON

SDDTB_DADOHIDRO (

dhi_id ASC );

ALTER TABLE SDDTB_DADOHIDRO

ADD ( CONSTRAINT XPKSDDTB_DADOHIDRO PRIMARY KEY (dhi_id) ) ;

CREATE TABLE SDDTB_DIFUSAO ( dif_dt DATE NULL,

dif_dhi_id INTEGER NOT NULL, dif_tip_id INTEGER NOT NULL, dif_ger_id INTEGER NOT NULL );

CREATE UNIQUE INDEX XPKSDDTB_DIFUSAO ON SDDTB_DIFUSAO (

(40)

dif_dhi_id ASC, dif_tip_id ASC, dif_ger_id ASC );

ALTER TABLE SDDTB_DIFUSAO

ADD ( CONSTRAINT XPKSDDTB_DIFUSAO PRIMARY KEY (dif_dhi_id, dif_tip_id, dif_ger_id) ) ;

CREATE TABLE SDDTB_FUNCAO ( fun_id INTEGER NOT NULL, fun_tx_titulo VARCHAR2(100) NULL, fun_tx_descricao VARCHAR2(500) NULL );

CREATE UNIQUE INDEX XPKSDDTB_FUNCAO ON SDDTB_FUNCAO (

fun_id ASC );

ALTER TABLE SDDTB_FUNCAO

ADD ( CONSTRAINT XPKSDDTB_FUNCAO PRIMARY KEY (fun_id) ) ;

CREATE TABLE SDDTB_GERENCIAMENTO ( ger_id INTEGER NOT NULL,

ger_tx_descricao VARCHAR2(500) NULL, ger_dt DATE NULL,

ger_fun_id INTEGER NOT NULL );

(41)

CREATE UNIQUE INDEX XPKSDDTB_GERENCIAMENTO ON SDDTB_GERENCIAMENTO

(

ger_id ASC );

ALTER TABLE SDDTB_GERENCIAMENTO

ADD ( CONSTRAINT XPKSDDTB_GERENCIAMENTO PRIMARY KEY (ger_id) ) ;

CREATE TABLE SDDTB_ORGAO (

org_nm VARCHAR2(100) NULL, org_tx VARCHAR2(500) NULL, org_id INTEGER NOT NULL );

CREATE UNIQUE INDEX XPKSDDTB_ORGAO ON SDDTB_ORGAO (

org_id ASC );

ALTER TABLE SDDTB_ORGAO

ADD ( CONSTRAINT XPKSDDTB_ORGAO PRIMARY KEY (org_id) ) ;

CREATE TABLE SDDTB_SERVICO ( ser_id INTEGER NOT NULL, ser_tx_titulo VARCHAR2(100) NULL, ser_ic_ativo CHAR(1) NULL

(42)

CREATE UNIQUE INDEX XPKSDDTB_SERVICO ON SDDTB_SERVICO (

ser_id ASC );

ALTER TABLE SDDTB_SERVICO

ADD ( CONSTRAINT XPKSDDTB_SERVICO PRIMARY KEY (ser_id) ) ;

CREATE TABLE SDDTB_TIPDADO ( tip_id INTEGER NOT NULL,

tip_tx_descricao VARCHAR2(500) NULL, tip_ic_ativo CHAR(1) NULL

);

CREATE UNIQUE INDEX XPKSDDTB_TIPDADO ON SDDTB_TIPDADO (

tip_id ASC );

ALTER TABLE SDDTB_TIPDADO

ADD ( CONSTRAINT XPKSDDTB_TIPDADO PRIMARY KEY (tip_id) ) ;

ALTER TABLE SDDTB_ACESSO ADD ( CONSTRAINT R_45 FOREIGN KEY (ace_org_id)

REFERENCES SDDTB_ORGAO ) ;

ALTER TABLE SDDTB_CONTRATO ADD ( CONSTRAINT R_46

(43)

FOREIGN KEY (con_ace_id)

REFERENCES SDDTB_ACESSO ) ;

ALTER TABLE SDDTB_CONTRATO ADD ( CONSTRAINT R_44 FOREIGN KEY (con_fun_id)

REFERENCES SDDTB_FUNCAO ) ;

ALTER TABLE SDDTB_CONTRATO ADD ( CONSTRAINT R_43 FOREIGN KEY (con_ser_id)

REFERENCES SDDTB_SERVICO ) ;

ALTER TABLE SDDTB_DIFUSAO ADD ( CONSTRAINT R_39 FOREIGN KEY (dif_ger_id)

REFERENCES SDDTB_GERENCIAMENTO ) ;

ALTER TABLE SDDTB_DIFUSAO ADD ( CONSTRAINT R_37 FOREIGN KEY (dif_tip_id)

REFERENCES SDDTB_TIPDADO ) ;

ALTER TABLE SDDTB_DIFUSAO ADD ( CONSTRAINT R_36 FOREIGN KEY (dif_dhi_id)

(44)

ALTER TABLE SDDTB_GERENCIAMENTO ADD ( CONSTRAINT R_41

FOREIGN KEY (ger_fun_id)

REFERENCES SDDTB_FUNCAO ) ;

create or replace trigger tD_SDDTB_ACESSO after DELETE on SDDTB_ACESSO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- DELETE trigger on SDDTB_ACESSO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ACESSO R/46 SDDTB_CONTRATO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ACESSO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/46", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_46", FK_COLUMNS="con_ace_id" */ select count(*) into numrows

from SDDTB_CONTRATO where /* %JoinFKPK(SDDTB_CONTRATO,:%Old," = "," and") */ SDDTB_CONTRATO.con_ace_id = :old.ace_id; if (numrows > 0) then raise_application_error( -20001,

'Cannot DELETE SDDTB_ACESSO because SDDTB_CONTRATO exists.' );

(45)

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tI_SDDTB_ACESSO after INSERT on SDDTB_ACESSO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- INSERT trigger on SDDTB_ACESSO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ORGAO R/45 SDDTB_ACESSO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ORGAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_ACESSO" P2C_VERB_PHRASE="R/45", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_45", FK_COLUMNS="ace_org_id" */ select count(*) into numrows

from SDDTB_ORGAO where

/* %JoinFKPK(:%New,SDDTB_ORGAO," = "," and") */ :new.ace_org_id = SDDTB_ORGAO.org_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20002,

(46)

'Cannot INSERT SDDTB_ACESSO because SDDTB_ORGAO does not exist.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_ACESSO after UPDATE on SDDTB_ACESSO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_ACESSO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ACESSO R/46 SDDTB_CONTRATO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ACESSO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/46", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_46", FK_COLUMNS="con_ace_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.ace_id <> :new.ace_id then

select count(*) into numrows from SDDTB_CONTRATO where

/* %JoinFKPK(SDDTB_CONTRATO,:%Old," = "," and") */ SDDTB_CONTRATO.con_ace_id = :old.ace_id;

(47)

then

raise_application_error( -20005,

'Cannot UPDATE SDDTB_ACESSO because SDDTB_CONTRATO exists.'

); end if; end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ORGAO R/45 SDDTB_ACESSO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ORGAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_ACESSO" P2C_VERB_PHRASE="R/45", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_45", FK_COLUMNS="ace_org_id" */ select count(*) into numrows

from SDDTB_ORGAO where

/* %JoinFKPK(:%New,SDDTB_ORGAO," = "," and") */ :new.ace_org_id = SDDTB_ORGAO.org_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

'Cannot UPDATE SDDTB_ACESSO because SDDTB_ORGAO does not exist.'

); end if;

(48)

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tI_SDDTB_CONTRATO after INSERT on SDDTB_CONTRATO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- INSERT trigger on SDDTB_CONTRATO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ACESSO R/46 SDDTB_CONTRATO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ACESSO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/46", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_46", FK_COLUMNS="con_ace_id" */ select count(*) into numrows

from SDDTB_ACESSO where

/* %JoinFKPK(:%New,SDDTB_ACESSO," = "," and") */ :new.con_ace_id = SDDTB_ACESSO.ace_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20002,

(49)

'Cannot INSERT SDDTB_CONTRATO because SDDTB_ACESSO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/44 SDDTB_CONTRATO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/44", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_44", FK_COLUMNS="con_fun_id" */ select count(*) into numrows

from SDDTB_FUNCAO where

/* %JoinFKPK(:%New,SDDTB_FUNCAO," = "," and") */ :new.con_fun_id = SDDTB_FUNCAO.fun_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20002,

'Cannot INSERT SDDTB_CONTRATO because SDDTB_FUNCAO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_SERVICO R/43 SDDTB_CONTRATO ON CHILD INSERT RESTRICT */

(50)

/* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_SERVICO"

CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/43", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_43", FK_COLUMNS="con_ser_id" */ select count(*) into numrows

from SDDTB_SERVICO where

/* %JoinFKPK(:%New,SDDTB_SERVICO," = "," and") */ :new.con_ser_id = SDDTB_SERVICO.ser_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20002,

'Cannot INSERT SDDTB_CONTRATO because SDDTB_SERVICO does not exist.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_CONTRATO after UPDATE on SDDTB_CONTRATO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_CONTRATO declare numrows INTEGER;

(51)

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ACESSO R/46 SDDTB_CONTRATO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ACESSO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/46", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_46", FK_COLUMNS="con_ace_id" */ select count(*) into numrows

from SDDTB_ACESSO where

/* %JoinFKPK(:%New,SDDTB_ACESSO," = "," and") */ :new.con_ace_id = SDDTB_ACESSO.ace_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

'Cannot UPDATE SDDTB_CONTRATO because SDDTB_ACESSO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/44 SDDTB_CONTRATO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/44", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_44", FK_COLUMNS="con_fun_id" */

(52)

select count(*) into numrows from SDDTB_FUNCAO where /* %JoinFKPK(:%New,SDDTB_FUNCAO," = "," and") */ :new.con_fun_id = SDDTB_FUNCAO.fun_id; if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

'Cannot UPDATE SDDTB_CONTRATO because SDDTB_FUNCAO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_SERVICO R/43 SDDTB_CONTRATO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_SERVICO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/43", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_43", FK_COLUMNS="con_ser_id" */ select count(*) into numrows

from SDDTB_SERVICO where

/* %JoinFKPK(:%New,SDDTB_SERVICO," = "," and") */ :new.con_ser_id = SDDTB_SERVICO.ser_id;

if (

/* %NotnullFK(:%New," is not null and") */

(53)

numrows = 0 )

then

raise_application_error( -20007,

'Cannot UPDATE SDDTB_CONTRATO because SDDTB_SERVICO does not exist.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tD_SDDTB_DADOHIDRO after DELETE on SDDTB_DADOHIDRO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- DELETE trigger on SDDTB_DADOHIDRO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_DADOHIDRO R/36 SDDTB_DIFUSAO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_DADOHIDRO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/36", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_36", FK_COLUMNS="dif_dhi_id" */ select count(*) into numrows

from SDDTB_DIFUSAO where

/* %JoinFKPK(SDDTB_DIFUSAO,:%Old," = "," and") */ SDDTB_DIFUSAO.dif_dhi_id = :old.dhi_id;

(54)

if (numrows > 0) then

raise_application_error( -20001,

'Cannot DELETE SDDTB_DADOHIDRO because SDDTB_DIFUSAO exists.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_DADOHIDRO after UPDATE on SDDTB_DADOHIDRO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_DADOHIDRO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_DADOHIDRO R/36 SDDTB_DIFUSAO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_DADOHIDRO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/36", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_36", FK_COLUMNS="dif_dhi_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.dhi_id <> :new.dhi_id then

select count(*) into numrows from SDDTB_DIFUSAO

(55)

where /* %JoinFKPK(SDDTB_DIFUSAO,:%Old," = "," and") */ SDDTB_DIFUSAO.dif_dhi_id = :old.dhi_id; if (numrows > 0) then raise_application_error( -20005,

'Cannot UPDATE SDDTB_DADOHIDRO because SDDTB_DIFUSAO exists.'

); end if; end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tI_SDDTB_DIFUSAO after INSERT on SDDTB_DIFUSAO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- INSERT trigger on SDDTB_DIFUSAO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_GERENCIAMENTO R/39 SDDTB_DIFUSAO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_GERENCIAMENTO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/39", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_39", FK_COLUMNS="dif_ger_id" */ select count(*) into numrows

(56)

where

/* %JoinFKPK(:%New,SDDTB_GERENCIAMENTO," = "," and") */ :new.dif_ger_id = SDDTB_GERENCIAMENTO.ger_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20002,

'Cannot INSERT SDDTB_DIFUSAO because SDDTB_GERENCIAMENTO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_TIPDADO R/37 SDDTB_DIFUSAO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_TIPDADO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/37", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_37", FK_COLUMNS="dif_tip_id" */ select count(*) into numrows

from SDDTB_TIPDADO where

/* %JoinFKPK(:%New,SDDTB_TIPDADO," = "," and") */ :new.dif_tip_id = SDDTB_TIPDADO.tip_id;

if (

/* %NotnullFK(:%New," is not null and") */

numrows = 0 )

(57)

then

raise_application_error( -20002,

'Cannot INSERT SDDTB_DIFUSAO because SDDTB_TIPDADO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_DADOHIDRO R/36 SDDTB_DIFUSAO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_DADOHIDRO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/36", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_36", FK_COLUMNS="dif_dhi_id" */ select count(*) into numrows

from SDDTB_DADOHIDRO where

/* %JoinFKPK(:%New,SDDTB_DADOHIDRO," = "," and") */ :new.dif_dhi_id = SDDTB_DADOHIDRO.dhi_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20002,

'Cannot INSERT SDDTB_DIFUSAO because SDDTB_DADOHIDRO does not exist.'

); end if;

(58)

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_DIFUSAO after UPDATE on SDDTB_DIFUSAO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_DIFUSAO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_GERENCIAMENTO R/39 SDDTB_DIFUSAO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_GERENCIAMENTO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/39", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_39", FK_COLUMNS="dif_ger_id" */ select count(*) into numrows

from SDDTB_GERENCIAMENTO where

/* %JoinFKPK(:%New,SDDTB_GERENCIAMENTO," = "," and") */ :new.dif_ger_id = SDDTB_GERENCIAMENTO.ger_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

'Cannot UPDATE SDDTB_DIFUSAO because SDDTB_GERENCIAMENTO does not exist.'

(59)

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_TIPDADO R/37 SDDTB_DIFUSAO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_TIPDADO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/37", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_37", FK_COLUMNS="dif_tip_id" */ select count(*) into numrows

from SDDTB_TIPDADO where

/* %JoinFKPK(:%New,SDDTB_TIPDADO," = "," and") */ :new.dif_tip_id = SDDTB_TIPDADO.tip_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

'Cannot UPDATE SDDTB_DIFUSAO because SDDTB_TIPDADO does not exist.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_DADOHIDRO R/36 SDDTB_DIFUSAO ON CHILD UPDATE RESTRICT */

/* ERWIN_RELATION:PARENT_OWNER="",

(60)

CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/36", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_36", FK_COLUMNS="dif_dhi_id" */ select count(*) into numrows

from SDDTB_DADOHIDRO where

/* %JoinFKPK(:%New,SDDTB_DADOHIDRO," = "," and") */ :new.dif_dhi_id = SDDTB_DADOHIDRO.dhi_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

'Cannot UPDATE SDDTB_DIFUSAO because SDDTB_DADOHIDRO does not exist.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tD_SDDTB_FUNCAO after DELETE on SDDTB_FUNCAO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- DELETE trigger on SDDTB_FUNCAO declare numrows INTEGER;

begin

(61)

/* SDDTB_FUNCAO R/44 SDDTB_CONTRATO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/44", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_44", FK_COLUMNS="con_fun_id" */ select count(*) into numrows

from SDDTB_CONTRATO where /* %JoinFKPK(SDDTB_CONTRATO,:%Old," = "," and") */ SDDTB_CONTRATO.con_fun_id = :old.fun_id; if (numrows > 0) then raise_application_error( -20001,

'Cannot DELETE SDDTB_FUNCAO because SDDTB_CONTRATO exists.'

); end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/41 SDDTB_GERENCIAMENTO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_GERENCIAMENTO" P2C_VERB_PHRASE="R/41", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_41", FK_COLUMNS="ger_fun_id" */ select count(*) into numrows

from SDDTB_GERENCIAMENTO where

/* %JoinFKPK(SDDTB_GERENCIAMENTO,:%Old," = "," and") */ SDDTB_GERENCIAMENTO.ger_fun_id = :old.fun_id;

(62)

if (numrows > 0) then

raise_application_error( -20001,

'Cannot DELETE SDDTB_FUNCAO because SDDTB_GERENCIAMENTO exists.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_FUNCAO after UPDATE on SDDTB_FUNCAO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_FUNCAO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/44 SDDTB_CONTRATO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/44", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_44", FK_COLUMNS="con_fun_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.fun_id <> :new.fun_id then

select count(*) into numrows from SDDTB_CONTRATO

(63)

where /* %JoinFKPK(SDDTB_CONTRATO,:%Old," = "," and") */ SDDTB_CONTRATO.con_fun_id = :old.fun_id; if (numrows > 0) then raise_application_error( -20005,

'Cannot UPDATE SDDTB_FUNCAO because SDDTB_CONTRATO exists.'

); end if; end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/41 SDDTB_GERENCIAMENTO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_GERENCIAMENTO" P2C_VERB_PHRASE="R/41", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_41", FK_COLUMNS="ger_fun_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.fun_id <> :new.fun_id then

select count(*) into numrows

from SDDTB_GERENCIAMENTO where /* %JoinFKPK(SDDTB_GERENCIAMENTO,:%Old," = "," and") */ SDDTB_GERENCIAMENTO.ger_fun_id = :old.fun_id; if (numrows > 0) then raise_application_error( -20005,

(64)

'Cannot UPDATE SDDTB_FUNCAO because SDDTB_GERENCIAMENTO exists.'

); end if; end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tD_SDDTB_GERENCIAMENTO after DELETE on SDDTB_GERENCIAMENTO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009

-- DELETE trigger on SDDTB_GERENCIAMENTO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_GERENCIAMENTO R/39 SDDTB_DIFUSAO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_GERENCIAMENTO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/39", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_39", FK_COLUMNS="dif_ger_id" */ select count(*) into numrows

from SDDTB_DIFUSAO where /* %JoinFKPK(SDDTB_DIFUSAO,:%Old," = "," and") */ SDDTB_DIFUSAO.dif_ger_id = :old.ger_id; if (numrows > 0) then raise_application_error( -20001,

(65)

'Cannot DELETE SDDTB_GERENCIAMENTO because SDDTB_DIFUSAO exists.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tI_SDDTB_GERENCIAMENTO after INSERT on SDDTB_GERENCIAMENTO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009

-- INSERT trigger on SDDTB_GERENCIAMENTO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/41 SDDTB_GERENCIAMENTO ON CHILD INSERT RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_GERENCIAMENTO" P2C_VERB_PHRASE="R/41", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_41", FK_COLUMNS="ger_fun_id" */ select count(*) into numrows

from SDDTB_FUNCAO where

/* %JoinFKPK(:%New,SDDTB_FUNCAO," = "," and") */ :new.ger_fun_id = SDDTB_FUNCAO.fun_id;

if (

/* %NotnullFK(:%New," is not null and") */

numrows = 0 )

(66)

then

raise_application_error( -20002,

'Cannot INSERT SDDTB_GERENCIAMENTO because SDDTB_FUNCAO does not exist.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_GERENCIAMENTO after UPDATE on SDDTB_GERENCIAMENTO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009

-- UPDATE trigger on SDDTB_GERENCIAMENTO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_GERENCIAMENTO R/39 SDDTB_DIFUSAO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_GERENCIAMENTO" CHILD_OWNER="", CHILD_TABLE="SDDTB_DIFUSAO" P2C_VERB_PHRASE="R/39", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_39", FK_COLUMNS="dif_ger_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.ger_id <> :new.ger_id then

select count(*) into numrows from SDDTB_DIFUSAO where

(67)

/* %JoinFKPK(SDDTB_DIFUSAO,:%Old," = "," and") */ SDDTB_DIFUSAO.dif_ger_id = :old.ger_id; if (numrows > 0) then raise_application_error( -20005,

'Cannot UPDATE SDDTB_GERENCIAMENTO because SDDTB_DIFUSAO exists.'

); end if; end if;

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_FUNCAO R/41 SDDTB_GERENCIAMENTO ON CHILD UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_FUNCAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_GERENCIAMENTO" P2C_VERB_PHRASE="R/41", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_41", FK_COLUMNS="ger_fun_id" */ select count(*) into numrows

from SDDTB_FUNCAO where

/* %JoinFKPK(:%New,SDDTB_FUNCAO," = "," and") */ :new.ger_fun_id = SDDTB_FUNCAO.fun_id;

if (

/* %NotnullFK(:%New," is not null and") */ numrows = 0 ) then raise_application_error( -20007,

(68)

'Cannot UPDATE SDDTB_GERENCIAMENTO because SDDTB_FUNCAO does not exist.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tD_SDDTB_ORGAO after DELETE on SDDTB_ORGAO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- DELETE trigger on SDDTB_ORGAO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ORGAO R/45 SDDTB_ACESSO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ORGAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_ACESSO" P2C_VERB_PHRASE="R/45", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_45", FK_COLUMNS="ace_org_id" */ select count(*) into numrows

from SDDTB_ACESSO where /* %JoinFKPK(SDDTB_ACESSO,:%Old," = "," and") */ SDDTB_ACESSO.ace_org_id = :old.org_id; if (numrows > 0) then raise_application_error( -20001,

(69)

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_ORGAO after UPDATE on SDDTB_ORGAO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_ORGAO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_ORGAO R/45 SDDTB_ACESSO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_ORGAO" CHILD_OWNER="", CHILD_TABLE="SDDTB_ACESSO" P2C_VERB_PHRASE="R/45", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_45", FK_COLUMNS="ace_org_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.org_id <> :new.org_id then

select count(*) into numrows from SDDTB_ACESSO where /* %JoinFKPK(SDDTB_ACESSO,:%Old," = "," and") */ SDDTB_ACESSO.ace_org_id = :old.org_id; if (numrows > 0) then raise_application_error(

(70)

-20005,

'Cannot UPDATE SDDTB_ORGAO because SDDTB_ACESSO exists.' );

end if; end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tD_SDDTB_SERVICO after DELETE on SDDTB_SERVICO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- DELETE trigger on SDDTB_SERVICO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_SERVICO R/43 SDDTB_CONTRATO ON PARENT DELETE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_SERVICO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/43", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_43", FK_COLUMNS="con_ser_id" */ select count(*) into numrows

from SDDTB_CONTRATO where /* %JoinFKPK(SDDTB_CONTRATO,:%Old," = "," and") */ SDDTB_CONTRATO.con_ser_id = :old.ser_id; if (numrows > 0) then raise_application_error( -20001,

(71)

'Cannot DELETE SDDTB_SERVICO because SDDTB_CONTRATO exists.'

); end if;

-- ERwin Builtin Fri May 29 21:14:13 2009 end;

/

create or replace trigger tU_SDDTB_SERVICO after UPDATE on SDDTB_SERVICO for each row

-- ERwin Builtin Fri May 29 21:14:13 2009 -- UPDATE trigger on SDDTB_SERVICO declare numrows INTEGER;

begin

/* ERwin Builtin Fri May 29 21:14:13 2009 */

/* SDDTB_SERVICO R/43 SDDTB_CONTRATO ON PARENT UPDATE RESTRICT */ /* ERWIN_RELATION:PARENT_OWNER="", PARENT_TABLE="SDDTB_SERVICO" CHILD_OWNER="", CHILD_TABLE="SDDTB_CONTRATO" P2C_VERB_PHRASE="R/43", C2P_VERB_PHRASE="", FK_CONSTRAINT="R_43", FK_COLUMNS="con_ser_id" */ if /* %JoinPKPK(:%Old,:%New," <> "," or ") */ :old.ser_id <> :new.ser_id then

select count(*) into numrows from SDDTB_CONTRATO where

/* %JoinFKPK(SDDTB_CONTRATO,:%Old," = "," and") */ SDDTB_CONTRATO.con_ser_id = :old.ser_id;

Referências

Documentos relacionados

O Processo de Controle de Atos e Portarias é uma rotina integrada com outras funcionalidades do ambiente Vida Funcional para automatização na geração de documentos como Atos

• O índice de nomenclatura correspondente relativas ao mapeamento sistemático desde a escala 1: 1.000.000 até 1:25.000... Índice

Na mesma categoria, Nils ainda ficou com o terceiro lugar, assim como em Hotéis, Restaurantes e Clínicas e no Prêmio Especial: Ilumi- nação Eficiente, vencido pelo

Poliman Indústria e Comércio de Móveis Ltda., garante este produto (peças e mão de obra, por defeitos de fabricação), pelo prazo de seis meses a partir da data de emissão da

5ª O imóvel objeto do contrato de locação é destinado ao fim estipulado na capa deste instrumento constituindo infração contratual o desvio de sua finalidade. Na

Seguindo a padronização de comunicação via Web Services em todo o sistema, para a autenticação de usuários foi implementado um serviço que serve como interface para que os

A poesia “Isso é cagado e cuspido paisagem de Interior” foi apresentada para os alunos do 9° ano tarde, da Escola Estadual de Ensino Fundamental Professor Cardoso, Alagoa Nova-PB,

A facilidade de aplicação e a cobertura perfeita são algumas das características mais procuradas pelos profissionais do ofício da pintura. Quando, por algum motivo,