Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Banco de Dados II 2009.2 Bacharelado em Cincia da Computao UFCG Prof. Cludio de Souza Baptista, Ph.D.
Contedo
Viso geral dos conceitos de orientao a objetos disponveis no ORACLE 11g Extenses para criar Objetos Complexos O impacto da orientao a objetos em consultas SQL Integrao OO-Relacional atravs de Vises de Objeto
SGBDs Objeto-Relacional combinam os benefcios do modelo Relacional com a capacidade de modelagem do modelo OO
Fornecem suporte para consultas complexas sobre dados complexos
Atendem aos requisitos das novas aplicaes e da nova gerao de aplicaes de negcios
As extenses incluem mecanismos para permitir aos usurios estender o banco de dados com tipos e funes especficas da aplicao
A linguagem de consulta OR uma extenso da linguagem SQL para suportar o modelo de objetos
As extenses incluem consultas envolvendo objetos, atributos multivalorados, TADs, mtodos e funes como predicados de busca em uma consulta
Utiliza referncias para representar conexes inter-objetos tornando as consultas baseadas em caminhos de referncia mais compactas do que as consultas feitas com juno
Herana implementada organizando todos os tipos em hierarquias Utiliza os construtores set, list, multiset ou array para organizar colees de objetos
Nova Funcionalidade
Reuso de cdigo Permite a definio de padres, cdigo reusvel por todas as aplicaes
Consistncia
Um SGBD Objeto-Relacional ainda relacional pois suporta dados armazenados em tabelas formadas por linhas e colunas
A linguagem de consultas para BDOR uma extenso da linguagem SQL, utilizada para definio e manipulao de dados e consultas
SQL:1999 (SQL-3)
a base para muitos SGBDs OR (Oracle11g, Informix Universal Server, IBMs DB2 Universal Database, entre outros)
Tambm est sendo chamada de SQL:1999 e tem sido caracterizada como SQL Orientada a Objetos SQL:1999 muito mais do que SQL-92 incrementada com a tecnologia de OO. Envolve caractersticas adicionais que podem ser classificadas em: Relacionais: novos tipos de dados, novos predicados Orientadas a Objetos:tipos de dados definidos pelo usurio, definio de mtodos, uso de referncias
Part 1: SQL/Framework Part 2: SQL/Foundation Part 3: SQL/CLI Part 4: SQL/PSM Part 5: SQL/Bindings
Part 1: SQL/Framework
Definies comuns e conceitos Estrutura do padro multi-parte Estrutura para conformidade bsica Possui cerca de 75 pginas
Part 2: SQL/Foundation
O cerne do padro Omite host language bindings, dynamic SQL, call interface, e questes semelhantes SQL tradicional e SQL orientando a objetos! Cerca de 1100 pginas
Part 3: CLI
Call-Level Interface Melhor implementao: ODBC Alinhado com SQL:1999 features e ODBC 3.0 features Cerca de 400 pginas
Part 4: SQL/PSM
PSM-96 especificou:
PSM-99 specifica:
Part 5: SQL/Bindings
Embedded SQL (SQL embutido) Dynamic SQL Direct Invocation Cerca de 250 pginas Tendncia: ser incorporado na Part 2!!!!
Part 7: SQL/Temporal Part 9: SQL/MED (Management of External Data) Part 10: SQL/OLB (Object Linking Binding)
JDBC e SQLJ
Part 2: SQL/Foundation
Estamos interessados neste curso na parte do padro que trata de Orientao a Objetos:
Tipos de dados definidos pelo usurio Atributos & comportamento Encapsulamento: funes & mtodos Observers & mutators Hierarquias de tipos (herana simples) User-defined CAST, ordenao Tabelas tipadas & tipos referncia
Sempre houve os tipos embutidos (built-in) como: INTEGER, SMALLINT, CHAR, VARCHAR, DATE, TIME e TIMESTAMP Alguns tipos proprietrios: Oracle NUMBER e RAW; Sybase SMALLMONEY e IMAGE Aps alguns anos, surgiram BLOB e CLOB com semntica limitada! Houve algumas tentativas de DBMS vendors de propor solues para certos tipos de dados especficos: texto, GIS, imagens e time series
UDT
Entretanto, o que se queria era uma soluo mais genrica que pudesse estender o SGBD com tipos especficos: Soluo: UDT!!!! Obs.: o termo User em UDT no quer dizer usurio final!
UDT
Definio: Um UDT um tipo que no embutido em um SGBD ou linguagem de programao, mas que pode ser definido como parte de um desenvolvimento de uma ou mais aplicaes, com possvel comportamento definido em sua criao. (adaptada de Jim Melton: Advanced SQL:1999, Morgan Kauffman, 2003)
Distinct Types
No pode misturar o tipo fonte e o tipo distinto e m expresses DECLARE VARIABLE X INTEGER; DECLARE VARIABLE Y QI; ...X+Y --INVALID EXPR! ...X+CAST(Y AS INTEGER) --OK
Distinct Types
CREATE TYPE TAMBLUSA AS INT FINAL; CREATE TYPE NUMSAPATO AS INT FINAL; CREATE TABLE pessoas ( nome VARCHAR (30), calca NUMSAPATO, veste TAMBLUSA, );
Distinct Types
Uso incorreto: SELECT nome FROM Pessoas WHERE calca > veste;
Distinct Types
Uso correto: SELECT nome FROM Pessoas WHERE CAST(calca TO INTEGER) > CAST(veste TO INTEGER);
Distinct Types
Uso incorreto: SELECT nome, calca + 20 FROM Pessoas WHERE veste > 7;
Distinct Types
Uso correto: SELECT nome, CAST (calca TO INTEGER) + 20 FROM Pessoas WHERE CAST(Veste TO INTEGER) > 7;
Structured Types
Tambm conhecidos como abstract data types (Tipos Abstratos de Dados) Pode conter uma estrutura arbitrariamente complexa Anlogo a struct na linguagem C Stored data => state => attributes Behavior => semantics => methods & functions & procedures
Atributos
O sistema gera uma funo get (observer) e uma funo set (mutator) para cada atributo not overloadable
Encapsulamento
Esconde implementao dos usurios Permite que a implementao mude sem afetar as aplicaes desde que a interface provida permanea constante Aplicaes acessam tudo atravs da interface funcional, incluindo os atributos usando as funes observer e mutator
Conceito genrico: rotina => procedure, function, method normalmente stored Procedure: parmetros de input & output invocada usando o comando CALL Funo: apenas parmetro de input (output retornado como valor da funo); invocado usando a notao funcional Mtodos: caso especial de funes
Procedures
Tipos de dados dos argumentos no utilizados para overloading Em qualquer esquema, no ligado a um tipo estruturado.
Functions:
Funes mltiplas com o mesmo nome, mesmo nmero de parmetros Distintos pelos tipos de dados dos argumentos Masusado apenas em tempo de compilao no em tempo de execuo Em qualquer esquema, no ligado a um tipo estruturado
Mtodos
Podem ser overloaded Fortemente acoplado a um nico tipo estruturado Deve estar no mesmo esquema da definio do tipo First argument implicit, distinguished
Tipo do argumento associado ao tipo estruturado Todos argumentos, exceto o primeiro usado o tipo declarado para resoluo, o primeiro argumento usa o tipo mais especfico do runtime
Notao de ponto: a.b.c Notao funcional: c(b(a)) Funes DEVEM usar a notao funcional Mtodos DEVEM usar a notao de ponto
Tipos de mtodos
Static methods: opera no tipo de dados propriamente dito Instance methods: opera na instncia de um tipo.
Declarao de Mtodos
Declarao: os mtodos so declarados (suas assinaturas) na definio do tipo de dados Implementao: a implementao dos mtodos ficam em outro lugar, utilizando-se de um comando SQL especfico para tal fim. O cdigo pode ser escrito em SQL ou em outra linguagem de programao como Java e C++
Exemplo: Mtodo
CREATE TYPE Filme AS ( ttulo varchar (100), descricao varchar (500), duracaoMinutos int) NOT FINAL METHOD duracaoEmHoras() RETURNS INTERVAL HOUR(2) TO MINUTE
Exemplo: Mtodo
CREATE INSTANCE METHOD duracaoEmHoras ( ) RETURNS INTERVAL HOUR(2) TO MINUTE FOR Filme RETURN CAST (CAST (SELF.duracao AS INTERVAL MINUTE(4)) AS INTERVAL HOUR(2) TO MINUTE)
Chamada a Mtodos
Ex.: CREATE TABLE tb_Filme ( cod int, info filme, aluguel DECIMAL(5,2))
Chamada a Mtodo
Recupere a durao em horas e minutos do filme Ghost SELECT mt.info.duracaoEmHoras( ) FROM tb_Filme AS mt WHERE mt.info.titulo = Ghost
Encapsulamento
Considere:
Funes implcitas:
CREATE FUNCTION numerator (rational) RETURNS INTEGER CREATE FUNCTION numerator (rational, INTEGER) RETURNS rational
Construtores
Construtores
CREATE FUNCTION rational(numer,denom) RETURNS rational CREATE FUNCTION rational(denom) RETURNS rational
Exemplo
// Ponto em coordenadas polares que pode retornar coordenadas cartesianas CREATE TYPE ponto AS ( rho REAL, theta REAL, ) NOT FINAL METHOD x_coord ( ) RETURNS REAL METHOD y_coord ( ) RETURNS REAL CREATE INSTANCE METHOD x_coord ( ) RETUNRS REAL FOR ponto RETURN cos(SELF*theta)*SELF*rho CREATE INSTANCE METHOD y_coord( ) RETURNS REAL FOR ponto RETURN sin(SELF.theta)*SELF.rho
[ ref-cast-option ]
Derived: REF ( attrib-name, ... ) System-generated: REF IS SYSTEM GENERATED
Mtodo sobrescrito:
OVERRIDING original-method
Remoo de um UDT
DROP TYPE nome <CASCADE|RESCRICT>
Alterando um UDT
<alter type> ::= ALTER TYPE <nome> <action> <action> ::= ADD ATTRIBUTE <definition> | DROP ATTRIBUTE <nome> RESTRICT | ADD <method specification> | DROP <method specification>
Herana de Tipos
Herana
Subtype herda tudo do supertype SQL:1999 d suporte apenas a herana simples Na definio de subtype:
Novos atributos podem ser adicionados Novos mtodos podem ser adicionados Mtodos podem ser sobrescritos
Herana
Obs.:
Pode-se definir UDT contendo atributos cujos tipos so supertipos do tipo definido! No pode definir UDT cujos atributos contenham o tipo do prprio tipo que est sendo definido (recursivo) No pode definir UDT contendo atributos com tipos de subtipos que ainda vo ser definidos!
Herana: Substitutability
Na herana usa-se o conceito de most specific type numa hierarquia de tipos O princpio da Substitutability diz respeito a habilidade de prover uma instncia de um subtipo em qualquer local onde uma instncia de um supertipo esperada. Ex.: DECLARE p Pessoa; SET p = NEW Empregado (); OBS.: o inverso no vlido!
Herana
CREATE TYPE emp UNDER person ( salary DECIMAL(6,2), dept department ) METHOD give_raise(...)..., OVERRIDING METHOD address(...)...;
Herana
Tipo declarado: CREATE TYPE department ( dept_name CHARACTER(30), manager employee, ...) Tipo mais especfico
Os tipos estruturados possuem valores e no instncias!!!!! Razo: no h OID, que s ocorrer no repositrio que so as tabelas tipadas (vistas mais frente!)
SQL:1999 d suporte a mtodos construtores (inicializadores) definidos pelo usurio Podem existir vrios destes construtores, com mesmo nome do construtor provido pelo sistema, com lista de parmetros diferente para cada construtor. S podem ser invocados atravs da keyword NEW Tais construtores devem ter SELF como retorno.
Inserindo dados
INSERT INTO tb_Filmes VALUES( 1203, -- cdigo do filme NEW Filme (Gone with the Wind, bl bl bl,128), -- instncia de Filme 2.99); -- preo aluguel
Inserindo dados
Mesma insero anterior usando uma varivel INSERT INTO tb_Filmes VALUES( 1203, -- cdigo do filme f, -- instncia de Filme 2.99); -- preo aluguel
Atualizando dados
1. Atualizando o valor do aluguel de um filme particular UPDATE tb_Filme SET aluguel = 1.99 WHERE codigo = 1234;
Atualizando dados
2. Atualizando um filme sem todos os dados UPDATE tb_Filme SET info = NEW Filme (, , 228) WHERE codigo = 1234;
Atualizando dados
UPDATE tb_Filme SET info = NEW Filme (info.titulo, info.descricao, 228) WHERE codigo = 1234;
Atualizando dados
Mesmo que o exemplo anterior, de forma mais simples: UPDATE tb_Filme SET info = info.descricao(113) WHERE codigo = 1234;
Atualizando dados
Mesmo que o exemplo anterior, de forma mais simples: UPDATE tb_Filme SET info.descricao= 113 WHERE codigo = 1234;
Recuperando Dados
SELECT mt.info.descricao INTO :variavel_host FROM tb_filmes WHERE mt.codigo = 1234;
Comparao de UDT
H a comparao default de UDT, que compara campo a campo Pode-se tambm criar uma semntica de comparao para o UDT Usa-se o comando: CREATE ORDERING FOR <nome do tipo> EQUALS ONLY BY <categoria> | ORDER FULL by <categoria>
<categoria> ::= RELATIVE WITH <especificao de funo | MAP WITH <especificao de funo de mapeamento] | STATE [<nome especfico>] | RELATIVE WITH COMPARABLE INTERFACE
Comparao de UDT
Comparao STATE
Voc pode instruir o sistema para fazer comparaes baseadas em valores de atributos. Usa expresso de igualdade, retornando um Boolean. a comparao default, campo a campo.
Comparao de UDT
Comparao MAP
Mapear dois tipos estruturados para algum tipo embutido do SQL, e dai fazer a comparao com o resultado deste mapeamento. Este mapeamento feito com uma map function, que invocada automaticamente
Ex. CREATE ORDERING FOR Filme ORDER FULL BY MAP WITH FUNCTION filme_mapping(filme);
Comparao de UDT
Comparao MAP (cont.) CREATE FUNCTION filmeMapping( f filme) RETURNS INTEGER RETURN length(f.titulo)+f.duracao;
Comparao de UDT
Comparao Relative
Comparao usando o resultado retornado por uma relative function, que retorna:
-1: o primeiro tipo menor do que o segundo 0: os dois tipos so iguais +1: o primeiro tipo tem valor maior do que o segundo
Comparao de UDT
Comparao Relative
Ex.: CREATE ORDERING FOR Filme ORDER FULL BY RELATIVE WITH FUNCTION filme_comp(filme, filme);
CREATE FUNCTION filme_comp (f1 filme, f2 filme) RETURNS INTEGER IF ( ) condio da aplicao THEN RETURN -1 ELSEIF ( ) THEN RETURN 0 ELSE RETURN 1 END IF;
Comparao de UDT
Type predicate
Usado para se saber o tipo de um determinado varivel. Ex.: determinar de o que est armazenado na coluna pes um empregado pes IS OF (Empregado)
Segurana de UDT
Em SQL:1999 no h public, protected, private A restrio de acesso via privilgios Tais privilgios so dados com comando GRANT e podem ter WITH GRANT OPTION Privilgios:
USAGE: permite o tipo ser usado (colunas, rotinas) UNDER: permite subtipos do tipo em questo serem definidos EXECUTE: permite usurios executarem um dado mtodo
Segurana de UDT
Exemplo:
Tabelas tipadas
Instncias do tipo so linhas de uma tabela Comporta-se como objetos: CREATE TABLE rationals OF rational REF IS id_col ref-option Cria uma tabela base com uma coluna por atributo, mais uma coluna self-referencing Esta coluna self-referencing contm em cada linha um valor que identifica univocamente a linha
Tabelas tipadas
Ex. 2: CREATE TABLE movie ( title varchar (100). desc varchar(500), runs integer) NOT FINAL
Tabelas tipadas
Uma tabela tipada uma tabela ordinria! Pode-se inserir, remover, alterar e consultar as linhas da tabela usando SQL Pode-se definir constraints e triggers Obs.: o uso de NEW visto anteriormente, no causa uma instncia ser armazenada numa tabela. Por que no?
Podem existir vrias tabelas tipadas associadas a um dado UDT Pode-se criar valores de tipos que no so persistidos em linhas de uma tabela tipada (como vimos!)
Tabelas Tipadas
Colunas Self-referencing:
Espcie de OID Seu valor nico globalmente, ou seja, no haver duas linhas numa tabela com valor igual da coluna self-referencing As aplicaes podem usar os valore das colunas self-referencing como uma espcie de ponteiros para as linhas contendo os valores nas tabelas tipadas.
Hierarquias de Tabelas
Pode-se definir uma tabela com sendo subtabela de uma outra, chamada super-tabela S pode criar hierarquias de tabelas tipadas Deve haver correspondncia s hierarquias de tipo
Hierarquias de Tabelas
Entretanto, a hierarquia completa de tabelas no precisa ter um relacionamento com a hierarquia completa de tipos Movie Ex. Hierarchia de tableas Movie
Dolby Digital
DTS Sound
Sound
Hierarquias de Tabelas
Dolby Digital
DTS Sound
Sound
Hierarquias de Tabelas
VHS Tape
DVD
BlueRay
Hierarquias de Tabelas
VHS Tape
BlueRay
Dolby Digital
DTS Sound
Sound
OBS: Pode-se especificar o nome de uma tabela de uma nica super-tabela (herana simples) O nome da tabela na clusula da sub-tabela dever ser um nome de uma tabela tipada! Os nomes do atributos da tabela no podem ser iguais aos herdados No se pode definir colunas arbitrrias (for a do UDT) dentro de uma tabela tipada, apenas as que compem o UDT + self-referencing column
Obs.:
NO permitido especificar PRIMARY KEY constraint num subtabela. Uma coluna self-referencing NO pode ser especificada na definio de uma sub-tabela, mas deve ser especificada na super-tabela mxima (raiz)
USER GENERATED
DERIVED SYSTEM GENERATED
Obs.: quando se escolhe user-generated para um UDT, responsabilidade da aplicao escolher o valor armazenado na coluna self-referencing de cada linha inserida na tabela tipada.
Reference types
Permite uma varivel referenciar uma outra Apenas instncias de tipos estruturados podem ser referenciados Referencia um valor de uma row/instance explicitamente representado numa linha Sintaxe:
<reference type> ::= REF ( <UDT> ) [<scope clause>] <scope clause> ::= SCOPE <table name>
Reference types
O SCOPE pode ter um check (espcie de integridade referencial) <reference scope check ::= REFERENCES ARE [NOT] CHECKED [ON DELETE <referential action>]
<referential action> ::= RESTRICT | SET NULL | SET DEFAULT | NO ACTION Default: NO ACTION
UPDATE short_movies SET title = The Lunch Lady WHERE title = The Cafeteria Lady
UPDATE ONLY (short_movies) SET title = The Lunch Lady WHERE title = The Cafeteria Lady
Typed Views
Tambm conhecidas como Referenceable Views ou Object Views Os dados visveis na view correspondem a linhas nas tabelas tipadas. Pode-se ter herana simples de views: superview & subview
Typed Views
<view definition> ::= CREATE VIEW <table name> OF < UDT name> [<subview clause> ] [<view element list> ] AS <query expression> [WITH [ <levels clause> CHECK OPTION] <subview clause>::= UNDER <table name> <view element list> ::= ( <view element> [{,<view element>} ] <view element> ::= <self-referencing column specification> | <view column option> <view column option> ::= <column name> WITH OPTIONS <scope clause>
Typed Views
Obs.:
Usada para Views que podem ser atualizadas: update, delete e insert.
Exemplo: CREATE VIEW cheap_movies AS SELECT title, price FROM movies WHERE price < 1 WITH CHECK OPTION; Assim, o seguinte Update seria rejeitado: UPDATE cheap_movies SET price = 15 WHERE title = The Wedding Singer;
Typed Views
Exemplo: CREATE VIEW short_movies_with_long_titles OF movie (REF IS movie_id DERIVED) AS SELECT title, desc, runs FROM ONLY (short_movies) WHERE char_length (title) > 75
CREATE VIEW short_DVDs_with_long_titles OF dvd UNDER short_movies_with_long_titles AS SELECT title, desc, runs, stock_number, rental_price FROM ONLY (short_dvds) WHERE char_length(title) > 75
Privilgio USAGE: requerido para se poder usar um tipo numa aplicao ou BD. Se est invocando um mtodo num valor de TAD que armazenado numa coluna de um tipo de uma tabela ordinria (no tipada), necessrio ter o privilgio SELECT Se o mtodo um mutator, deve tambm ter o privilgio UPDATE Tambm necessrio ter o privilgio EXECUTE em todos os mtodos invocados Privilgio UNDER: para permitir especificar subtabelas, sub-tipos ou sub-views.
Rotinas SQL
Procedures: chamadas atravs de CALL e com parmetroe IN, OUT e INOUT; ligadas a um esquema Funes: chamadas diretamente atravs de notao funcional f(a), com parmetros de IN e retorno, e ligadas a um esquema Mtodos: chamados diretamente atravs de notao de ponto f.a, com parmetros de entrada e retorno, ligados a um UDT
Rotinas SQL
Uma rotina SQL uma rotina que invocada atravs de um comando SQL. Pode ser escrita em SQL ou em outra linguagem, neste caso chamado de external routine O padro SQL:1999 prov especificao para 9 LP: Java, C, Ada, Cobol, Fortran, M (antiga Mumps), Pascal e PL/I. Uma rotina externa armazenada num arquivo fora do SGBD.
Rotinas SQL
Pode-se j ter um nmero de rotinas escritas em alguma LP. Por exemplo, um pacote estatstico Poucos SGBD implementam SQL/PSM, usando, ao invs, uma linguagem proprietria, por exemplo, Oracle PL-SQL, MS Transact-SQL que no so interoperveis Tambm pode-se requerer uma certa funcionalidade que computacionalmente intensiva,. Por exemplo, anlise de sries temporais dirias, semanais, mensais, e semestrais com relatrios de vendas de DVDs. Rotinas externas so geralmente capazes de acessar servios providos de baixo nvel do SO, como sistemas de arquivo, gerncia de memria, etc.
Rotinas SQL
Impedance mismatch (menor em Java) A criao de novas sesses para execuo de rotinas externas pode ser custoso, impactando no desempenho (context switching overhead) Treinamento em dois ambientes: SQL e outra LP
Invocao de Rotinas
Overloading Overrriding
Rotinas SQL
Enviam email Imprimem documentos Ativa um equipamento robtico para recuperar um determinado dado
Invocao de Procedures
So chamadas atravs do comando SQL: CALL Parmetros so passados e retornados Podem ser overloaded, mas no overriden Estranhamente no permitido, por exemplo: transmit (integer) e transmit (real),
Invocao de Procedures
Algoritmo:
Todas as rotinas do nome invocado so identificadas. Todas as rotinas contidas em esquemas que no so parte do corrente SQL-path so eliminadas Todas as rotinas restantes que so funes ou mtodos so eliminados Os procedures restantes para os quais o invocador no possui o privilgio EXECUTE so eliminados Todos procedimentos cujos nmero de parmetros no igual ao nmero de argumentos na chamada CALL so eliminados Se existem duas ou mais procedures restantes, ento o algoritmo seleciona aquela que est contida no esquema que aparee mais cedo no SQL-path.
Invocao de Funo
So um pouco mais complexas do que invocaes de procedures Quando existem vrias funes com o mesmo nome, SQL usa vrios critrios para escolher a funo que ir escolher para ser executada.
Invocao de Funo
Algoritmo
Todas as rotinas com o nome so identificadas. As que estiverem em esquemas que no so parte do corrente SQLpath so eliminadas Todas as rotinas remanescentes que so procedures ou mtodos so eliminados As funes restantes, cujo nmero de parmetros no igual ao nmero de argumentos na funo invocada so eliminadas Para cada funo restante, o tipo de dados de cada parmetro checado contra o tipo do respectivo argumento; caso no casem a funo eliminada Se existem duas ou mais funes restantes para executar, ento o algoritmo seleciona aquela que aparece mais cedo no SQLpath
Ex. de Funo
CREATE FUNCTION ratio ( IN title_param VARCHAR(100), IN length_param INTEGER) RETURNS REAL LANGUAGE SQL;
Mtodos podem ser overloadable e overriden O SQL-path no usado para resoluo de mtodo
Exemplo de overriding
CREATE TYPE dvd UNDER movie AS ( stock_number integer, rental_price decimal(5,2), extra_features feature) INSTANTIABLE NOT FINAL; CREATE TYPE dolby_dvd UNDER dvd AS ( alt_language BOOLEAN) INSTANTIABLE NOT FINAL; OVERRIDING METHOD length_interval ( ) RETURNS INTERVAL HOUR(2) TO MINUTE; CREATE INSTANCE METHOD length_interval( ) RETURNS INTERVAL HOUR(2) TO MINUTE FOR dolby_dvd RETURN CAST (CAST (SELF.runs AS INTERVAL MINUTE(4) ) + INTERVAL 10 MINUTE(4) AS INTERVAL HOUR(2) TO MINUTE);
Exemplo de overriding
DECLARE dvd1, dvd2 dvd; DECLARE len1, len2, len3, len4 INTERVAL HOUR TO MINUTE; DECLARE lang1, lang3 BOOLEAN; SET dvd1 = NEW dvd (Seven, a serial killer , 123, 299, 1.89, bla); SET dvd2 = NEW dolby_dvd (Seven, a serial killer , 123, 299, 1.89, bla, TRUE); SET len1= dvd1.lenght_interval; -- invoca mtodo de dvd SET len2 = dvd2.lenght_interval; -- invoca mtodo overriden de dolby_dvd SET len3 = (dvd1 AS dvd).lenght_interval; -- igual a len1 SET len4 = (dvd2 as dvd).lenght_interval; -- invoca mtodo de dvd SET lang1 = dvd1.alt_language; -- erro SET lang2 = (dvd1 AS dolby_dvd).alt_language; -- erro dvd1 S NOT dolby_dvd