Sei sulla pagina 1di 52

Universitat de Val`ncia e

Departament dInform`tica a

'

Bases de datos objeto-relacionales

El trmino base de datos objeto-relacional se usa para describir e una base de datos que ha evolucionado desde el modelo relacional hasta una base de datos h brida, que contiene ambas tecnolog as: relacional y de objetos. Durante muchos aos ha habido debates sobre cmo ser la siguiente n o a generacin de la tecnolog de bases de datos de uso comn: o a u Las bases de datos orientada a objetos. Una base de datos basada en SQL con extensiones orientadas a objetos. Los partidarios de la segunda opcin esgrimen varias razones para o demostrar que el modelo objeto relacional dominar: a Las bases de datos objeto-relacionales tales como Oracle8i son compatibles en sentido ascendente con las bases de datos relacionales actuales y que adems son familiares a los usuarios. a Los usuarios pueden pasar sus aplicaciones actuales sobre bases de datos relaciones al nuevo modelo sin tener que reescribirlas. Posteriormente se pueden ir adaptando las aplicaciones y bases de datos para que utilicen las funciones orientadas a objetos. Las primeras bases de datos orientadas a objetos puras no admit las capacidades estndar de consulta ad hoc de las an a bases de datos SQL. Esto tambin hace que resulte problemtico e a realizar la interfaz entre las herramientas SQL estndar y las a bases de datos orientadas a objetos puras. una de las principales razones por las que las bases de datos relacionales tuvieron un xito tan rpido fue por su capacidad e a para crear consultas ad hoc.

&

Diseo de Bases de Datos n

BDOR-1

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Tecnolog objeto-relacional... a
Para ilustrar la tecnolog objeto-relacional utilizaremos como a ejemplo el modelo que implementa la base de datos Oracle8. Tipos de objetos El modelo relacional est diseado para representar los datos a n como una serie de tablas con columnas y atributos. Oracle8 es una base de datos objeto-relacional: incorpora tecnolog orientadas a objetos. as En este sentido, permite construir tipos de objetos complejos, entendidos como: Capacidad para denir objetos dentro de objetos. Cierta capacidad para encapsular o asociar mtodos con e dichos objetos. Estructura de un tipo de objeto Un tipo de objeto consta de dos partes: especicacin y cuerpo: o La especicacin constituye la interface a las aplicaciones; aqu o se declaran las estructuras de datos (conjunto de atributos) y las operaciones (mtodos) necesarios para manipular los datos. e El cuerpo dene los mtodos, es decir, implementa la e especicacin. o

&
Diseo de Bases de Datos n BDOR-2

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Estructura de un tipo de objeto...

En la gura se representa la estructura de un tipo de objeto:


Especificacin
Declaracin de atributos

Interface pblica
Especificacin de mtodos

Cuerpo
Implementacin privada

Cuerpo de los mtodos

Toda la informacin que un cliente necesita para utilizar los o mtodos se encuentra en la especicacin. e o Es conveniente pensar en la especiciacin como en la interface o operacional y en el cuerpo como en una caja negra. Esto permite depurar, mejorar o reemplazar el cuerpo sin necesidad de modicar la especicacin y sin afectar, por tanto, o a las aplicaciones cliente. Caracter sticas: En una especicacin de tipo de objeto los atributos deben o declararse antes que cualquiera de los mtodos. e Si una especicacin de tipo slo declara atributos, el cuerpo es o o innecesario. Todas las declaraciones en la especicacin del tipo son o pblicas. Sin embargo, el cuerpo puede contener declaraciones u privadas, que denen mtodos internos del tipo de objeto. e El ambito de las declaraciones privadas es local al cuerpo del objeto.

&

Diseo de Bases de Datos n

BDOR-3

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Ejemplo: Un tipo de objeto para manipular nmeros complejos. Un nmero u u complejo se representa mediante dos nmeros reales (parte real y u parte imaginaria respectivamente) y una serie de operaciones asociadas:

CREATE TYPE Complex AS OBJECT ( rpart ipart REAL, REAL, ( x Complex ) RETURN Complex , ( x Complex ) RETURN Complex ,

MEMBER FUNCTION p l u s MEMBER FUNCTION l e s s

MEMBER FUNCTION t i m e s ( x Complex ) RETURN Complex , MEMBER FUNCTION divby ( x Complex ) RETURN Complex ); / CREATE TYPE BODY Complex AS MEMBER FUNCTION p l u s BEGIN RETURN Complex ( r p a r t + x . r p a r t , i p a r t + x . i p a r t ) ; END p l u s ; MEMBER FUNCTION l e s s BEGIN RETURN Complex ( r p a r t x . r p a r t , i p a r t x . i p a r t ) ; END l e s s ; MEMBER FUNCTION t i m e s ( x Complex ) RETURN Complex I S BEGIN RETURN Complex ( r p a r t x . r p a r t i p a r t x . i p a r t , rpart x . ipart + ipart x . rpart ) ; END t i m e s ; MEMBER FUNCTION divby ( x Complex ) RETURN Complex I S z REAL := x . r p a r t 2 + x . i p a r t 2 ; BEGIN RETURN Complex ( ( r p a r t x . r p a r t + i p a r t x . i p a r t ) / z , ( ipart x . rpart rpart x . ipart ) / z ) ; END divby ; END; ( x Complex ) RETURN Complex I S ( x Complex ) RETURN Complex I S

&
Diseo de Bases de Datos n BDOR-4

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

&
Diseo de Bases de Datos n BDOR-5

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Componentes de un tipo de objeto


Un tipo de objeto encapsula datos y operaciones, por lo que en la especicacin slo se pueden declarar atributos y mtodos, o o e pero no constantes, excepciones, cursores o tipos. Se requiere al menos un atributo y los mtodos son opcionales. e Atributos 1. Como las variables, un atributo se declara mediante un nombre y un tipo. 2. El nombre debe ser unico dento del tipo de objeto (aunque puede reutilizarse en otros objetos) 3. El tipo puede ser cualquier tipo de Oracle excepto: LONG y LONG RAW. NCHAR, NCLOB y NVARCHAR2. MLSLABEL y ROWID. Los tipos espec cos de PL/SQL: BINARY_INTEGER (y cualquiera de sus subtipos), BOOLEAN, PLS_INTEGER, RECORD, REF CURSOR, %TYPE y %ROWTYPE. Los tipos denidos en los paquetes PL/SQL. 4. Tampoco se puede inicializar un atributo en la declaracin o empleando el operador de asignacin o la clasula DEFAULT. o u 5. Del mismo modo, no se puede imponer la restriccin NOT NULL. o 6. Sin embargo, los objetos se pueden almancenar en tablas de la base de datos en las que s es posible imponer restricciones. &
Diseo de Bases de Datos n BDOR-6

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Atributos...

Las estructuras de datos pueden llegar a ser muy complejas: El tipo de un atributo puede ser otro tipo de objeto (denominado entonces tipo de objeto anidado). Esto permite construir tipos de objeto complejos a partir de objetos simples. Algunos objetos, tales como colas, listas y arboles son dinmicos a (pueden crecer a medida que se utilizan). Tambin es posible denir modelos de datos sosticados e utilizando tipos de objeto recursivos, que contienen referencias directas o indirectas a ellos mismos.

&
Diseo de Bases de Datos n BDOR-7

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Mtodos e Un mtodo es un subprograma declarado en una especicacin de e o tipo mediante la palabra clave MEMBER. El mtodo no puede tener el mismo nombre que el tipo de e objeto ni el de ninguno de sus atributos. Muchos mtodos constan de dos partes: especicacin y cuerpo. e o La especicacin consiste en el nombre del mtodo, una o e lista opcional de parmetros y en el caso de funciones un tipo a de retorno. El cuerpo es el cdigo que se ejecuta para llevar a cabo una o operacin espec o ca. Para cada especicacin de mtodo debe existir el cuerpo del o e mtodo. e El PL/SQL compara la especicacin del mtodo y el cuerpo o e token a token, por lo que las cabeceras deben coincidir. Los mtodos pueden hacer referencia a los atributos y a los e otros mtodos sin cualicador: e
CREATE TYPE S t a c k AS OBJECT ( top INTEGER, MEMBER FUNCTION f u l l RETURN BOOLEAN, MEMBER FUNCTION push ( n IN INTEGER) , ... ); / CREATE TYPE BODY S t a c k AS ... MEMBER FUNCTION push ( n IN INTEGER) I S BEGIN IF NOT f u l l THEN top := top + 1 ; ...

&

%
BDOR-8 DBD-13019

Diseo de Bases de Datos n

Universitat de Val`ncia e

Departament dInform`tica a

'

END push ; END; /

&
Diseo de Bases de Datos n BDOR-9

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El parmetro SELF a Todos los mtodos de un tipo de objeto aceptan como primer e parmetro una instancia predenida del mismo tipo denominada a SELF. Independientemente de que se declare implicita o expl citamente, SELF es siempre el primer parmetro pasado a un mtodo. a e

Por ejemplo, el mtodo transform declara SELF como un parmetro e a IN OUT:


CREATE TYPE Complex AS OBJECT ( MEMBER FUNCTION t r a n s f o r m (SELF IN OUT Complex ) ...

El modo de acceso de SELF cuando no se declara expl citamente es: En funciones miembro el acceso de SELF es IN. En procedimientos, si SELF no se declara, su modo por omisin o es IN OUT. En el cuerpo de un mtodo, SELF denota al objeto a partir del e cual se invoc el mtodo. o e

&
Diseo de Bases de Datos n BDOR-10

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El parmetro SELF. . . a

Los mtodos pueden hacer referencia a los atributos de SELF sin e necesidad de utilizar un cualicador:
CREATE FUNCTION gcd ( x INTEGER, y INTEGER) RETURN INTEGER AS Encuentra e l mximo com n d i v i s o r de x e y a u ans INTEGER; BEGIN IF x < y THEN ans := gcd ( x , y ) ; ELSE ans := gcd ( y , x MOD y ) ; ENDIF ; RETURN ans ; END; / CREATE TYPE R a t i o n a l AS num INTEGER, den INTEGER, MEMBER PROCEDURE n o r m a l i z e , ... ); / CREATE TYPE BODY R a t i o n a l AS MEMBER PROCEDURE n o r m a l i z e I S g INTEGER; BEGIN E s t a s dos s e n t e n c i a s son e q u i v a l e n t e s g := gcd (SELF . num , SELF . den ) ; g := gcd (num , den ) ; num := num / g ; den := den / g ; END n o r m a l i z e ; ...

&

%
BDOR-11 DBD-13019

Diseo de Bases de Datos n

Universitat de Val`ncia e

Departament dInform`tica a

'

END; /

&
Diseo de Bases de Datos n BDOR-12

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Sobrecarga Los mtodos del mismo tipo (funciones y procedimientos) se e pueden sobrecargar: es posible utilizar el mismo nombre para mtodos distintos si sus parmetros formales dieren en nmero, e a u orden o tipo de datos. Cuando se invoca uno de los mtodos, el PL/SQL encuentra el e cuerpo adecuado comparando la lista de parmetros actuales a con cada una de las listas de parmetros formales. a

La operacin de sobrecarga no es posible en las siguientes o circunstancias: Si los parmetros formales dieren slo en el modo. a o Si las funciones slo dieren en el tipo de retorno. o

&
Diseo de Bases de Datos n BDOR-13

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Mtodos MAP y ORDER e Los valores de un tipo escalar, como CHAR o REAL, tienen un orden predenido que permite compararlos. Las instancias de un objeto carecen de un orden predenido. Para ordenarlas, el PL/SQL invoca a un mtodo de MAP denido por el e usuario.

En el siguiente ejemplo, la palabra clave MAP indica que el mtodo e convert ordena los objetos Rational proyectndolos como nmeros a u reales:
CREATE TYPE R a t i o n a l AS OBJECT ( num INTEGER, den INTEGER, MAP MEMBER FUNCTION c o n v e r t RETURN REAL, ... ); / CREATE TYPE BODY R a t i o n a l AS MAP MEMBER FUNCTION c o n v e r t RETURN REAL I S C o n v i e r t e un numero r a c i o n a l en un r e a l BEGIN RETURN num / den ; END c o n v e r t ; ... END; /

El PL/SQL usa esta funcin para evaluar expresiones booleanas o como x >y y para las comparaciones impl citas que requieren las clasulas DISTINCT, GROUP BY y ORDER BY. u Un tipo de objeto puede contener slo una funcin de MAP, que o o debe carecer de parmetros y debe devolver uno de los a

&

Diseo de Bases de Datos n

BDOR-14

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

siguientes tipos escalares: DATE, NUMBER, VARCHAR2 y cualquiera de los tipos ANSI SQL (como CHARACTER o REAL).

&
Diseo de Bases de Datos n BDOR-15

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Mtodos MAP y ORDER. . . e

Alternativamente, es posible denir un mtodo de ordenacin e o (ORDER). Un mtodo ORDER utiliza dos parmetros: el parmetro e a a predenido SELF y otro objeto del mismo tipo. En el siguiente ejemplo, la palabra clave ORDER indica que el mtodo match compara e dos objetos. Ejemplo: c1 y c2 son objetos del tipo Customer. Una comparacin del tipo c1 o >c2 invoca al mtodo match automticamente. El mtodo devuelve e a e un nmero negativo, cero o positivo (SELF es menor, igual o mayor u que el otro parmetro): a
CREATE TYPE Customer AS OBJECT ( id NUMBER, name VARCHAR2( 2 0 ) , addr VARCHAR2( 3 0 ) , ORDER MEMBER FUNCTION match ( c Customer ) RETURN INTEGER ); / CREATE TYPE BODY Customer AS ORDER MEMBER FUNCTION match ( c Customer ) RETURN INTEGER I S BEGIN IF i d < c . i d THEN RETURN 1; RETURN 1 ; ELSE RETURN 0 ; END IF ; END; END; C u a l q u i e r n mero n e g a t i v o v a l e . u C u a l q u i e r n mero p o s i t i v o v a l e . u ELSEIF i d > c . i d THEN

&
Diseo de Bases de Datos n BDOR-16

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Un tipo de objeto puede contener un unico mtodo ORDER, que es e una funcin que devuelve un resultado numrico. o e

&
Diseo de Bases de Datos n BDOR-17

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Mtodos MAP y ORDER. . . e

Es importante tener en cuenta los siguientes puntos: Un mtodo MAP proyecta el valor de los objetos en valores e escalares. Un mtodo ORDER compara el valor de un objeto con e otro. Se puede declarar un mtodo MAP o un mtodo ORDER, pero e e no ambos. Si se declara uno de los dos mtodos, es posible comparar e objetos en SQL o en un procedimiento. Si no se declara ninguno, slo es posible comparar la igualdad o desigualdad de dos o objetos y slo en SQL. Dos objeto slo son iguales si los valores o o de sus atributos son iguales. Cuando es necesario ordenar un nmero grande de objetos es u mejor utilizar un mtodo MAP (ya que una llamada por objeto e proporciona una proyeccin escalar que es ms fcil de ordenar). o a a ORDER es menos eciente: debe invocarse repetidamente ya que compara slo dos objetos cada vez. o Constructores Cada tipo de objeto tiene un constructor: funcin denida por el o sistema con el mismo nombre que el objeto. Se utiliza para inicializar y devolver una instancia de ese tipo de objeto. Oracle genera un constructor por omisin para cada tipo de o objeto. Los parmetros del constructor coinciden con los a atributos del tipo de objeto: los parmetros y los atributos se a declaran en el mismo orden y tienen el mismo nombre y tipo. PL/SQL nunca invoca al constructor impl citamente: el usuario debe invocarlo expl citamente.

&

Diseo de Bases de Datos n

BDOR-18

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Pragma RESTRIC_REFERENCES Para ejecutar una sentencia SQL que invoca a una funcin miemo bro, Oracle debe conocer el nivel de pureza de la funcin: la medida o en que la funcin est libre de efectos colaterales. o a Los efectos colaterales pueden impedir: La paralelizacin de una consulta. o Dar lugar a resultados dependientes del orden (y por tanto indeterminados). Requerir que un mdulo mantenga un cierto estado entre o diferentes sesiones de usuario. Una funcin miembro debe cumplir las siguientes caracter o sticas: No puede insertar, actualizar o borrar las tablas de la base de datos. No se puede ejecutar en paralelo o remotamente si lee o escribe los valores de una variable en un mdulo. o No puede escribir una variable de un mdulo excepto si se o invoca desde una clasula SELECT, VALUES o SET. u No puede invocar a otro mtodo o subprograma que rompa e alguna de las reglas anteriores. Tampoco puede hacer referencias a una vista que imcumpla estas reglas.

&
Diseo de Bases de Datos n BDOR-19

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Pragma RESTRIC_REFERENCES. . . La directiva de compilacin PRAGMA_REFERENCES se utiliza para o forzar las reglas anteriores. La sentencia PRAGMA indica al compilador PL/SQL que debe denegar a la funcin miembro el acceso a las tablas de la base de o datos, variables de un paquete o ambos. La sentencia pragma se codica despus del mtodo sobre el que e e acta en la especicacin del tipo de objeto. u o

Sintxis: a
PRAGMA RESTRICT REFERENCES ( {DEFAULT | nombre m todo } , e {RNDS | WNDS | RNPS | WNPS} [ , {RNDS | WNDS | RNPS | WNPS } ] . . . ) ;

Ejemplo: La siguiente sentencia pragma impide al mtodo de MAP convert: e Leer el estado de la base de datos (Read No Database State). Modicar el estado de la base de datos (Write No Database State) Leer el estado de un paquete o mdulo (Read No Package State). o Modicar el estado de un paquete (Write No Package State):
CREATE TYPE R a t i o n a l AS OBJECT ( num INTEGER, den INTEGER, MAP MEMBER FUNCTION c o n v e r t RETURN REAL, ... PRAGMA RESTRICT REFERENCES ( c o n v e r t ,RNDS,WNDS, RPNS,WNPS) ); /

&
Diseo de Bases de Datos n BDOR-20

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Un mtodo slo se puede invocar en consultas paralelas si se indican e o las cuatro limitaciones anteriores.

&
Diseo de Bases de Datos n BDOR-21

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Pragma RESTRIC_REFERENCES. . . Si se utiliza la palabra clave DEFAULT en lugar del nombre del mtodo, la sentencia pragma se aplica a todas las funciones miembro e inclu el constructor denido por el sistema. do Ejemplo: La siguiente sentencia pragma limita a todas las funciones miembro la modicacin del estado de la base de datos o de los paquetes: o

PRAGMA RESTRICT REFERENCES (DEFAULT, WNDS, WNPS)

Es posible declarar un pragma para cada funcin miembro, que o predomina sobre cualquier pragma por omisin denido para el o objeto.

&
Diseo de Bases de Datos n BDOR-22

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Declaracin e inicializacin de objetos o o


Una vez que se ha denido un tipo de objeto y se ha instalado en el esquema de la base de datos, es posible usarlo en cualquier bloque PL/SQL. Las instancias de los objetos se crean en tiempo de ejecucin. o Estos objetos siguen las reglas normales de ambito y de instanciacin. o En un bloque o subprograma, los objetos locales son instanciados cuando se entra en el bloque o subproprograma y dejan de existir cuando se sale. En un paquete, los objetos se instancian cuando se referencia por primera vez al paquete y dejan de existir cuando naliza la sesin. o

&
Diseo de Bases de Datos n BDOR-23

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Declaracin de objetos o Los tipos de objetos se declaran del mismo modo que cualquier tipo interno. Ejemplo: En el bloque que sigue se declara un objeto r de tipo Racional y se invoca al constructor para asignar su valor. La llamada asigna los valores 6 y 8 a los atributos num y den respectivamente:
DECLARE r BEGIN r := R a c i o n a l ( 6 , 8 ) ; DBMS OUTPUT. PUT LINE( r . num ) ; muestra 6 Racional ;

Tambin es posible declarar objetos como parmetros formales e a de funciones y procedimientos, de modo que es posible pasar objetos a los subprogramas almacenados y de un subprograma a otro. Ejemplos: 1. Aqu se emplea un objeto de tipo Account para especicar el tipo de dato de un parmetro formal: a
DECLARE ... PROCEDURE o p e n a c c t ( n e w a c c t IN OUT Account ) I S . . .

2. En el siguiente ejemplo se declara una funcin que devuelve o un objeto de tipo Account:
DECLARE ... FUNCTION g e t a c c t ( a c c t i d IN INTEGER) RETURN Account I S . . .

&
Diseo de Bases de Datos n BDOR-24

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

' Inicializacin de objetos o Hasta que se inicializa un objeto, invocando al constructor para ese tipo de objeto, el objeto se dice que es Atmicamente nulo: o El propio objeto es nulo, no slo sus atributos. o Un objeto nulo siempre es diferente a cualquier otro objeto. De hecho, la comparacin de un objeto nulo con otro objeto o siempre resulta NULL. Si se asigna un objeto con otro objeto atmicamente nulo, el o primero se convierte a su vez en un objeto atmicamente nulo (y o para poder utilizarlo debe ser reinicializado). En general, si asignamos el no-valor NULL a un objeto, ste se e convierte en atmicamente nulo o Ejemplo:
DECLARE r Racional ; BEGIN r R a c i o n a l := R a c i o n a l ( 1 , 2 ) ; r = 1/2 r := NULL; r at micamente n u l o o IF r I S NULL THEN . . . l a c o n d i c i o n r e s u l t a TRUE

Una buena prctica de programacin consiste en inicializar los a o objetos en su declaracin, como se muestra en el siguiente ejemplo: o
DECLARE r R a c i o n a l := R a c i o n a l ( 2 , 3 ) ; r = 2/3

&
Diseo de Bases de Datos n BDOR-25

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

' Objetos sin inicializar en PL/SQL PL/SQL se comporta del siguiente modo cuando accede a objetos sin inicializar: Los atributos de un objeto no inicializado se evalan en u cualquier expresin como NULL. o Intentar asignar valores a los atributos de un objeto sin inicializar provoca la excepcin predenida ACCESS_INTO_NULL. o La operacin de comparacin IS NULL siempre produce TRUE o o cuando se aplica a un objeto no inicializado o a cualquiera de sus atributos. Existe por tanto, una sutil diferencia entre objetos nulos y objetos con atributos nulos. El siguiente ejemplo intenta ilustrar esa diferencia:
DECLARE r R e l a c i o n a l ; r e s at micamente n u l o o BEGIN IF r I S NULL THEN . . . TRUE IF r . num I S NULL THEN . . . TRUE r := R a c i o n a l (NULL, NULL ) ; I n i c i a l i z a r r . num = 4 ; E x i t o : r ya no e s at micamente n u l o aunque o s u s a t r i b u t o s son n u l o s r := NULL; r e s de nuevo at micamente n u l o o r . num := 4 ; Provoca l a e x c e p c i o n ACCESS INTO NULL EXCEPTION WHEN ACCESS INTO NULL THEN ... END; /

&
Diseo de Bases de Datos n BDOR-26

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Objetos sin inicializar en PL/SQL. . . La invocacin de los mtodos de un objeto no inicializado est o e a permitida, pero en este caso: SELF toma el valor NULL. Cuando los atributos de un objeto no inicializado se pasan como parmetros IN, se evalan como NULL. a u Cuando los atributos de un objeto no inicializado se pasan como parmetros OUT o IN OUT, se produce una excepcin si se intenta a o asignarles un valor. Acceso a los atributos Para acceder o cambiar los valores de un atributo se emplea la notacin punto (.): o
DECLARE r R a c i o n a l := R a c i o n a l (NULL, NULL ) ; numerador INTEGER; denominador INTEGER; BEGIN ... denominador := r . den ; r . num = numerador ;

&
Diseo de Bases de Datos n BDOR-27

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

' Acceso a los atributos. . . Los nombres de los atributos pueden encadenarse, lo que permite acceder a los atributos de un tipo de objeto anidado. Por ejemplo, supongamos que denimos los tipos de objeto Address y Student como sigue:
CREATE TYPE Address AS OBJECT ( street city state ); / CREATE TYPE S t u d e n t AS OBJECT ( name VARCHAR2( 2 0 ) , h o m e a d d r e s s Address , phone number VARCHAR2( 1 0 ) , status ... ); / VARCHAR2( 1 0 ) , a d v i s o r n a m e VARCHAR2( 2 0 ) , VARCHAR2( 3 0 ) , VARCHAR2( 2 0 ) , CHAR( 2 ) ,

z i p c o d e VARCHAR2( 5 )

zip_code es un atributo de tipo Address Address es el tipo de dato del atributo home_address del tipo de objeto Student. Si s es un objeto Student, para acceder al valor de su zip_code se emplea la siguiente notacin: o
s . home address . z i p c o d e

&
Diseo de Bases de Datos n BDOR-28

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Invocacin de constructores y mtodos o e


La invocacin de un constructor est permitida en cualquier o a punto en donde se puede invocar una funcin. o Como las funciones, un constructor se invoca como parte de una expresin. o

DECLARE r 1 R a c i o n a l := R a c i o n a l ( 2 , 3 ) ; FUNCTION a v e r a g e ( x R a c i o n a l , y R a c i o n a l ) RETURN R a c i o n a l I S BEGIN ... END; BEGIN r 1 := a v e r a g e ( R a c i o n a l ( 3 , 4 ) , R a c i o n a l ( 7 , 1 1 ) ) ; IF ( R a c i o n a l ( 5 , 8 ) > r 1 ) THEN ... END IF ; END; /

Paso de parmetros a un constructor a Cuando se pasan parmetros a un constructor la invocacin a o asigna valores iniciales a los atributos del objeto que se est a instanciando. Es necesario suministrar parmetros para cada uno de los a atributos ya que, a diferencia de las constantes y variables, los atributos carecen de la clasula DEFAULT. u Tambin es posible invocar al constructor utilizando la notacin e o con nombre en lugar de la notacin posicional, como se muestra: o

&

Diseo de Bases de Datos n

BDOR-29

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

BEGIN r := R a c i o n a l ( den => 6 , num => 5 ) ; a s i g n a num = 5 y den = 6

&
Diseo de Bases de Datos n BDOR-30

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Invocacin de mtodos o e Los mtodos se invocan usando la notacin punto. e o Ejemplo: invocacin del mtodo normaliza que divide los o e atributos num y den por el mayor comn divisor: u
DECLARE r Racional ; BEGIN r := R a c i o n a l ( 6 , 8 ) ; r . normaliza ; DBMS OUTPUT. PUT LINE( r . num ) ; muestra 3

Es posible encadenar las llamadas a los mtodos: e


DECLARE r R a c i o n a l := R a c i o n a l ( 6 , 8 ) ; BEGIN r . reciproco ( ) . normaliza ; DBMS OUTPUT. PUT LINE( r . num ) ; muestra 4

La ejecucin se realiza de izquierda a derecha: primero se invoca o la funcin reciproco y despus la funcin normaliza. o e o En las sentencias SQL la invocacin de un mtodos sin o e parmetros requiere la lista vacia de parmetros: (). a a En sentencias de procedimiento la lista vacia de parmetros es a opcional, excepto cuando se encadenan llamadas: es obligatoria para todas las llamadas excepto la ultima. No es posible encadenar invocaciones a mtodos adicionales a la e derecha de la invocacin de un procedimiento (los o procedimientos no son parte de una expresin). La siguiente o sentencia es ilegal:
r . n o r m a l i z a ( ) . r e c i p r o c o ; i l e g a l

&

Cuando se encadenan dos llamadas a funcin, el resultado de la o primera funcin debe ser un objeto que puede ser pasado a la o segunda funcin. o

Diseo de Bases de Datos n

BDOR-31

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Comparticin de objetos o La mayor de los objetos del mundo real son considerablemente a ms grandes y complejos que el tipo Relacional. Por ejemplo, a consideremos los siguientes tipos de objeto:

CREATE TYPE Address AS OBJECT ( s t r e e t a d d r e s s VARCHAR2( 3 5 ) , city state zip code ); / CREATE TYPE Person AS OBJECT ( first name last name birthday VARCHAR2( 1 5 ) , VARCHAR2( 1 5 ) , DATE, VARCHAR2( 1 5 ) , CHAR( 2 ) , INTEGER

h o m e a d d r e s s Address , Objeto a n i d a d o phone number VARCHAR2( 1 5 ) , ss number ... ); / INTEGER

Los objetos de tipo Address tienen ms del doble de atributos a que los del tipo Relacional y los objetos de tipo Person todav tienen ms atributos, incluyendo uno de tipo Address. a a Cuando se utilizan objetos grandes, resulta ineciente pasar copias de l entre subprogramas. En estas circunstancias tiene e ms sentido compartir el objeto. a Esto se puede hacer si el objeto cuenta con un identicador de objeto. Para compartir objetos se utilizan referencias (refs de forma abreviada). Una ref es un puntero al objeto. &
Diseo de Bases de Datos n BDOR-32

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Comparticin de objetos. . . o La comparticin de objetos proporciona dos ventajas importantes: o La informacin no se duplican innecesariamente. o Cuando se actualiza un objeto compartido, el cambio se produce slo en un lugar y cualquier referencia al objeto puede recuperar o los valores actualizados inmediatamente.

En el ejemplo siguiente, obtenemos las ventajas de la comparticin o deniendo el tipo de objeto Home y creando una tabla que almacena las instancias de ese tipo:
CREATE TYPE Home AS OBJECT ( address owner age style price ... ); / ... CREATE TABLE homes OF Home ; VARCHAR2( 3 5 ) , VARCHAR2( 2 5 ) , INTEGER, VARCHAR( 1 5 ) , REAL( 9 , 2 ) ,

f l o o r p l a n BLOB,

&
Diseo de Bases de Datos n BDOR-33

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Utilizacin de referencias o

Revisando la denicin anterior del objeto de tipo Person, o observamos que podemos disear una comunidad que puede n compartir la misma casa (Home).
CREATE TYPE Person AS OBJECT ( first name last name birthday VARCHAR2( 1 5 ) , VARCHAR2( 1 5 ) , DATE,

h o m e a d d r e s s REF Home , Compartido con l a f a m i l i a phone number VARCHAR2( 1 5 ) , ss number mother father ... ); / INTEGER REF Person , Miembros de l a f a m i l i a REF Person ,

Note cmo las referencias entre Person y Homes y entre Person o entre s denen relaciones que se dan en el mundo real. Es posible declarar referencias como variables, parmetros, a campos o atributos. Se pueden utilizar referencias como parmetros IN y OUT en a funciones y procedimientos. Pero mo es posible navegar a travs de referencias. e Ejemplo: un intento ilegal de navegar a travs de una referencia e a un objeto:
DECLARE p ref BEGIN ... phone no = p r e f . phone number ; I l e g a l ! REF Person ; phone no VARCHAR2( 1 5 ) ;

&

%
DBD-13019

Diseo de Bases de Datos n

BDOR-34

Universitat de Val`ncia e

Departament dInform`tica a

'

Para llevar a cabo esta operacin es necesario utilizar el o operador DEREF, a travs del cual se puede acceder al objeto. e

&
Diseo de Bases de Datos n BDOR-35

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Limitaciones en la denicin de tipos o En la creacin de un tipo slo se puede hacer referencia a objetos o o que ya existan en el esquema de objetos.

En el siguiente ejemplo la primera sentencia CREATE TYPE es ilegal porque hace referencia al objeto de tipo Departament que todav a no existe:
CREATE TYOE Employee AS OBJECT ( name VARCHAR2( 2 0 ) , dept REF Departament , I l e g a l ! ... ); / CREATE TYPE Departament AS OBJECT ( number ... ); / INTEGER, manager REF Employee ,

Cambiar el orden de las sentencias CREATE TYPE no soluciona el problema, ya que ambos tipos son mutuamente dependientes.

&
Diseo de Bases de Datos n BDOR-36

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

' Limitaciones en la denicin de tipos. . . o Para resolver el problema se utiliza una sentencia CREATE TYPE especial denominada denicin previa de tipo, que permite la o creacin de tipos de objetos mutuamente dependientes. o
CREATE TYPE Departament ; D e f i n i c i o n p r e v i a de t i p o En e s t e punto , Departament e s un t i p o de o b j e t o i n c o m p l e t o

El tipo creado mediante una denicin previa de tipo se o denomina tipo de objeto incompleto ya que carece de atributos y mtodos hasta que se dena en su totalidad. e Un tipo incompleto impuro cuenta con atributos, pero compila con errores semntico (no sintcticos) al hacer referencia a un a a tipo indenido. Por ejemplo, la siguiente sentencia CREATE TYPE compila con errores debido a que el tipo de objeto Address todav no est denido: a a
CREATE TYPE Customer AS OBJECT ( id name addr ); / NUMBER, VARCHAR2( 2 0 ) , Address , t o d a va i n d e f i n i d o

phone VARCHAR2( 1 5 )

Esto permite retrasar la denicin del tipo de objeto Address. o Ms an, las referencias al tipo incompleto Customer estn a u a disponibles para otras aplicaciones. &
Diseo de Bases de Datos n BDOR-37

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Manipulacin de objetos o
Es posible utilizar un tipo de objeto en una sentencia CREATE TABLE para especicar el tipo de una columna. Una vez que la tabla se ha creado, se pueden utilizar las sentencias SQL para insertar un objeto, seleccionar sus atributos, invocar los mtodos denidos y actualizar su estado. e

Ejemplos: 1. La sentencia INSERT invoca al constructor del tipo Racional para insertar su valor. La sentencia SELECT recupera el valor del atributo num y la sentencia UPDATE invoca al mtodo reciproco, e que devuelve un valor Relacional despus de invertir los e valores de num y den. Observe que se requiere un alias de la tabla cuando se hace referencia a un atributo o mtodo. e
CREATE TABLE numbers ( rn R a c i o n a l , ...); INSERT INTO numbers ( rn ) VALUES ( R a c i o n a l ( 3 , 6 2 ) ) ; SELECT n . rn . num INTO my num FROM numbers n WHERE . . . UPDATE numbers n SET n . rn = n . rn . r e c i p r o c o WHERE . . .

Cuando se crea un objeto de este modo, carece de identidad fuera de la tabla de la base de datos. 2. En el siguiente ejemplo se crea una tabla que almacena en sus las objetos del tipo Relacional. Este tipo de tablas, cuyas las contienen un tipo de objetos, se denominan tablas de objetos. Cada columna en una la se corresponde con un atributo del tipo de objeto:
CREATE TABLE r a c i o n a l n u m s OF R a c i o n a l ;

&

Cada la en una tabla de objetos cuenta con un identicador de objeto, que identica de forma un voca al objeto almacenado en dicha la y sirve como una refencia al objeto.

Diseo de Bases de Datos n

BDOR-38

DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Seleccin de objetos o Supongamos que ejecutamos el siguiente script de SQL*Plus, que crea un tipo de objeto denominado Person y una tabla de objetos persons junto con algunos valores:
CREATE TYPE Person AS OBJECT ( first name last name birthday VARCHAR2( 1 5 ) , VARCHAR2( 1 5 ) , DATE,

h o m e a d d r e s s Address , phone number VARCHAR2( 1 5 ) , ); / CREATE TABLE p e r s o n s OF Person ; /

La siguiente subconsulta produce como resultado un conjunto de las que contienen slo atributos de los objetos Person: o
BEGIN INSERT INTO e m p l o y e e s e m p l y e e s e s o t r a t a b l a de o b j e t o s de t i p o Person SELECT FROM p e r s o n s p WHERE p . l a s t n a m e LIKE % smith ;

&
Diseo de Bases de Datos n BDOR-39

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador VALUE El comando VALUE devuelve el valor de un objeto. VALUE requiere como argumento una variable de correlacin (en o este contexto, variable de correlacin es una la o alias de tabla o asociado a una la en una tabla de objetos).

Ejemplos: 1. Para obtener un conjunto de objetos Person se puede utilizar el comando VALUES del siguiente modo:
BEGIN INSERT INTO e m p l o y e e s SELECT VALUE( p ) FROM p e r s o n s p WHERE p . l a s t n a m e LIKE % smith

2. En el siguiente ejemplo, se utiliza el operador VALUE para obtener un objeto Person espec co:
DECLARE p1 PERSON; p2 PERSON; BEGIN SELECT VALUE( p ) INTO p1 FROM p e r s o n s p WHERE p . l a s t n a m e = K r o l l ; p2 := p1 ; ... END;

Despus de ejecutar la consulta SQL, la variable p1 contiene un e objeto Person local, que es una copia del objeto almacenado en la tabla persons. Del mismo modo, p2 contiene otra copia local del objeto. 3. Es posible utilizar las variables anteriores para acceder y modicar el objeto que contienen:

&

%
DBD-13019

Diseo de Bases de Datos n

BDOR-40

Universitat de Val`ncia e

Departament dInform`tica a

'

BEGIN p1 . l a s t n a m e := p1 . l a s t n a m e | | Jr ;

&
Diseo de Bases de Datos n BDOR-41

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador REF El operador REF se utiliza para obtener una referencia a un objeto. Como el operador VALUE, toma como argumento una variable de correlacin. o Ejemplos: 1. En el siguiente ejemplo, primero se recuperan una o ms a referencias a objetos de tipo Person y despus se insertan en la e tabla person_refs:
BEGIN INSERT INTO p e r s o n r e f s SELECT REF( p ) FROM p e r s o n s p WHERE p . l a s t n a m e LIKE % smith ;

2. En el siguiente ejemplo se obtienen simultneamente una a referencia y un atributo:


DECLARE p ref BEGIN SELECT REF( p ) , p . ss number INTO p r e f , t a x p a y e r i d FROM p e r s o n s p WHERE p . l a s t n a m e = P a r k e r ; s o l o una f i l a ... END; REF Person ; t a x p a y e r i d VARCHAR2( 9 ) ;

&
Diseo de Bases de Datos n BDOR-42

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador REF. . . 3. En este ultimo ejemplo, se actualizan los atributos de un objeto Person:
DECLARE p ref ... BEGIN ... SELECT REF( p ) INTO p r e f FROM p e r s o n s p WHERE p . l a s t n a m e = my last name ; UPDATE p e r s o n s p SET p = Person ( J i l l , Anders , 11NOV67 , WHERE REF( p ) = p r e f ; END; ...) REF Person ; my last name VARCHAR2( 1 5 ) ;

Referencias colgadas (dangling refs) Si el objeto al cual apunta una referencia es borrado, la referencia queda colgada (dangling, apuntando a un objeto inexistente). Para comprobar si se produce esta condicin se puede utilizar el o predicado SQL IS DANGLING. Ejemplo: Supongamos que la columna manager en la tabla relacional department contiene referencias a objetos Employee almacenados en una tabla de objetos. Para convertir todas las referencias colgadas en nulos, podemos utilizar la siguiente sentencia UPDATE: &
BEGIN

%
BDOR-43 DBD-13019

Diseo de Bases de Datos n

Universitat de Val`ncia e

Departament dInform`tica a

'

UPDATE department SET manager = NULL WHERE manager I S DANGLING;

&
Diseo de Bases de Datos n BDOR-44

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador DEREF No es posible navegar a travs de referencias en procedimientos e SQL. Para esto es necesario utilizar el operador DEREF (abreviatura del trmino ingls dereference: derreferenciar un e e puntero es obtener el valor al cual apunta). DEREF toma como argumento una referencia a un objeto y devuelve el valor de dicho objeto. Si la referencia est colgada, a DEREF devuelve el valor NULL.

Ejemplos: 1. En el ejemplo que sigue se derreferencia una referencia a un objeto Person. En estas circunstancias, no es necesario especicar una tabla de objetos ni un criterio de bsqueda ya u que cada objeto almacenado en una tabla de objetos cuenta con un identicador de objeto unico e inmutable que es parte de cada referencia a un objeto.
DECLARE p1 name BEGIN ... / Supongamos que p r e f c o n t i e n e una r e f e r e n c i a v a l i d a a un o b j e t o almacenado en una t a b l a de o b j e t o s / SELECT DEREF( p r e f ) INTO p1 FROM DUAL; name := p1 . l a s t n a m e ; Person ; VARCHAR2( 1 5 ) ; p r e f REF Person ;

&
Diseo de Bases de Datos n BDOR-45

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador DEREF. . . 2. Es posible utilizar el operador DEREF en sentencias SQL sucesivas para derreferencias referencias, como se muestra en el siguiente ejemplo:
CREATE TYPE P e r s o n R e f AS OBJECT ( p r e f REF Person ) ; / DECLARE name pr p BEGIN ... / Supongamos que p r r e f c o n t i e n e una r e f e r e n c i a v a l i d a / SELECT DEREF( p r r e f ) INTO pr FROM DUAL; SELECT DEREF( pr . p r e f ) INTO p FROM DUAL; name := p . l a s t n a m e ; ... END; / VARCHAR2( 1 5 ) ; PersonRef ; Person ; p r r e f REF P e r s o n R e f ;

3. En procedimientos SQL la utilizacin del operador DEREF es o ilegal. En sentencias SQL se puede utilizar la notacin punto o para navegar a travs de referencias. Por ejemplo, la siguiente e sentencia es legal:
t a b l e a l i a s . object column . r e f a t t r i b u t e t a b l e a l i a s . object column . r e f a t t r i b u t e . a t t r i b u t e t a b l e a l i a s . ref column . attribute

&
Diseo de Bases de Datos n BDOR-46

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador DEREF. . . 4. Supongamos ahora que ejecutamos el siguiente script SQL*Plus que crea los tipos de objeto Address y Person y la tabla de objetos persons:
CREATE TYPE Address AS OBJECT ( s t r e e t a d d r e s s VARCHAR2( 3 5 ) , city state zip code ); / CREATE TYPE Person AS OBJECT ( first name last name birthday VARCHAR2( 1 5 ) , VARCHAR2( 1 5 ) , DATE, VARCHAR2( 1 5 ) , CHAR( 2 ) , INTEGER

h o m e a d d r e s s Address , phone number VARCHAR2( 1 5 ) , ); / CREATE TABLE p e r s o n s OF Person ; /

El atributo home_address es una referencia a una columna en la tabla de objetos persons, que a su vez contiene referencias a objetos Address almacenados en otra tabla indeterminada. Tras introducir algunos elementos en la tabla, es posible obtener una direccin particular derreferenciando su referencia, como se o muestra en el siguiente ejemplo:
DECLARE addr1 Address , addr2 Address , ... BEGIN

&

%
BDOR-47 DBD-13019

Diseo de Bases de Datos n

Universitat de Val`ncia e

Departament dInform`tica a

'

SELECT DEREF( h o m e a d d r e s s ) INTO addr1 FROM p e r s o n s p WHERE p . l a s t n a m e = D e r r i n g e r ;

&
Diseo de Bases de Datos n BDOR-48

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

El operador DEREF. . . 5. Por ultimo, en este ejemplo se navega a travs de la columna de e referencias home_address hasta el atributo street. En este caso se requiere un alias a la tabla:
DECLARE m y s t r e e t VARCHAR2( 2 5 ) , ... BEGIN SELECT p . h o m e a d d r e s s . s t r e e t INTO m y s t r e e t FROM p e r s o n s p WHERE p . l a s t n a m e = Lucas ;

Insercin de objetos o Para aadir objetos a una tabla de objetos se utiliza el comando n UPDATE. Ejemplos: 1. Para insertar un objeto Person en la tabla de objetos persons utilizamos la siguiente l nea:
BEGIN INSERT INTO p e r s o n s VALUES ( J e n i f e r , Lapidus , ...);

2. Alternativamente, es posible utilizar el constructor para el objeto de tipo Person:


BEGIN INSERT INTO p e r s o n s VALUES ( Person ( A l b e r t , Brooker , ...));

&
Diseo de Bases de Datos n BDOR-49

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

' Insercin de objetos. . . o 3. En el siguiente ejemplo, se utiliza la clasula RETURNING para u almacenar una referencia a Person en una variable local. Es importante destacar como esta clasula simula una sentencia u SELECT. La clasula RETURNING se puede utilizar tambin en u e sentencias UPDATE y DELETE.
DECLARE p 1 r e f REF Person , p 2 r e f REF Person , ... BEGIN INSERT INTO p e r s o n s p VALUES ( Person ( Paul , Chang , . . . ) ) RETURNING REF( p ) INTO p 1 r e f ; INSERT INTO p e r s o n s p VALUES ( Person ( Ana , Thorne , . . . ) ) RETURNING REF( p ) INTO p 2 r e f ;

4. Para insertar objetos en una tabla de objetos se puede utilizar una consulta que devuelva un objeto del mismo tipo, como se muestra en el siguiente ejemplo:
BEGIN INSERT INTO p e r s o n s 2 SELECT VALUE( p ) FROM p e r s o n s p J WHERE p . l a s t n a m e LIKE % o n e s ;

Las las copiadas a la tabla de objetos persons2 cuentan con identicadores de objeto nuevos, ya que los identicadores de objeto son unicos. &
Diseo de Bases de Datos n BDOR-50

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Insercin de objetos. . . o 5. El siguiente script crea la tabla relacional department que cuenta con una columna de tipo Person; despus inserta una la e en la tabla. Es importante destacar cmo el constructor o Person() proporciona un valor para la columna manager:
CREATE TABLE department ( dept name manager location / INSERT INTO department VALUES ( P a y r o l l , Person ( Alan , T s a i , . . . ) , Los A n g e l e s ) ; / VARCHAR2( 2 0 ) , Person , VARCHAR2( 2 0 ) ) ;

El nuevo objeto Persona almacenado en la columna manager no es referenciable, ya que al estar almacenada en una columna (y no en una la) carece de identicador de objeto.

&
Diseo de Bases de Datos n BDOR-51

%
DBD-13019

Universitat de Val`ncia e

Departament dInform`tica a

'

Actualizacin de objetos o

Para modicar los atributos de un objeto en una tabla de objetos se utiliza la sentencia UPDATE Ejemplo:
BEGIN UPDATE p e r s o n s p SET p . h o m e a d d r e s s = 341 Oakdene Ave WHERE p . l a s t n a m e = Brody ; ... UPDATE p e r s o n s p SET p = Person ( Beth , S t e i n b e r g , WHERE p . l a s t n a m e = Steinway ; ... END; ...)

Borrado de objetos Para eliminar objetos (las) de una tabla de objetos se utiliza la sentencia DELETE. Para eliminar objetos selectivamente se utiliza la clasula WHERE. u Ejemplo:
BEGIN DELETE FROM p e r s o n s p WHERE p . h o m e a d d r e s s = 108 Palm Dr ; ... END;

&
Diseo de Bases de Datos n BDOR-52

%
DBD-13019

Potrebbero piacerti anche