Вы находитесь на странице: 1из 5

28/2/2016

objetos

SGBDOO.ObjetosenOracle
PresentacindelaUniversidadReyJuanCarlos
TeoriadeBRObjetoRelacionales

Definicindeunobjeto
Paradefinirunobjetosecreaunnuevotipo.
Secreaunconstructorpordefectoquedeberecibirlosatributosenelordenenelquesehayandefinidoalcrearelnuevotipo
A)CreamosunobjetodeltipoTABLONcon2atributos(largoyancho)y3mtodos(area,perimetroyprecioalqueselepasarun
preciopormetrocuadrado):
createorreplaceTYPETABLONASOBJECT(
largointeger,
anchointeger,
memberfunctionareareturninteger,
memberfunctionperimetroreturninteger,
memberfunctionprecio(pfloat)returnfloat
)
B)Definimoselcuerpodelobjeto(ladefinicindelosmtodos)
createorreplaceTYPEBODYTABLONAS
memberfunctionareareturnintegerAS
resultadointeger
BEGIN
resultado:=largo*ancho
RETURNresultado
ENDarea
memberfunctionperimetroreturnintegerAS
resultadointeger
BEGIN
resultado:=2*largo+2*ancho
RETURNresultado
ENDperimetro
memberfunctionprecio(pfloat)returnfloatAS
resultadofloat
BEGIN
resultado:=area*p
RETURNresultado
ENDprecio
END

UsodesentenciasSQLconobjetos:
Creacindetablasenlasqueunodeloscamposesunobjeto.
CrearemosunatablallamadamueblequecontieneobjetosdeltipoTABLON(verdibujo):
CREATETABLEMUEBLE(NUMEROINT,CANTIDADINT,ELEMENTOCHEMA.TABLON)

InsercinderegistrosenlatablaMUEBLE
Creamoslosregistrosdelmueble:
insertintomueblevalues(1,2,newtablon(180,30))
insertintomueblevalues(2,3,newtablon(100,30))
insertintomueblevalues(3,1,newtablon(120,30))
Operacionessobreelmueble:
http://www.vespino.com/~chema/daw1/tutoriales/oracle/objetos.htm

1/5

28/2/2016

objetos

Verloscomponentes:select*frommueblem

Dimensionesdelastablas:selectm.cantidad,m.elemento.largo,m.elemento.ancho
frommueblem

Areas,permetrosycostedecadatabla(a23/m2):select
m.cantidad,m.elemento.area(),m.elemento.perimetro(),m.elemento.precio(0.0023)
frommueblem

Preciototaldelmueble(a23/m2):selectsum(m.cantidad*m.elemento.precio(0.0023))frommueblem>53,82
Sepuedenhacercondicionescomom.elemento.area()<100
operacionesdeactualizacincomoupdatemueblemsetm.elemento.largo=200wherenumero=1parahacerelmueblede200
cmdealtoenvezde180

Usodeobjetosenfunciones
createorreplaceFUNCTIONfuncion_con_objeto(aint,bint)RETURNVARCHAR2AS
r1tablon
BEGIN
r1:=NEWtablon(a,b)
return'Elareaes'||r1.area()
END
selectfuncion_con_objeto(10,20)fromdualdevuelveeltextoElareaes200

Atributosmultivaluados
La1FNindicaquenodebenasistiratributosmultivaluados.Sinembargo,enBDOOsepuedecrearatributosquepuedantenermsde
unvalorysermanejadosdeunaformasencilla

Colecciones
Esungrupodeelementosdelmismotipo.Porejemplo,supongamosquesedeseaalmacenardatosatmicosdelosempleadosdeuna
empresa(porejemplo,elnombre)juntoconelnombredesushijos(multivaluado).EnBDrelacionalessegeneran2tablas:empleadose
hijos.LaFKdehijoseslaPKdeempleados.EnBDOOsecrearaunacoleccin:
TiposNuevoTipoNombre=colec_hijosTipo=tipodematrizDefinirCompilar
CREATEORREPLACETYPECOLEC_HIJOSASVARRAY(10)OFvarchar2(30)
Deestaforma,sedefineeltipocolec_hijosquepuedealmacenarunmximode10hijos,cadaunoconhasta30caracteresensunombre
Unavezdefinidalacoleccin,sepuedecrearlatablaempleadoquecontieneuncampodeltipocolecc_hijos
CREATETABLE"CHEMA"."EMPLEADO"(
"ID"NUMBER,
"NOMBRE"VARCHAR2(20BYTE),
"APELLIDOS"VARCHAR2(20BYTE),
"HIJOS""CHEMA"."COLEC_HIJOS",
CONSTRAINT"PRK1"PRIMARYKEY("ID")
)
http://www.vespino.com/~chema/daw1/tutoriales/oracle/objetos.htm

2/5

28/2/2016

objetos

Acontinuacinsepuedeninsertarregistrosenlatablaempleadoyseleccionarlos:

NoesposibleaccederaloselementosindividualesdeunacoleccindesdeuncomandoSQL.EsprecisorealizarunprogramaPLSQL

Tablasanidadas
Existelaposibilidaddenolimitarlacantidaddevaloresdentrodelatributomultivaluado,haciendoqueelcamposeadeltipotabla
Enelejemploanterior,elnmeromximodehijoserade10.Podemoshacerloilimitadodefiniendountipotabla:
CREATEORREPLACETYPETABLA_HIJOSASTABLEOFvarchar2(30)
Despussecrealatablaempleadoconuncampodeltipotabla_hijos.Esprecisodesdeeleditordelatabladarunnombrealatabla
anidadanestedtable(ennuestrocasot_hijos)
Deestaformasepasadetablasde2dimensiones(fila,columna)a3dimensiones(fila,columna,filadetipos).Evidentementesepuede
tenervariosnivelesdetablasanidadas
Verelgrficoconlasdistintasrdenesparainsertar,seleccionar,borrar,sustituir,...

Lomstiles
1.Crearuntipoobjetoconsusatributos
2.Crearuntipotablaconelobjetoanterior
3.Crearunatablaconuncampoqueseaunatablaanidadadelobjetocreadoenelpunto2
Ejemplo:queremosalmacenarlossiguientesdatosdenuestrosclientes:
Identificativodelcliente
Nombre
Telfonodelcliente
Peronosdamoscuentaqueunclientetienetelfonopersonaldecasaymvil,telfonodelaempresaymvildelaempresa,esdecir,de
1a4telefnos
1)Creamosunobjetodeltipotelefonocon2campos:tipo(casa,trabajo,fijo,mvil,...)yelnumero
CREATEORREPLACETYPETELEFONOASOBJECT(tipovarchar2(30),numeronumber)
2)Creamosuntipotablallamadolistinquepuedecontenermltiplesobjetosdeltipotelfono
http://www.vespino.com/~chema/daw1/tutoriales/oracle/objetos.htm

3/5

28/2/2016

objetos

CREATEORREPLACETYPELISTINASTABLEOFtelefono
3)Creamosunatablaconlosdatosdeunclienteentrelosqueseencuentrauncampodeltipolistin

Deestaforma,secreaunatablaenlaqueelcampoTELFSesotratablacon2campos:tipoynumero
ID NOMBRE APELLIDOS

TELS
TIPO NUMERO

Francisco

Perez

Esperanza Jimenez

Casa

111

Movil

666

Trabajo

777

TIPO NUMERO
Casa

222

UsamoslasdistintasrdenesSQLconlatablaortriginal(cliente)ylatablaanidada(tel_tab):
Insertounclientecon2telefonos
INSERTINTOcliente(ID,nombre,apellidos,telfs)values(1,'Francisco','Perez',listin(telefono('Casa',111),telefono('Movil',666)))
Insertounclientecon1telefono
INSERTINTOcliente(ID,nombre,apellidos,telfs)values(2,'Esperanza','Jimenez',listin(telefono('Casa',222)))
Aadountelefonoalcliente1.VerelusodelapalabraclaveTABLEquerecibelatablaanidada
INSERTINTOTABLE(SELECTtelfsFROMclienteWHEREid=1)VALUES('Trabajo',777)
Listadodeclientesysustelefonos(desanidamiento)
SELECTt1.nombre,t1.apellidos,t2.tipo,t2.numeroFROMclientet1,TABLE(t1.telfs)t2
Busquedadeuntelefonoconcreto
SELECTt1.nombre,t1.apellidos,t2.tipo,t2.numeroFROMclientet1,TABLE(t1.telfs)t2WHEREt2.numero=777
TelefonosdePerez
SELECTt2.tipo,t2.numeroFROMclientet1,TABLE(t1.telfs)t2WHEREt1.apellidos='Perez'
CambioeltelefonodecasadePerez
UPDATETABLE(SELECTtelfsFROMclienteWHEREapellidos='Perez')SETnumero=112WHEREtipo='Casa'
BorroeltelefonoMovildePerez
DELETEFROMTABLE(SELECTtelfsFROMclienteWHEREapellidos='Perez')WHEREtipo='Movil'

AccesoaObjetosOracledesdeJava
http://www.vespino.com/~chema/daw1/tutoriales/oracle/objetos.htm

4/5

28/2/2016

objetos

//Copiarlalibreraojdbc6.jar(uojdbc5.jar)enC:/BlueJ/lib/userlib.
//LalibreraestenelservidordeOracle
importjava.sql.*
classOracle{
publicstaticvoidmain(Stringargs[])throwsException{
DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver())
Class.forName("oracle.jdbc.driver.OracleDriver")
Connectionconn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.253:1521:asir2","chema","chema")
Statementstmt=conn.createStatement()
//Accedoalatablaquetieneelcamponombre(varchar2)yrecta(deltiporectangulo)
ResultSetrset=stmt.executeQuery("selectnombre,rectafromrectangulos")
while(rset.next()){
//Obtengoelcamponombre
Stringnombre=rset.getString(1)
//Obtengoelobjetorectangulo
oracle.sql.STRUCTobjeto=(oracle.sql.STRUCT)rset.getObject(2)
//Sacosusatributos
Object[]atributos=objeto.getAttributes()
java.math.BigDecimalalto=(java.math.BigDecimal)atributos[0]
java.math.BigDecimalancho=(java.math.BigDecimal)atributos[1]
//Yparaaccederalafunctionmtododime_area()?
//Estonosehacerlo
//Imprimolafilacompleta
System.out.println("Nombre:"+nombre+".Dimensiones:"+alto+"x"+ancho)
}

//ParaINSERT,DELETEoUPDATE,seusaexecuteUpdate
//stmt.executeUpdate("INSERTINTOrectangulosVALUES('quinto',newrectangulo(5,555))")

//PuedohacerusodelosmtodosenlasentenciaSELECTqueatacaaOracle
rset=stmt.executeQuery("SELECTnombre,r.recta.dime_area()FROMrectangulosrWHEREr.recta.dime_area()>100")
System.out.println("Rectangulosconareamayorde100:")
while(rset.next()){
System.out.println(rset.getString(1)+">"+rset.getInt(2))
}
stmt.close()
}
}

http://www.vespino.com/~chema/daw1/tutoriales/oracle/objetos.htm

5/5

Вам также может понравиться