19482508 curso de oracle 10g administracion nivel intermedio

Upload: alex-torres-g

Post on 11-Oct-2015

22 views

Category:

Documents


2 download

TRANSCRIPT

  • Curso de administracin deOracle 10g (10.2)Nivel Intermedio

    Manual del alumno

    CopyrightCdricSimon,2008 Versin1.0 Reproduccinprohibida

    Solu

    cionJava.com

    Ing.CedricSim

    onTel:22680974C

    el:88882387Email:ce

    dric@

    solu

    cionja

    va.co

    mW

    eb:www.solucionjava.com

  • CursodeadministracindeOracle10g(10.2) Pagina2/40

    1 ndice1 ndice .................................................................................................................................................................................. 2

    1 Introduccin al curso ......................................................................................................................................................... 4

    1.1 Objetivo de este curso ................................................................................................................................................ 4

    1.2 Manual del alumno ..................................................................................................................................................... 4

    1.3 Requisitos para atender a este curso ........................................................................................................................ 4

    1.4 Soporte despus del curso .......................................................................................................................................... 4

    2 DML - Sentencias de manipulacin de datos ................................................................................................................... 5

    2.1 Objetivo del captulo .................................................................................................................................................. 5

    2.2 Insert ............................................................................................................................................................................ 5

    2.3 Update ......................................................................................................................................................................... 5

    2.4 Delete ........................................................................................................................................................................... 5

    2.5 Commit y rollback ...................................................................................................................................................... 5

    2.6 Select ............................................................................................................................................................................ 6

    2.7 Where .......................................................................................................................................................................... 6

    2.8 Count ........................................................................................................................................................................... 7

    2.9 Sum, avg, min, max .................................................................................................................................................... 7

    2.10 Distinct ....................................................................................................................................................................... 7

    2.11 Order by .................................................................................................................................................................... 7

    2.12 Uniones ..................................................................................................................................................................... 7

    2.13 Subconsultas ............................................................................................................................................................. 8

    2.14 Agrupaciones ............................................................................................................................................................ 8

    2.15 Operadores SQL ...................................................................................................................................................... 8

    2.16 La ausencia de valor: NULL ................................................................................................................................ 10

    2.17 Rendimiento ............................................................................................................................................................ 10

    3 Creacin de objetos .......................................................................................................................................................... 11

    3.1 Vistas ......................................................................................................................................................................... 11 3.1.1 Creacin .............................................................................................................................................................. 11 3.1.2 Modificacin ....................................................................................................................................................... 11 3.1.3 Eliminacin ......................................................................................................................................................... 11 3.1.4 Ejercicios ............................................................................................................................................................. 11

    3.2 Secuencias ................................................................................................................................................................. 11 3.2.1 Creacin .............................................................................................................................................................. 11 3.2.2 Modificacin ....................................................................................................................................................... 12 3.2.3 Eliminacin ......................................................................................................................................................... 12 3.2.4 Ejercicios ............................................................................................................................................................. 12

    3.3 Vistas materializadas ............................................................................................................................................... 12 3.3.1 Creacin .............................................................................................................................................................. 12 3.3.2 Modificacin ....................................................................................................................................................... 13 3.3.3 Eliminacin ......................................................................................................................................................... 13

    3.4 Sinnimos .................................................................................................................................................................. 13 3.4.1 Creacin .............................................................................................................................................................. 13

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina3/40

    3.4.2 Eliminacin ......................................................................................................................................................... 14 3.4.3 Ejercicios ............................................................................................................................................................. 14

    3.5 DB Link ..................................................................................................................................................................... 14 3.5.1 Creacin .............................................................................................................................................................. 14 3.5.2 Eliminacin ......................................................................................................................................................... 16

    4 PL/SQL bsico ................................................................................................................................................................. 17

    4.1 Introduccin .............................................................................................................................................................. 17

    4.2 Bloque annimo PL/SQL ......................................................................................................................................... 17

    4.3 Identificadores .......................................................................................................................................................... 17

    4.4 Variables ................................................................................................................................................................... 17 4.4.1 Tipos de variables ................................................................................................................................................ 17 4.4.2 Variables locales ................................................................................................................................................. 18 4.4.3 Variables globales ............................................................................................................................................... 18

    4.5 Control de flujo ......................................................................................................................................................... 18

    4.6 Bucles ......................................................................................................................................................................... 19 4.6.1 LOOP .................................................................................................................................................................. 19 4.6.2 WHILE ................................................................................................................................................................ 19 4.6.3 FOR ..................................................................................................................................................................... 19

    4.7 Cursores .................................................................................................................................................................... 20

    4.8 Excepciones ............................................................................................................................................................... 21 4.8.1 Excepciones predefinidas ................................................................................................................................... 22 4.8.2 Excepciones definidas por el usuario ................................................................................................................. 23 4.8.3 RAISE_APPLICATION_ERROR ...................................................................................................................... 25

    4.9 Procedimientos, funciones, paquetes, disparadores .............................................................................................. 25 4.9.1 Funciones ............................................................................................................................................................ 25 4.9.2 Procedimientos .................................................................................................................................................... 30 4.9.3 Paquetes ............................................................................................................................................................... 31 4.9.4 Disparadores ........................................................................................................................................................ 33 4.9.5 Ejercicios ............................................................................................................................................................. 36

    5 SQL Loader ...................................................................................................................................................................... 37

    6 Respaldo y reposicin de la base de datos ....................................................................................................................... 39

    6.1 Respaldos fsicos online ............................................................................................................................................ 39 6.1.1 Respaldos en caliente (online) ............................................................................................................................. 39

    6.2 Restauracin haca un cierto punto el en pasado .................................................................................................. 39

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina4/40

    1 Introduccinalcurso1.1 Objetivodeestecurso EstecursobrindaralalumnoelconocimientonecesarioparaadministrarunabasededatosOracle10g.

    1.2 Manualdelalumno Estemanualdelalumnoesunaayudaparaelalumno,paratengaunrecuerdodelcurso.Estemanualcontieneunresumendelasmateriasquesevanaestudiarduranteelcurso,peroelalumnodeberadetomarnotaspersonalesparacompletasestemanual.

    1.3 Requisitosparaatenderaestecurso SerequiereunconocimientodellenguajeSQL.

    1.4 Soportedespusdelcurso Sitienespreguntassobrelamateriadelcursoentusejerciciosprcticos,[email protected].

    Respaldosencaliente(online)ReposicindebasededatosconaplicacindelogsProgramacindetrabajosdemantenimiento

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina5/40

    2 DMLSentenciasdemanipulacindedatos

    2.1 Objetivodelcaptulo Alfindeestecaptuloelalumnosercapazdehacerencuestasdelabasededatos.Novamosavertodaslasopciones,nilasencuestasdeotrosobjetosdelabasededatos(vistas,funciones,secuencias,...)porqueesosaledelcuadrodeestecursodeiniciacin.

    Existenmuchasopciones(top,exists,cube,...)paracadatipodeaccin,peroestasopcionesdependendelabasededatosutilizadasy/odesuversin.Solovamosaverlassentenciasbsicas.

    Existenmuchosentornosquesimplificanlasencuestassobrelosdatos.

    2.2 Insert LasentenciaInsertpermitedeinsertardatosenunatabla.

    INSERT INTO (,,) VALUES (,,);

    Tambinexiste:INSERT INTO (,,) ;

    2.3 Update LasentenciaUpdatepermitedemodificarelvalordeunoovariosdatosenunatabla.

    UPDATE SET =,=,;

    Decostumbreselimitaelcambioaciertosregistros,mencionadosutilizandounaclusulaWHERE.

    UPDATE SET =,=,WHERE ;

    2.4 Delete LasentenciaDeletepermitedeborrarununoovariosregistrosenunatabla.

    DELETE FROM ;

    Decostumbreselimitaelborradoaciertosregistros,mencionadosutilizandounaclusulaWHERE.

    DELETE FROM WHERE ;

    2.5 Commityrollback Silabasededatospermitelagestindetransacciones,sepuedeutilizarCommitparaconfirmarunaInsert,Update,oDelete,o`Rollback`paracancelarlos.Ciertasbasededatospuedenserconfiuradas

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina6/40

    paraautocommit,quehaceuncommitautomaticamentedespuesdecadainstruccin,amenosquesehainiciadounatransaccindemaneraexplicita(con'begintransactionxxx;).

    HastaqueelCommitestejecutado,lasmodificacionesnoestninscritasdemanerapermanenteenlabasededatos,yslosonvisibleparalasesinencursodelusuarioautordelasacciones.DespusdelCommit,loscambiossondefinitivosyvisibleparatodos.

    Cuidadoqueciertosobjetospuedenquedarbloqueados(bloqueandootrosusuarios)hastaqueelcommitseahecho.

    Elcommit/rollbackpermiteconfirmarodehacerunlotedetransaccin,paraquesiunafalle,todaslasanterioresseanulantambin.Cuandosenecesitaunaintegridaddetransaccin,seutilizaencommit/rollback.

    Ejemplo:SELECT emp_no,job_grade FROM employee where emp_no=45;START TRANSACTION;update employee set job_grade=5 where emp_no=45;SELECT emp_no,job_grade FROM employee where emp_no=45;rollback;SELECT emp_no,job_grade FROM employee where emp_no=45;START TRANSACTION;update employee set job_grade=5 where emp_no=45;SELECT emp_no,job_grade FROM employee where emp_no=45;commit;SELECT emp_no,job_grade FROM employee where emp_no=45;

    2.6 Select ElSelectpermitedeseleccionardatosenlabasededatos,yvisualizarlos.

    Sepuedeutilizarunaliasparaqueelcamposepuedallamarconotronombre.

    SELECT ,, FROM ;SELECT as ,, FROM ;

    Paraseleccionartodosloscamposdelatabla,seutilizaelasteriscoenvezdelosnombresdecampo.

    SELECT * FROM ;

    Ejemplo:SELECT emp_no,job_grade as nivel FROM employee;SELECT * FROM employee;

    2.7 Where LaclusulaWherepermitedelimitarlaencuestaaciertosdatos.

    Seutilizaevaluandouncampoversusunacondicin.Sepuedenutilizarvariascondiciones,conelusodeOr,And,y/oparntesis.

    Paracomparanmeros,seutilizaelsigno'=',o'',o'=',o'between...and...'.Paracompararcaracteresseutilizalapalabra'like'.Elwildcardes'%'.Paracomparafecha,seutilizaelsigno'=',o'',o'=',o'between...and...'.Para

    SELECT * FROM WHERE AND ;

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina7/40

    Ejemplo:SELECT emp_no,job_grade FROM employee where emp_no>45;SELECT emp_no,job_grade FROM employee where emp_no=45 or emp_no=41;SELECT * FROM employee where emp_no between 40 and 45;SELECT * FROM employee where last_name like 'P%';

    2.8 Count Paracontarunnumeroderegistros,seutilizalapalabraCount.

    SELECT COUNT() FROM ;

    Ejemplo:SELECT count(*) FROM employee where job_grade=4;

    2.9 Sum,avg,min,max Paraunasuma,min,max,...deuncampo,seutilizanlapalabrasSum,Min,Max,Avg.

    SELECT SUM() FROM ;

    Ejemplo:SELECT avg(salary) FROM employee where job_grade=2;

    2.10Distinct Paratenerlalistadevaloresdistingasdeuncampo,seutilizalapalabraDistinct.

    SELECT DISTINCT() FROM ;

    Ejemplo:SELECT distinct(job_grade) FROM employee;

    2.11Orderby Paraordenarlosregistrosregresados,hayqueutilizarlapalabreOrderby.

    SELECT * FROM ORDER BY ,;

    Ejemplo:SELECT first_name,last_name FROM employee order by first_name,last_name;

    2.12Uniones Unionespermitendeunirlosresultadosdedosconsultas.Parapoderunirlas,tienenquetenerlosmismoscampos.

    SELECT ,, FROM UNIONSELECT ,, FROM ;

    Ejemplo:select t.first_name,t.last_name from employee t where job_grade=5unionselect t2.fname,t2.lname from usuario t2;

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina8/40

    2.13Subconsultas Subconsultassonconsultassobreotrasconsultas.LasubconsultasepuedeutilizarellacusulaFrom,oellacondicindelaclsulaWhere.Lasubconsultaseponeentreparntesis.EnMySQL,lassubconsultasdebentenersuspropiosalias.

    SELECT t3., t3. FROM (SELECT t., t. FROM t ) t3WHERE t3. IN (SELECT t2. FROM t2);

    Ejemplo: SELECT t3.first_name,t3.last_name FROM (select t.first_name,t.last_name from employee t where job_grade=5unionselect t2.fname,t2.lname from usuario t2) t3 where t3.last_name like '%o%';

    SELECT t3.first_name,t3.last_name FROM employee t3where t3.job_country IN (select t.country from country t where t.currency='Euro');

    2.14Agrupaciones Lasagrupacionespermitenagrupardatosysabercuantosdatoshaydecadavalor.SELECT ,, COUNT(*) FROM GROUP BY ,;

    LasagrupacionessepuedenfiltrarutilizandolaclausulaHAVING.

    Ejemplo:SELECT job_grade, count(*) FROM employeewhere emp_no>45group by job_grade;SELECT job_grade, sum(salary) FROM employeewhere emp_no>45group by job_gradehaving sum(salary)

  • CursodeadministracindeOracle10g(10.2) Pagina9/40

    OperadoreslgicosRetornanunvalorlgico(verdaderoofalso)

    Smbolo Significado Ejemplo= Igualdad 1=2!=^= Desigualdad 1!=2121^=2> Mayorque 1>2=2

  • CursodeadministracindeOracle10g(10.2) Pagina10/40

    2.16Laausenciadevalor:NULL Todovalor(seadeltipoquesea)puedecontenerelvalorNULLquenoesmsquelaausenciadevalor.

    Asquecualquiercolumna(NUMBER,VARCHAR2,DATE)puedecontenerelvalorNULL,conloque

    sedicequelacolumnaestaNULL.UnaoperacinretornaNULLsicualquieradelosoperandoses

    NULL.ParacomprobarsiunavaloresNULLseutilizaeloperadorISNULLoISNOTNULL.

    2.17Rendimiento Unproblemacomnenlasencuestaabasededatoseselrendimiento.

    Lascausasdeproblemaderendimientosonnumerosas.

    Lasmscomunesson: InstruccinsinoconmalaclausulaWHERE Faltadeindicesobreuncampoutilizadocomofiltro Maldiseodelabasededatos Problemadehardware(faltadememoria,discoocupado,cpuocupadoporotraaplicacin,...) Malaconfiguracindelservidor(malusodelamemoria,disco,cpu,...) Malaprogramacinenelcliente.Faltadecommit,conexinnocerrada,... Redsobrecargadaomuylenta

    Cuandoseenfrentaaunproblemaderendimientohayqueprobarprimerodeidentificarlacausaylossntomas.ServidorsobrecargadoenCPU,disco,memoria?Unclienteafectadootodos?Cuandoapareceelproblema?

    Paraayudarainvestigarestosproblemasexistenherramientas.Algunosvienenconlabasededatos,

    otrosestndesarrolladosaparte.Verladocumentacindesubasededatosparamasinformacin.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina11/40

    3 Creacindeobjetos3.1 Vistas Lavistaesunasentenciadeseleccindedatospreparada.Permitefacilitarlasconsultasfuturas,especialmentecuandosejuntanvariastablas.Permitetambinlimitarelaccesoadatos(seguridad).

    3.1.1 Creacin CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW [schema.]view [(alias,...) inline_constraint(s)] [out_of_line_constraint(s)] [XMLType_view_clause] AS subquery options

    options: WITH READ ONLY WITH CHECK OPTION [CONSTRAINT constraint]

    3.1.2 Modificacin ALTER VIEW [schema.]view COMPILE;ALTER VIEW [schema.]view ADD out_of_line_constraint;ALTER VIEW [schema.]view MODIFY CONSTRAINT constraint {RELY | NORELY};ALTER VIEW [schema.]view DROP CONSTRAINT constraint;ALTER VIEW [schema.]view DROP PRIMARY KEYALTER VIEW [schema.]view UNIQUE (column [,column,...])

    WhenaconstraintisinNOVALIDATEmode,Oracledoesnotenforceitanddoesnottakeitintoaccountforqueryrewrite.IfyouspecifyRELYOraclewillstillnotenforcetheconstraintbutwilltakeitintoaccountforqueryrewrite.

    AnalternativetoALTERVIEWCOMPILEisthebuiltinpl/sqlpackageDBMS_UTILITY

    3.1.3 Eliminacin DROP VIEW [schema.]view [CASCADE CONSTRAINTS]

    3.1.4 Ejercicios 1. Creaunavistasobre2tablasligadas.2. Usalavistaenunaconsulta.

    3.2 Secuencias Unasecuenciaesuncontadorqueseincrementaautomticamenteypermitegenerarnumeronicos.

    3.2.1 Creacin CREATE SEQUENCE [schema.]sequence_name option(s)

    Options: INCREMENT BY int START WITH int MAXVALUE int | NOMAXVALUE MINVALUE int | NOMINVALUE CYCLE | NOCYCLE

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina12/40

    CACHE int | NOCACHE ORDER | NOORDER

    3.2.2 Modificacin ALTER SEQUENCE [schema.]sequence_name option(s)

    Options: INCREMENT BY int MAXVALUE int | NOMAXVALUE MINVALUE int | NOMINVALUE CYCLE | NOCYCLE CACHE int | NOCACHE ORDER | NOORDER

    3.2.3 Eliminacin DROP SEQUENCE [schema.]sequence_name

    3.2.4 Ejercicios 1. Creaunasecuencia2. Alteralasecuenciaparaqueelprximonumerogeneradosea20

    3.3 Vistasmaterializadas Unavistamaterializadaesunconjuntodedatosdeunaovariastablas(comounavista)perodelcualeldatoseguardafsicamente.Aumentaelrendimientodelasconsultasencomparacindelavistanormal,perodisminuyeelrendimientodelasconsultasDMLsobrelastablasligadasalavistamaterializada,yaquetienequemantenerlavistamaterializadaademasdelatablafuente.

    3.3.1 Creacin CREATE MATERIALIZED VIEW [schema.]mview Mview_Options [USING INDEX storage_options] [{REFRESH [refresh_options] | NEVER REFRESH] [FOR UPDATE] [{ENABLE|DISABLE} QUERY REWRITE] AS subbquery;

    storage_options: PCTFREE int PCTUSED int INITRANS int MAXTRANS int STORAGE storage_clause TABLESPACE tablespace

    refresh_options: FAST | COMPLETE | FORCE ON [DEMAND | COMMIT] {NEXT | START WITH} date WITH {PRIMARY KEY | ROWID} USING DEFAULT {MASTER|LOCAL} ROLLBACK SEGMENT USING {MASTER|LOCAL} ROLLBACK SEGMENT rb_segment

    idx_organized_tbl_clause: storage_option(s) {MAPPING TABLE | NOMAPPING} [PCTTHRESHOLD int] [COMPRESS int|NOCOMPRESS] [ [INCLUDING column_name] OVERFLOW [storage_option(s)] ]

    external_table_clause: ([TYPE access_driver_type]

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina13/40

    DEFAULT DIRECTORY directory [ACCESS PARAMETERS {USING CLOB subquery | (opaque_format_spec) }] LOCATION (directory:'location_specifier' [,directory2:'location_specifier2'...) ) [REJECT LIMIT {int|UNLIMITED}]

    nested_storage_clause: NESTED TABLE {nested_item | COLUMN_VALUE} [ [ELEMENT] IS OF TYPE (ONLY type) ]] | [ [NOT] SUBSTITUTABLE AT ALL LEVELS ]] STORE AS storage_table [RETURN AS {LOCATOR|VALUE} ]

    3.3.2 Modificacin ALTER MATERIALIZED VIEW [schema.]mview options iot_options [USING INDEX index_options] [REFRESH [refresh_options]] [COMPILE | CONSIDER FRESH | {ENABLE|DISABLE} QUERY REWRITE]

    ALTER MATERIALIZED VIEW [schema.]mview options iot_options [USING INDEX index_options] [REBUILD] [COMPILE | CONSIDER FRESH | {ENABLE|DISABLE} QUERY REWRITE]

    ALTER MATERIALIZED VIEW [schema.]mview options iot_options [USING INDEX index_options] MODIFY SCOPE FOR (ref_column/attribute) IS [schema.]scope_table [COMPILE | CONSIDER FRESH | {ENABLE|DISABLE} QUERY REWRITE]

    Options: COMPRESS|NOCOMPRESS CACHE | NOCACHE PARALLEL int | NOPARALLEL ALLOCATE EXTENT [( [DATAFILE filename] [, SIZE int {K | M}] [, INSTANCE int] )] Partitioning clause Physical_options LOB Clause

    3.3.3 Eliminacin DROP MATERIALIZED VIEW [schema.] materialized_view

    SnapshotissynonymouswithMaterializedView.

    Paramsinformacinsobrelasvistasmaterializadas,verenhttp://www.softics.ru/docs/oracle10r2/server.101/b10759/statements_6002.htm

    3.4 Sinnimos Unsinnimoesunnombredeobjetoquerefiereaunobjetoconotronombre,oquesepuedaencontrarenotroesquema.

    Unsinnimopublicesdisponibleparatodoslosusuarios(segnsusprivilegios).

    3.4.1 Creacin CREATE [OR REPLACE] [PUBLIC] SYNONYM [schema.]synonym FOR [schema.]object [@dblink]

    'PUBLIC' will create a public synonym, accessible to all users (with the appropriate privileges.)

    Unlike Views, Synonyms do not need to be recompiled when the underlying table is redefined.

    There is a small performance hit when accessing data through a public synonym.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina14/40

    Oracle will resolve object names in the following order:

    current userprivate synonympublic synonym

    An alternative method to access data in another schema is to use:

    ALTER SESSION set current_schema = Other_Schema

    3.4.2 Eliminacin DROP [PUBLIC] SYNONYM [schema.]synonym [FORCE]

    FORCE will drop the synonym even there are dependent tables or user-defined types.

    3.4.3 Ejercicios 1. Creaunsinnimopublicoparaunobjeto.Luegoconectatecomootrousuarioyconsultaelobjeto

    viaelsinnimopblico.

    3.5 DBLink UnDBLinkpermitellamaraobjetosqueseencuentranenotrabasededatos(onlcuidoenunservidorremoto).

    Hayquetenercuidadosonelrendimientoligadoaconsultasremotas,yaquepuedeimpactardemanerasignificativaenservidorremoto.

    3.5.1 Creacin CREATE [ SHARED ] [ PUBLIC ] DATABASE LINK dblink [ CONNECT TO { CURRENT_USER | user IDENTIFIED BY password [ dblink_authentication ] } | dblink_authentication ] [ USING 'connect_string' ] ;

    dblink_authentication: AUTHENTICATED BY userIDENTIFIED BY password

    SpecifySHAREDtouseasinglenetworkconnectiontocreateapublicdatabaselinkthatcanbesharedamongmultipleusers.

    SpecifyPUBLICtocreateapublicdatabaselinkavailabletoallusers.Ifyouomitthisclause,thedatabaselinkisprivateandisavailableonlytoyou.

    Dblink:Specifythecompleteorpartialnameofthedatabaselink.Ifyouspecifyonlythedatabasename,thenOracleDatabaseimplicitlyappendsthedatabasedomainofthelocaldatabase.

    RestrictiononCreatingDatabaseLinks

    Youcannotcreateadatabaselinkinanotheruser'sschema,andyoucannotqualifydblinkwiththenameofaschema.Periodsarepermittedinnamesofdatabaselinks,soOracleDatabaseinterpretsthe

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina15/40

    entirename,suchasralph.linktosales,asthenameofadatabaselinkinyourschemaratherthanasadatabaselinknamedlinktosalesintheschemaralph.)

    TheCONNECTTOclauseletsyouenableaconnectiontotheremotedatabase.

    SpecifyCURRENT_USERtocreateacurrentuserdatabaselink.Thecurrentusermustbeaglobaluserwithavalidaccountontheremotedatabase.

    Ifthedatabaselinkisuseddirectly,thatis,notfromwithinastoredobject,thenthecurrentuseristhesameastheconnecteduser.

    Whenexecutingastoredobject(suchasaprocedure,view,ortrigger)thatinitiatesadatabaselink,CURRENT_USERistheusernamethatownsthestoredobject,andnottheusernamethatcalledtheobject.Forexample,ifthedatabaselinkappearsinsideprocedurescott.p(createdbyscott),anduserjanecallsprocedurescott.p,thecurrentuserisscott.

    However,ifthestoredobjectisaninvokerrightsfunction,procedure,orpackage,theinvoker'sauthorizationIDisusedtoconnectasaremoteuser.Forexample,iftheprivilegeddatabaselinkappearsinsideprocedurescott.p(aninvokerrightsprocedurecreatedbyscott),anduserJanecallsprocedurescott.p,thenCURRENT_USERisjaneandtheprocedureexecuteswithJane'sprivileges.

    userIDENTIFIEDBYpassword:Specifytheusernameandpasswordusedtoconnecttotheremotedatabaseusingafixeduserdatabaselink.Ifyouomitthisclause,thedatabaselinkusestheusernameandpasswordofeachuserwhoisconnectedtothedatabase.Thisiscalledaconnecteduserdatabaselink.

    dblink_authentication

    Specifytheusernameandpasswordonthetargetinstance.Thisclauseauthenticatestheusertotheremoteserverandisrequiredforsecurity.Thespecifiedusernameandpasswordmustbeavalidusernameandpasswordontheremoteinstance.Theusernameandpasswordareusedonlyforauthentication.Nootheroperationsareperformedonbehalfofthisuser.

    YoumustspecifythisclausewhenusingtheSHAREDclause.

    USING'connectstring':Specifytheservicenameofaremotedatabase.Ifyouspecifyonlythedatabasename,thenOracleDatabaseimplicitlyappendsthedatabasedomaintotheconnectstringtocreateacompleteservicename.Therefore,ifthedatabasedomainoftheremotedatabaseisdifferentfromthatofthecurrentdatabase,thenyoumustspecifythecompleteservicename.

    3.5.1.1 Examples Theexamplesthatfollowassumetwodatabases,onewiththedatabasenamelocalandtheotherwiththedatabasenameremote.TheexamplesusetheOracleDatabasedomain.Yourdatabasedomainwillbedifferent.

    DefiningaPublicDatabaseLink:ExampleThefollowingstatementdefinesasharedpublicdatabaselinknamedremotethatreferstothedatabasespecifiedbytheservicenameremote:CREATE PUBLIC DATABASE LINK remote USING 'remote';

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina16/40

    Thisdatabaselinkallowsuserhronthelocaldatabasetoupdateatableontheremotedatabase(assuminghrhasappropriateprivileges):

    UPDATE employees@remote SET salary=salary*1.1 WHERE last_name = 'Baer';

    DefiningaFixedUserDatabaseLink:ExampleInthefollowingstatement,userhrontheremotedatabasedefinesafixeduserdatabaselinknamedlocaltothehrschemaonthelocaldatabase:CREATE DATABASE LINK local CONNECT TO hr IDENTIFIED BY hr USING 'local';

    Oncethisdatabaselinkiscreated,hrcanquerytablesintheschemahronthelocaldatabaseinthismanner:SELECT * FROM employees@local;

    UserhrcanalsouseDMLstatementstomodifydataonthelocaldatabase:INSERT INTO employees@local (employee_id, last_name, email, hire_date, job_id) VALUES (999, 'Claus', '[email protected]', SYSDATE, 'SH_CLERK');

    UPDATE jobs@local SET min_salary = 3000 WHERE job_id = 'SH_CLERK';

    DELETE FROM employees@local WHERE employee_id = 999;

    Usingthisfixeddatabaselink,userhrontheremotedatabasecanalsoaccesstablesownedbyotherusersonthesamedatabase.ThisstatementassumesthatuserhrhasSELECTprivilegesontheoe.customerstable.Thestatementconnectstotheuserhronthelocaldatabaseandthenqueriestheoe.customerstable:

    SELECT * FROM oe.customers@local;

    DefiningaCURRENT_USERDatabaseLink:ExampleThefollowingstatementdefinesacurrentuserdatabaselinktotheremotedatabase,usingtheentireservicenameasthelinkname:CREATE DATABASE LINK remote.us.oracle.com CONNECT TO CURRENT_USER USING 'remote';

    TheuserwhoissuesthisstatementmustbeaglobaluserregisteredwiththeLDAPdirectoryservice.

    Youcancreateasynonymtohidethefactthataparticulartableisontheremotedatabase.Thefollowingstatementcausesallfuturereferencestoemp_tabletoaccesstheemployeestableownedbyhrontheremotedatabase:CREATE SYNONYM emp_table FOR [email protected];

    3.5.2 Eliminacin DROP [ PUBLIC ] DATABASE LINK dblink

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina17/40

    4 PL/SQLbsico4.1 Introduccin ElPL/SQLesunlenguajedeprogramacindeOracle,quepermitequeelcdigoseaejecutadoenelservidorOraclemismo.Paracdigosquenecesitanmuchasmanipulacionesdedatos,elPL/SQLesmuyeficienteyaqueseejecutalocalmente,conaccesodirectoalosdatos.

    ElPL/SQLnoesCASESENSITIVE,esdecir,nodiferenciamaysculasdeminsculascomootroslenguajesdeprogramacincomoCoJava.SinembargodebemosrecordarqueORACLEesCASESENSITIVEenlabsquedasdetexto(hastalaversin10.2R2quelopermitemediantenuevasvaloresparavariablesNLS_SORTyNLS_COMP).

    LasinstructionesPL/SQLterminanconunpuntocoma(;),exceptoalgunasinstruccionesconBEGIN,DECLARE,etc..

    Loscomentariosdeunalneaseinicianconylosdevariaslneasiniciancon/*yterminancon*/

    EstecaptuloestaengranpartebasadosobreelcursodePL/SQLdisponibleenhttp://www.devjoker.com/contenidos/TutorialPLSQL/66/SQLDinamico.aspx

    4.2 BloqueannimoPL/SQL UnbloquePL/SQLesunconjuntodeinstruccionesPL/SQLrelacionadasentreellas.

    UnsimplebloquePL/SQLiniciaconBEGINyterminaconEND;

    Ejemplo: SET SERVEROUTPUT ON;BEGINdbms_output.put_line('Hola');END;/

    4.3 Identificadores UnidentificadoreselnombredeunobjetoPL/SQL,comoporejemplounaconstante,variable,excepcin,paquete,funcin,procedimiento,tabla,cursor,...

    Unidentificadorpuedetenerhasta30caracteres,debeiniciarconunaletra.

    4.4 Variables LasvariablessedeclaranantesdelapalabraBEGIN,yseprecedendelapalabraDECLARE.

    Lasintaxises:nombre_de_variable[CONSTANT]tipo[NOTNULL][DEFAULTvalor_por_defecto];

    4.4.1 Tiposdevariables LostiposdevariablesquesepuedenusarenPL/SQLsonbsicamentelosmismosqueseusanparadefinircamposenunatabla,plusalgunosespecficosdelPL/SQL.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina18/40

    PLS_INTEGER:tiponumricodelPL/SQL,equivalenteaNUMBER,peromseficientesisenecesitahacerclculosaritmticos.

    %TYPE:refieredemaneradinmicaaotroobjeto.

    4.4.2 Variableslocales Pordefecto,unavariablesoloestdisponibleenelbloquePL/SQLdondeseencuentra,ylossubbloquesdentrodeestebloque.

    Ejemplo:DECLARE v_cnt_emp number;BEGIN select count(*) into v_cnt_emp from scott.emp where sal>1000; BEGIN dbms_output.put_line ('Empleados con salario>1000 : '||v_cnt_emp); END;END;/

    4.4.3 Variablesglobales Lasvariablesglobalessonvariablesquesepuedenllamardesdeotrocdigo.Soloestndisponiblesenpaquetes.

    4.5 Controldeflujo SeusaelIF..ELSIF..ELSEparacontrolarelflujoenPL/SQL.

    IF(expresion)THENInstrucciones

    ELSIF(expresion)THENInstrucciones

    ELSEInstrucciones

    ENDIF;

    Ejemplo:DECLARE v_cnt_emp number; v_tot_emp number;BEGIN select count(*) into v_tot_emp from scott.emp; dbms_output.put_line ('Hay un total de '||v_tot_emp||' empleados.'); select count(*) into v_cnt_emp from scott.emp where sal>1000; dbms_output.put_line ('Hay '||v_cnt_emp||' empleados que ganan mas de 1000 $.'); dbms_output.put_line ('Resultado de la analisis.'); IF (v_tot_emp=v_cnt_emp) then dbms_output.put_line ('Los empleados ganan todos mas de 1000 $'); ELSIF (v_tot_emp

  • CursodeadministracindeOracle10g(10.2) Pagina19/40

    END IF;END;/

    4.6 Bucles Unabuclepermiterepetirunaaccinunsinnmerodeveces.Hayquetenercuidadoennocrearbuclesinfinitas.

    EnPL/SQLtenemosanuestradisposicinlossiguientesiteradoresobucles:*LOOP*WHILE*FOR

    4.6.1 LOOP ElbucleLOOP,serepitetantasvecescomoseanecesariohastaquesefuerzasusalidaconlainstruccinEXIT.Susintaxiseslasiguiente

    LOOPInstruccionesIF(expresion)THEN

    InstruccionesEXIT;

    ENDIF; ENDLOOP;Ejemplo:DECLARE v_cnt PLS_INTEGER DEFAULT 0;BEGINLOOP v_cnt:=v_cnt+1; dbms_output.put_line ('Contador = '||v_cnt); IF (v_cnt>=10) then dbms_output.put_line ('Ya merito!'); exit; END IF; END LOOP;END;

    4.6.2 WHILE ElbucleWHILE,serepitemientrasquesecumplaexpresion.

    WHILE(expresion)LOOPInstruccionesENDLOOP;

    Ejemplo:DECLARE v_cnt PLS_INTEGER DEFAULT 0;BEGINv_cnt:=10; WHILE (v_cnt>0) LOOP dbms_output.put_line ('Contador = '||v_cnt); v_cnt:=v_cnt-1; END LOOP;END;

    4.6.3 FOR ElbucleFOR,serepitetantavecescomoleindiquemosenlosidentificadoresinicioyfinal.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina20/40

    FORcontadorIN[REVERSE]inicio..finalLOOPInstruccionesENDLOOP;

    EnelcasodeespecificarREVERSEelbucleserecorreensentidoinverso.

    Ejemplo:DECLARE v_cnt PLS_INTEGER DEFAULT 0;BEGIN FOR v_cnt IN REVERSE 1..10 LOOP dbms_output.put_line ('Contador = '||v_cnt); END LOOP;END;

    4.7 Cursores PL/SQLutilizacursoresparagestionarlasinstruccionesSELECT.UncursoresunconjuntoderegistrosdevueltoporunainstruccinSQL.TcnicamenteloscursoressonfragmentosdememoriaquereservadosparaprocesarlosresultadosdeunaconsultaSELECT.

    Podemosdistinguirdostiposdecursores:*Cursoresimplicitos.EstetipodecursoresseutilizaparaoperacionesSELECTINTO.Seusancuandolaconsultadevuelveunnicoregistro.*Cursoresexplicitos.Sonloscursoresquesondeclaradosycontroladosporelprogramador.Seutilizancuandolaconsultadevuelveunconjuntoderegistros.Ocasionalmentetambinseutilizanenconsultasquedevuelvenunnicoregistroporrazonesdeeficiencia.Sonmsrpidos.

    UncursorsedefinecomocualquierotravariabledePL/SQLydebenombrarsedeacuerdoalosmismosconveniosquecualquierotravariable.Loscursoresimplicitosnonecesitandeclaracin.

    ParaprocesarinstruccionesSELECTquedevuelvanmsdeunafila,sonnecesarioscursoresexplicitoscombinadosconunestructuradebloque.

    Uncursoradmiteelusodeparmetros.Losparmetrosdebendeclararsejuntoconelcursor.

    ElsiguientediagramarepresentacomoseprocesaunainstruccinSQLatravsdeuncursor.

    Ejemplodecursorexplicito:DECLARE CURSOR c_emp IS /*CURSOR*/select ename, sal from scott.emp; BEGINFOR fila IN c_emp LOOP /*no es necesario definir la variable fila, ser de tipo %ROW */ dbms_output.put_line(fila.ename||' tiene un salario de '||fila.sal);END LOOP;

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina21/40

    END;

    Ejemplodecursorimplicito:DECLARE v_sal NUMBER;BEGINSELECT sal INTO v_sal FROM scott.emp WHERE empno=7369; dbms_output.put_line('El empleado numero 7369 tiene un salario de '||v_sal||' $');end;

    4.8 Excepciones EnPL/SQLunaadvertenciaocondicindeerroresllamadaunaexcepcin.

    Losbloquesdeexcepcionespermitenatraparerroresdeejecucinydarleseventualmenteuntratamientoparaevitarquesepareelprogramademaneraanormal.

    Lasexcepcionessecontrolandentrodesupropiobloque.Laestructuradebloquedeunaexcepcinsemuestraacontinuacin.DECLAREDeclaracionesBEGINEjecucionEXCEPTIONExcepcionEND;

    Cuandoocurreunerror,seejecutalaporcindelprogramamarcadaporelbloqueEXCEPTION,transfirindoseelcontrolaesebloquedesentencias.

    ElsiguienteejemplomuestraunbloquedeexcepcionesquecapturalasexcepcionesNO_DATA_FOUNDyZERO_DIVIDE.CualquierotraexcepcionsercapturadaenelbloqueWHENOTHERSTHEN.DECLAREDeclaracionesBEGINEjecucionEXCEPTIONWHENNO_DATA_FOUNDTHENSeejecutacuandoocurreunaexcepciondetipoNO_DATA_FOUNDWHENZERO_DIVIDETHENSeejecutacuandoocurreunaexcepciondetipoZERO_DIVIDEWHENOTHERSTHENSeejecutacuandoocurreunaexcepciondeuntiponotratadoenlosbloquesanterioresEND;

    Comoyahemosdichocuandoocurreunerror,seejecutaelbloqueEXCEPTION,transfirindoseelcontrolalassentenciasdelbloque.UnavezfinalizadalaejecucindelbloquedeEXCEPTIONnosecontinuaejecutandoelbloqueanterior.

    Siexisteunbloquedeexcepcinapropiadoparaeltipodeexcepcinseejecutadichobloque.SinoexisteunbloquedecontroldeexcepcionesadecuadoaltipodeexcepcinseejecutarelbloquedeexcepcinWHENOTHERSTHEN(siexiste!).WHENOTHERSdebeserelltimomanejadordeexcepciones.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina22/40

    Lasexcepcionespuedenserdefinidasenformainternaoexplcitamenteporelusuario.Ejemplosdeexcepcionesdefinidasenformainternasonladivisinporceroylafaltadememoriaentiempodeejecucin.Estasmismascondicionesexcepcionalestienensuspropiotiposypuedenserreferenciadasporellos:ZERO_DIVIDEySTORAGE_ERROR.

    LasexcepcionesdefinidasporelusuariodebenseralcanzadasexplcitamenteutilizandolasentenciaRAISE.

    Conlasexcepcionessepuedenmanejarloserrorescmodamentesinnecesidaddemantenermltipleschequeosporcadasentenciaescrita.Tambinproveeclaridadenelcdigoyaquepermitemantenerlasrutinascorrespondientesaltratamientodeloserroresdeformaseparadadelalgicadelnegocio.

    4.8.1 Excepcionespredefinidas PL/SQLproporcionaungrannmerodeexcepcionespredefinidasquepermitencontrolarlascondicionesdeerrormshabituales.

    Lasexcepcionespredefinidasnonecesitanserdeclaradas.Simplementeseutilizancuandoestassonlanzadasporalgnerrordeterminado.4.8.1.1 Excepcionesasociadasaloscursoresimplcitos. Loscursoresimplicitosslopuedendevolverunafila,porloquepuedenproducirsedeterminadasexcepciones.Lasmscomunesquesepuedenencontrarsonno_data_foundytoo_many_rows.Lasiguientetablaexplicabrevementeestasexcepciones.

    NO_DATA_FOUND SeproducecuandounasentenciaSELECTintentarecuperardatosperoningunafilasatisfacesuscondiciones.Esdecir,cuando"nohaydatos"TOO_MANY_ROWS Dadoquecadacursorimplicitosloescapazderecuperarunafila,estaexcepciondetectalaexistenciademsdeunafila.

    Ejemplo:DECLARE v_sal NUMBER;BEGINBEGINSELECT sal INTO v_sal FROM scott.emp WHERE empno=1; dbms_output.put_line('El empleado numero 1 tiene un salario de '||v_sal||' $');EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('El empleado numero 1 no existe!');END;BEGINSELECT empno INTO v_sal FROM scott.emp WHERE sal>1000; dbms_output.put_line('El empleado que tiene un salario>1000 $ es el empleado numero'||v_sal);EXCEPTION WHEN too_many_rows THEN dbms_output.put_line('HAY MAS DE UN EMPLEADO QUE GANA MAS DE 1000 $!');END;END;

    4.8.1.2 Listadeexcepcionespredefinidas ACCESS_INTO_NULL Elprogramaintentasignarvaloresalosatributosdeunobjetonoinicializado 6530COLLECTION_IS_NULL Elprogramaintentasignarvaloresaunatablaanidadaannoinicializada 6531

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina23/40

    CURSOR_ALREADY_OPEN Elprogramaintentabriruncursorqueyaseencontrabaabierto.RecuerdequeuncursordecicloFORautomticamenteloabreyellonosedebeespecificarconlasentenciaOPEN 6511DUP_VAL_ON_INDEX Elprogramaintentalmacenarvaloresduplicadosenunacolumnaquesemantieneconrestriccindeintegridaddeunndicenico(uniqueindex) 1INVALID_CURSOR Elprogramaintentefectuarunaoperacinnovlidasobreuncursor 1001INVALID_NUMBER EnunasentenciaSQL,laconversindeunacadenadecaractereshaciaunnmerofallacuandoesacadenanorepresentaunnmerovlido 1722LOGIN_DENIED ElprogramaintentconectarseaOracleconunnombredeusuarioopasswordinvlido 1017NO_DATA_FOUND UnasentenciaSELECTINTOnodevolvivaloresoelprogramareferenciunelementonoinicializadoenunatablaindexada 100NOT_LOGGED_ON ElprogramaefectuunallamadaaOraclesinestarconectado 1012PROGRAM_ERROR PL/SQLtieneunproblemainterno 6501ROWTYPE_MISMATCH Loselementosdeunaasignacin(elvaloraasignarylavariablequelocontendr)tienentiposincompatibles.Tambinsepresentaesteerrorcuandounparmetropasadoaunsubprogramanoesdeltipoesperado 6504SELF_IS_NULL ElparmetroSELF(elprimeroqueespasadoaunmtodoMEMBER)esnulo

    30625STORAGE_ERROR Lamemoriaseterminoestcorrupta 6500SUBSCRIPT_BEYOND_COUNT Elprogramaesttratandodereferenciarunelementodeunarregloindexadoqueseencuentraenunaposicinmsgrandequeelnmerorealdeelementosdelacoleccin 6533SUBSCRIPT_OUTSIDE_LIMIT Elprogramaestreferenciandounelementodeunarregloutilizandounnmerofueradelrangopermitido(porejemplo,elelemento1) 6532SYS_INVALID_ROWID Laconversindeunacadenadecaractereshaciauntiporowidfallporquelacadenanorepresentaunnmero 1410TIMEOUT_ON_RESOURCE SeexcedieltiempomximodeesperaporunrecursoenOracle 51TOO_MANY_ROWS UnasentenciaSELECTINTOdevuelvemsdeunafila 1422VALUE_ERROR Ocurriunerroraritmtico,deconversinotruncamiento.Porejemplo,sucedecuandoseintentacalzarunvalormuygrandedentrodeunavariablemspequea 6502ZERO_DIVIDE Elprogramaintentefectuarunadivisinporcero 1476

    4.8.2 Excepcionesdefinidasporelusuario PL/SQLpermitealusuariodefinirsuspropiasexcepciones,lasquedebernserdeclaradasylanzadasexplcitamenteutilizandolasentenciaRAISE.

    LasexcepcionesdebenserdeclaradasenelsegmentoDECLAREdeunbloque,subprogramaopaquete.Sedeclaraunaexcepcincomocualquierotravariable,asignandoleeltipoEXCEPTION.Lasmismasreglasdealcanceaplicantantosobrevariablescomosobrelasexcepciones.DECLAREDeclaracionesMyExcepcionEXCEPTION;BEGINEjecucionEXCEPTIONExcepcionEND;

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina24/40

    4.8.2.1 ReglasdeAlcance Unaexcepcionesvlidadentrodesuambitodealcance,esdecirelbloqueoprogramadondehasidodeclarada.Lasexcepcionespredefinidassonsiemprevlidas.

    Comolasvariables,unaexcepcindeclaradaenunbloqueeslocalaesebloqueyglobalatodoslossubbloquesquecomprende.

    4.8.2.2 LasentenciaRAISE LasentenciaRAISEpermitelanzarunaexcepcinenformaexplcita.Esposibleutilizarestasentenciaencualquierlugarqueseencuentredentrodelalcancedelaexcepcin.DECLAREDeclaramosunaexcepcionidentificadaporVALOR_NEGATIVOVALOR_NEGATIVOEXCEPTION;valorNUMBER;BEGINEjecucionvalor:=1;IFvalor

  • CursodeadministracindeOracle10g(10.2) Pagina25/40

    err_num NUMBER; err_msg VARCHAR2(255); result NUMBER; BEGIN SELECT 1/0 INTO result FROM DUAL; EXCEPTION WHEN OTHERS THEN err_num := SQLCODE; err_msg := SQLERRM; DBMS_OUTPUT.put_line('Error:'||TO_CHAR(err_num)); DBMS_OUTPUT.put_line(err_msg); END;

    TambinesposibleentregarlealafuncinSQLERRMunnmeronegativoquerepresenteunerrordeOracleystadevolverelmensajeasociado. DECLARE msg VARCHAR2(255); BEGIN msg := SQLERRM(-1403); DBMS_OUTPUT.put_line(MSG); END;

    4.8.3 RAISE_APPLICATION_ERROR EnocasionesqueremosenviarunmensajedeerrorpersonalizadoalproducirseunaexcepcinPL/SQL.ParaelloesnecesarioutilizarlainstruccionRAISE_APPLICATION_ERROR;

    Lasintaxisgeneraleslasiguiente:

    RAISE_APPLICATION_ERROR(,);Siendo:*error_numesunenteronegativocomprendidoentre20001y20999*mensajeladescripciondelerror

    Ejemplo:DECLARE v_div NUMBER; BEGIN SELECT 1/0 INTO v_div FROM DUAL; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001,'No se puede dividir por cero'); END;

    4.9 Procedimientos,funciones,paquetes,disparadores SonobjetosPL/SQLresidentesenelservidorPL/SQL.

    4.9.1 Funciones Unafuncinesuncdigocompiladosenelservidor,queseejecutanenlocal,yquepuedenaceptarparmetrosdeentradaytieneunsoloparmetrodesalido.UnafuncinSIEMPREdeberegresarunvalor.

    UnafuncinsepuedeusarenotrocdigoPL/SQL,oenSQLyaseaenunSELECT,unaclausulaWHERE,CONNECTBY,STARTWITH,ORDERBY,GROUPBY,comoVALUESenunINSERT,ocomoSETenunUPDATE.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina26/40

    4.9.1.1 Funcionespredefinidas PL/SQLtieneungrannmerodefuncionesincorporadas,sumamentetiles.Acontinuacinvamosaveralgunasdelasmsutilizadas.

    SYSDATEDevuelvelafechadelsistema:

    SELECTSYSDATEFROMDUAL;NVLDevuelveelvalorrecibidocomoparmetroenelcasodequeexpresinseaNULL,oexpresinencasocontrario.

    NVL(,)

    Elsiguienteejemplodevuelve0sielprecioesnulo,yelpreciocuandoestinformado:SELECTCO_PRODUCTO,NVL(PRECIO,0)FROMPRECIOS;

    DECODEDecodeproporcionalafuncionalidaddeunasentenciadecontroldeflujoifelseifelse.

    DECODE(,,[,...,,],)

    Estafuncinevalaunaexpresin"",sisecumplelaprimeracondicin""devuelveelvalor1"",encasocontrarioevalalasiguientecondicinyashastaqueunadelascondicionessecumpla.Sinosecumpleningunacondicinsedevuelveelvalorpordefecto.

    EsmuycomnescribirlafuncinDECODEidentadacomosisetratasedeunbloqueIF.

    SELECTDECODE(co_pais,/*Expresionaevaluar*/'ESP','ESPAA',/*Sico_pais='ESP'==>'ESPAA'*/'MEX','MEXICO',/*Sico_pais='MEX'==>'MEXICO'*/'PAIS'||co_pais)/*ELSE==>concatena*/FROMPAISES;

    TO_DATEConvierteunaexpresinaltipofecha.Elparmetroopcionalformatoindicaelformatodeentradadelaexpresinnoeldesalida.

    TO_DATE(,[])

    Enesteejemploconvertimoslaexpresion'01/12/2006'detipoCHARaunafecha(tipoDATE).Conelparmetroformatoleindicamosquelafechaestescritacomodamesaoparaquedevuelveelunodediciembreynoeldocedeenero.

    SELECTTO_DATE('01/12/2006','DD/MM/YYYY')FROMDUAL;

    Esteotroejemplomuestralaconversinconformatodedayhora.

    SELECTTO_DATE('31/12/200623:59:59',

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina27/40

    'DD/MM/YYYYHH24:MI:SS')FROMDUAL;

    TO_CHARConvierteunaexpresinaltipoCHAR.Elparmetroopcionalformatoindicaelformatodesalidadelaexpresin.

    TO_CHAR(,[])

    SELECTTO_CHAR(SYSDATE,'DD/MM/YYYYY')FROMDUAL;

    TO_NUMBERConvierteunaexpresionalfanumricaennumerica.Opcionalmentepodemosespecificarelformatodesalida.

    TO_NUMBER(,[])

    SELECTTO_NUMBER('10')FROMDUAL;

    TRUNCTruncaunafechaonmero.

    Sielparmetrorecibidoesunafechaeliminalashoras,minutosysegundosdelamisma.SELECTTRUNC(SYSDATE)FROMDUAL;

    Sielparmetroesunnmerodevuelvelaparteentera.

    SELECTTRUNC(9.99)FROMDUAL;

    LENGTHDevuelvelalongituddeuntipoCHAR.

    SELECTLENGTH('HOLAMUNDO')FROMDUAL;

    INSTRBuscaunacadenadecaracteresdentrodeotra.Devuelvelaposiciondelaocurrenciadelacadenabuscada.

    Susintaxiseslasiguiente:INSTR(,,,)SELECTINSTR('AQUIESDONDESEBUSCA','BUSCA',1,1)FROMDUAL;

    REPLACEReemplazauntextoporotroenunexpresiondebusqueda.

    REPLACE(,,)

    Elsiguienteejemploreemplazalapalabra'HOLA'por'VAYA'enlacadena'HOLAMUNDO'.

    SELECTREPLACE('HOLAMUNDO','HOLA','VAYA')devuelveVAYAMUNDO

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina28/40

    FROMDUAL;

    SUBSTR

    Obtieneunapartedeunaexpresion,desdeunaposicindeiniciohastaunadeterminadalongitud.

    SUBSTR(,,)SELECTSUBSTR('HOLAMUNDO',6,5)DevuelveMUNDOFROMDUAL;

    UPPERConvierteunaexpresionalfanumericaamaysculas.

    SELECTUPPER('holamundo')DevuelveHOLAMUNDOFROMDUAL;

    LOWERConvierteunaexpresionalfanumericaaminsculas.

    SELECTLOWER('HOLAMUNDO')DevuelveholamundoFROMDUAL;

    ROWIDTOCHARConvierteunROWIDatipocaracter.

    SELECTROWIDTOCHAR(ROWID)FROMDUAL;

    RPADAadeNvecesunadeterminadacadenadecaracteresaladerechaunaexpresin.Muyutilparagenerarficherosdetextodeanchofijo.

    RPAD(,,)

    Elsiguienteejemploaadepuntosalaexpresion'Holamundo'hastaalcanzarunalongitudde50caracteres.

    SELECTRPAD('HolaMundo',50,'.')FROMDUAL;

    LPADAadeNvecesunadeterminadacadenadecaracteresalaizquierdadeunaexpresin.Muyutilparagenerarficherosdetextodeanchofijo.

    LPAD(,,)

    Elsiguienteejemploaadepuntosalaexpresion'Holamundo'hastaalcanzarunalongitudde50caracteres.

    SELECTLPAD('HolaMundo',50,'.')FROMDUAL;

    RTRIMEliminalosespaciosenblancoaladerechadeunaexpresion

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina29/40

    SELECTRTRIM('HolaMundo')FROMDUAL;

    LTRIMEliminalosespaciosenblancoalaizquierdadeunaexpresion

    SELECTLTRIM('HolaMundo')FROMDUAL;

    TRIMEliminalosespaciosenblancoalaizquierdayderechadeunaexpresion

    SELECTTRIM('HolaMundo')FROMDUAL;

    MODDevuelveelrestodeladivisinenteraentredosnmeros.

    MOD(,)SELECTMOD(20,15)Devuelveelmodulodedividir20/15FROMDUAL

    4.9.1.2 Funcionesdefinidasporelusuario Lasintaxisparaconstruirfuncioneseslasiguiente:CREATE[ORREPLACE]FUNCTION[(IN,IN,...)]RETURNISresult;BEGINreturn(result);[EXCEPTION]SentenciascontroldeexcepcionEND[];

    ElusodeORREPLACEpermitesobreescribirunafuncinexistente.Siseomite,ylafuncinexiste,seproducir,unerror.

    Lasintaxisdelosparmetroseslamismaqueenlosprocedimientosalmacenado,exceptuandoquesolopuedenserdeentrada.

    Ejemplo:create table emp as select * from scott.emp;

    CREATE OR REPLACE FUNCTION fn_Obtener_Salario(p_empno NUMBER) RETURN NUMBER IS result NUMBER; BEGIN SELECT sal INTO result FROM emp WHERE empno = p_empno; return(result); EXCEPTION WHEN NO_DATA_FOUND THEN return 0;

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina30/40

    END ;

    SielsistemanosindicaqueellafuncinsehacreadoconerroresdecompilacinpodemosverestoserroresdecompilacionconlaordenSHOWERRORSenSQL*Plus.

    LasfuncionespuedenutilizarseensentenciasSQLdemanipulacindedatos(SELECT,UPDATE,INSERTyDELETE):

    SELECT empno, ename, fn_Obtener_Salario( empno) FROM scott.emp;

    4.9.2 Procedimientos Losprocedimientossoncdigoscompiladosenelservidor,queseejecutanenelservidor,yquepuedenaceptarparmetrosdeentraday/odesalida.Unprocedimientosepuedeusarenunselect,peronoenunwhereclause.

    Unprocedimientotieneunnombre,unconjuntodeparmetros(opcional)yunbloquedecdigo.

    Lasintaxisdeunprocedimientoalmacenadoeslasiguiente:CREATE[ORREPLACE]PROCEDURE[([IN|OUT|INOUT],[IN|OUT|INOUT],...)]ISDeclaraciondevariableslocalesBEGINSentencias[EXCEPTION]SentenciascontroldeexcepcionEND[];

    ElusodeORREPLACEpermitesobreescribirunprocedimientoexistente.Siseomite,yelprocedimientoexiste,seproducir,unerror.

    Lasintaxisesmuyparecidaaladeunbloqueannimo,salvoporquesereemplazalaseccinDECLAREporlasecuenciaPROCEDURE...ISenlaespecificacindelprocedimiento.

    Debemosespecificareltipodedatosdecadaparmetro.Alespecificareltipodedatodelparmetronodebemosespecificarlalongituddeltipo.

    Losparmetrospuedenserdeentrada(IN),desalida(OUT)odeentradasalida(INOUT).ElvalorpordefectoesIN,ysetomaesevalorencasodequenoespecifiquemosnada.

    create or replacePROCEDURE Actualiza_Salario(p_empno NUMBER, p_new_salario NUMBER) IS -- Declaracion de variables locales BEGIN -- Sentencias UPDATE emp SET sal = p_new_salario, hiredate = SYSDATE WHERE empno = p_empno;

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina31/40

    END Actualiza_Salario;

    Tambinpodemosasignarunvalorpordefectoalosparmetros,utilizandolaclausulaDEFAULToeloperadordeasigancin(:=).create or replacePROCEDURE Actualiza_Salario(p_empno NUMBER, p_new_salario NUMBER DEFAULT 500) IS... END Actualiza_Salario;

    Unavezcreadoycompiladoelprocedimientoalmacenadopodemosejecutarlo.SielsistemanosindicaqueelprocedimientosehacreadoconerroresdecompilacinpodemosverestoserroresdecompilacinconlaordenSHOWERRORSenSQL*Plus.

    Existendosformasdepasarargumentosaunprocedimientoalmacenadoalahoradeejecutarlo(enrealidadesvlidoparacualquiersubprograma).Estasson:

    *Notacinposicional:Sepasanlosvaloresdelosparmetrosenelmismoordenenqueelprocedurelosdefine. BEGIN Actualiza_Salario(7369,2500); COMMIT; END;

    *Notacinnominal:Sepasanlosvaloresencualquierordennombrandoexplicitamenteelparmetro. BEGIN Actualiza_Salario(p_empno => 7369,p_new_salario => 2500); COMMIT; END;

    4.9.3 Paquetes Unpaqueteesunconjuntodefuncionesy/oprocedimiento.Permitefacilitarlaadministracindeloscdigos(agrupaciones),ylaseguridad(aniveldepaqueteenvezdeporfuncin/procedimiento).Enelpaquetesepuedendefinirvariabledealcancedetodoelpaquete(globalvariables).

    Loprimeroquedebemostenerencuentaesquelospaquetesestnformadospordospartes:laespecificacinyelcuerpo.Laespecificacindelunpaqueteysucuerposecreanporseparado.

    Laespecificacineslainterfazconlasaplicaciones.Enellaesposibledeclararlostipos,variables,constantes,excepciones,cursoresysubprogramasdisponiblesparasuusoposteriordesdefueradelpaquete.

    Enlaespecificacindelpaqueteslosedeclaranlosobjetos(procedures,funciones,variables...),noseimplementaelcdigo.LosobjetosdeclaradosenlaespecificacindelpaquetesonaccesiblesdesdefueradelpaqueteporotroscriptdePL/SQLoprograma.

    Paracrearlaespecificacindeunpaquetelasintaxisgeneraleslasiguiente:CREATE[ORREPLACE]PACKAGEISDeclaracionesdetiposyregistrospblicas{[TYPEIS;]}DeclaracionesdevariablesyconstantespublicasTambinpodemosdeclararcursores{[CONSTANT:=;]}

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina32/40

    {[;]}Declaracionesdeprocedimientosyfuncionespblicas{[FUNCTION(,...)RETURN;]}{[PROCEDURE(,...);]}END;

    Elcuerpoeslaimplementacindelpaquete.Elcuerpodelpaquetedebeimplementarloquesedeclarinicialmenteenlaespecificacin.Eseldondedebemosescribirelcdigodelossubprogramas.

    Enelcuerpodeunpackagepodemosdeclararnuevossubprogramasytipos,peroestossernprivadosparaelpropiopackage.

    Lasintaxisgeneralparacrearelcuerpodeunpaqueteesmuyparecidaaladelaespecificacin,tansoloseaadelapalabraclaveBODY,yseimplementaelcdigodelossubprogramas.

    CREATE[ORREPLACE]PACKAGEBODYISDeclaracionesdetiposyregistrosprivados{[TYPEIS;]}DeclaracionesdevariablesyconstantesprivadasTambinpodemosdeclararcursores{[CONSTANT:=;]}{[;]}

    ImplementaciondeprocedimientosyfuncionesFUNCTION(,...)RETURNISVariableslocalesdelafuncionBEGINImplementeaciondelafuncionreturn();[EXCEPTION]ControldeexcepcionesEND;PROCEDURE(,...)ISVariableslocalesdelafuncionBEGINImplementaciondeprocedimiento[EXCEPTION]ControldeexcepcionesEND;

    END;

    Esposiblemodificarelcuerpodeunpaquetesinnecesidaddealterarporellolaespecificacindelmismo.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina33/40

    Lospaquetespuedenllegaraserprogramasmuycomplejosysuelenalmacenargranpartedelalgicadenegocio.

    Ejemplo:

    4.9.4 Disparadores Losdisparadores(triggers).Undisparadoresuncodigoquedisparacadavezquesehamodificadoeldatodeunatabla.Puededispararaniveldelaconsulta,oaniveldecadalneaafectadaporlaconsulta.tambinpuededispararantesodespusdelaconsulta,ysoloporciertostiposdeconsulta(insert/update/delete),yeventualmentesolocuandocierto(s)campo(s)estanafectados(s).

    UntriggeresunbloquePL/SQLasociadoaunatabla,queseejecutacomoconsecuenciadeunadeterminadainstruccinSQL(unaoperacinDML:INSERT,UPDATEoDELETE)sobredichatabla.

    Lasintaxisparacrearuntriggereslasiguiente:

    CREATE[ORREPLACE]TRIGGER{BEFORE|AFTER}{DELETE|INSERT|UPDATE[OFcol1,col2,...,colN][OR{DELETE|INSERT|UPDATE[OFcol1,col2,...,colN]...]}ON[FOREACHROW[WHEN()]]DECLAREvariableslocalesBEGINSentencias[EXCEPTION]SentenciascontroldeexcepcionEND;

    ElusodeORREPLACEpermitesobreescribiruntriggerexistente.Siseomite,yeltriggerexiste,seproducir,unerror.

    LostriggerspuedendefinirseparalasoperacionesINSERT,UPDATEoDELETE,ypuedenejecutarseantesodespusdelaoperacin.ElmodificadorBEFOREAFTERindicaqueeltriggerseejecutarantesodespuesdeejecutarselasentenciaSQLdefinidaporDELETEINSERTUPDATE.SiincluimoselmodificadorOFeltriggersoloseejecutarcuandolasentenciaSQLafectealoscamposincluidosenlalista.

    Elalcancedelosdisparadorespuedeserlafilaodeorden.ElmodificadorFOREACHROWindicaqueeltriggersedispararcadavezqueserealizanoperacionessobreunafiladelatabla.SiseacompaadelmodificadorWHEN,seestableceunarestriccin;eltriggersoloactuar,sobrelasfilasquesatisfaganlarestriccin.

    Lasiguientetablaresumeloscontenidosanteriores.

    INSERT,DELETE,UPDATEDefinequtipodeordenDMLprovocalaactivacindeldisparador.BEFORE,AFTER Definesieldisparadorseactivaantesodespusdequeseejecutelaorden.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina34/40

    FOREACHROW Losdisparadoresconniveldefilaseactivanunavezporcadafilaafectadaporlaordenqueprovoceldisparo.Losdisparadoresconniveldeordenseactivanslounavez,antesodespusdelaorden.LosdisparadoresconniveldefilaseidentificanporlaclusulaFOREACHROWenladefinicindeldisparador.

    LaclusulaWHENsloesvlidaparalosdisparadoresconniveldefila.

    DentrodelambitodeuntriggerdisponemosdelasvariablesOLDyNEW.EstasvariablesseutilizandelmismomodoquecualquierotravariablePL/SQL,conlasalvedaddequenoesnecesariodeclararlas,sondetipo%ROWTYPEycontienenunacopiadelregistroantes(OLD)ydespues(NEW)delaaccinSQL(INSERT,UPDATE,DELTE)quehaejecutadoeltrigger.Utilizandoestavariablepodemosaccederalosdatosqueseestninsertando,actualizandooborrando.

    ElsiguienteejemplomuestrauntriggerqueinsertaunregistroenlatablaEMP_AUDITcadavezquemodificamoselsalariodeunregistroenlatablaemp:

    Create table emp_audit (empno number not null, fecha date not null, msg varchar2(500) not null);

    create or replace TRIGGER TR_EMP_AU AFTER UPDATE ON EMP FOR EACH ROW WHEN (OLD.salNEW.sal) DECLARE -- local variables BEGIN INSERT INTO emp_audit (empno,fecha,msg) VALUES (:NEW.empno,SYSDATE,'Salario modificado de '||:old.sal||' a '||:new.sal); END ;

    EltriggerseejecutarcuandosobrelatablaEMPseejecuteunasentenciaUPDATEquemodificaelsalario.Ejemplo:BEGIN Actualiza_Salario(p_empno => 7369,p_new_salario => 2500); COMMIT; END; 4.9.4.1 Ordendeejecucindelostriggers Unamismatablapuedetenervariostriggers.Entalcasoesnecesarioconocerelordenenelquesevanaejecutar.

    LosdisparadoresseactivanalejecutarselasentenciaSQL.*Siexiste,seejecutaeldisparadordetipoBEFORE(disparadorprevio)conniveldeorden.*Paracadafilaalaqueafectelaorden:oSeejecutasiexiste,eldisparadordetipoBEFOREconniveldefila.oSeejecutalapropiaorden.oSeejecutasiexiste,eldisparadordetipoAFTER(disparadorposterior)conniveldefila.*Seejecuta,siexiste,eldisparadordetipoAFTERconniveldeorden.

    4.9.4.2 Restriccionesdelostriggers ElcuerpodeuntriggeresunbloquePL/SQL.CualquierordenquesealegalenunbloquePL/SQL,eslegalenelcuerpodeundisparador,conlassiguientesrestricciones:

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina35/40

    *Undisparadornopuedeemitirningunaordendecontroldetransacciones:COMMIT,ROLLBACKoSAVEPOINT.Eldisparadorseactivacomopartedelaejecucindelaordenqueprovoceldisparo,yformapartedelamismatransaccinquedichaorden.Cuandolaordenqueprovocaeldisparoesconfirmadaocancelada,seconfirmaocancelatambineltrabajorealizadoporeldisparador.*Porrazonesidnticas,ningnprocedimientoofuncinllamadoporeldisparadorpuedeemitirrdenesdecontroldetransacciones.*ElcuerpodeldisparadornopuedecontenerningunadeclaracindevariablesLONGoLONGRAW

    4.9.4.3 Utilizacinde:OLDy:NEW DentrodelambitodeuntriggerdisponemosdelasvariablesOLDyNEW.EstasvariablesseutilizandelmismomodoquecualquierotravariablePL/SQL,conlasalvedaddequenoesnecesariodeclararlas,sondetipo%ROWTYPEycontienenunacopiadelregistroantes(OLD)ydespues(NEW)delaaccinSQL(INSERT,UPDATE,DELTE)quehaejecutadoeltrigger.Utilizandoestavariablepodemosaccederalosdatosqueseestninsertando,actualizandooborrando.

    LasiguientetablamuestralosvaloresdeOLDyNEW.

    ACCIONSQLOLDNEW

    INSERT Nodefinido;todosloscampostomanvalorNULL.

    Valoresqueserninsertadoscuandosecompletelaorden.UPDATE Valoresoriginalesdelafila,antesdelaactualizacin.

    Nuevosvaloresquesernescritoscuandosecompletelaorden.DELETE Valores,antesdelborradodelafila.

    Nodefinidos;todosloscampostomanelvalorNULL.

    LosregistrosOLDyNEWsonslovlidosdentrodelosdisparadoresconniveldefila.

    PodemosusarOLDyNEWcomocualquierotravariablePL/SQL.

    Utilizacindepredicadosdelostriggers:INSERTING,UPDATINGyDELETING

    DentrodeundisparadorenelquesedisparandistintostiposderdenesDML(INSERT,UPDATEyDELETE),haytresfuncionesbooleanasquepuedenemplearseparadeterminardequoperacinsetrata.EstospredicadossonINSERTING,UPDATINGyDELETING.

    Sucomportamientoeselsiguiente:INSERTING TRUEsilaordendedisparoesINSERT;FALSEenotrocaso.UPDATING TRUEsilaordendedisparoesUPDATE;FALSEenotrocaso.DELETING TRUEsilaordendedisparoesDELETE;FALSEenotrocaso.

    Sintaxiscompleta: CREATE [OR REPLACE] TRIGGER [schema.]trigger BEFORE event [WHEN (condition)] {pl_sql_block | call_procedure_statement}

    CREATE [OR REPLACE] TRIGGER [schema.]trigger AFTER event

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina36/40

    [WHEN (condition)] {pl_sql_block | call_procedure_statement}

    CREATE [OR REPLACE] TRIGGER [schema.]trigger INSTEAD OF event [WHEN (condition)] {pl_sql_block | call_procedure_statement}

    event can be one or more of the following (separate multiple events with OR)

    DELETE event_ref referencing_clause INSERT event_ref referencing_clause UPDATE event_ref referencing_clause UPDATE OF column, column... event_ref db/ddl_event ON [schema.object] db/ddl_event ON DATABASE

    event_ref: ON [schema.]table ON [schema.]view ON [NESTED TABLE nested_table_column OF] [schema.]view

    referencing_clause: FOR EACH ROW REFERENCING OLD [AS] old [FOR EACH ROW] REFERENCING NEW [AS] new [FOR EACH ROW] REFERENCING PARENT [AS] parent [FOR EACH ROW]

    db/ddl_event: ALTER ANALYSE ASSOCIATE STATISTICS AUDIT COMMENT CREATE DDL DISASSOCIATE STATISTICS DROP GRANT LOGON LOGOFF NOAUDIT RENAME REVOKE TRUNCATE SERVERERROR STARTUP SHUTDOWN SUSPEND

    Multiple db/ddl_events can be separated with OR

    Multiple OLD, NEW and PARENT correlation names can be defined in one REFERENCING clause.

    Database constraints are a factor of 8x faster than triggers.

    4.9.5 Ejercicios 1. Crearunafuncinqueagrega10alvalorpasadoenparametroyregresaelresultado2. Crearunprocedimientoqueinsertaunnuevoempleado3. Crearunpaqueteconprocedimientoparamodificarunempleado,yunafuncinparaobtenerla

    fechadenacimientodelempleado4. Usarlosprocedimientos/funcionesenselect5. Crearuntriggerquegeneralaclaveprimariadelempleadobasadoenunasecuencia

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina37/40

    5 SQLLoaderSQLLoaderesunaherramientadeOraclequepermitecargardemaneramuyeficiente(rpida)datosdesdeunarchivoexterneo(textoobinario)haciaunatabladeOracle.

    Selanzadesdelalneadecomando,loquepermiteusarloenscript.

    Senecesita,ademsdelarchivoacargar,unclienteOracleinstalado(depreferencialamismaversindeclientequeelservidor),yunarchivodeparmetros(ficherodecontrol).

    AlSQLLoader(sqlldr)selepasancomoparmetros(losmsimportantes)elficheroquecontienelosdatosquesevanacargarylarutadelficherodecontrolquecontienelasaccionesarealizar.Elformatodelosdatos,dondesecargaranycualquierotrotipodecontrol.

    SYNTAXISsqlldr userid=USUARIO/CONTRASEA@BASE control=/RUTA/DEL/FICHERO/DE/CONTROL data=/RUTA/DEL/FICHERO/QUE/CONTIENE/LOS/DATOS log=/LO/MISMO bad=/A/DONDE/VAN/LOS/DATOS/MALOS discard=/A/DONDE/VAN/LOS/DATOS/DESCARTADOS

    EJEMPLO:sqlldr userid=alumno/123@curso control=/tmp/test.ctl data=/tmp/test.txt

    Comopuedesvernoesmuycomplicado.Simplementeteconectasconunusuariodelabasededatosyledicescualeselficherodetextoquecontienelainformacinycualeselquecontienelasespecificacionessobreloquesevaahacerconesainformacin

    Paramsinformacin,veren:http://downloaduk.oracle.com/docs/cd/B19306_01/server.102/b14215/part_ldr.htm

    ParmetrosComunesuserid=USUARIO/CONTRASEA@BASEUsuario,contraseaeinstanciaalaqueteconectas.control=Rutadelarchivodecontrolquecontienelasdirectivasdeloquesevaahacer.data=Rutadelarchivoquecontienelosdatos.log=Rutadelarchivodondequieresquesegenereellog.discard=Rutadelarchivodondequieresqueteenvelosregistrosdescartadosynocargados.bad=Rutadelficherodondevanapararlosregistrosmalos.

    ArchivodeControlElarchivodecontrol(Controlfileenbrbaro)esdondeseespecificacmosevanacargarlosdatos.Normalmentesueleresponderalsiguienteesquema:LOADDATABADFILE'/a/donde/van/los/datos/malos'DISCARDFILE'/a/donde/van/los/datos/descartados'INFILE'/la/ruta/del/archivo/desde/el/que/se/cargan/los/datos'APPENDINTOTABLETU_TABLA_DE_DESTINOFIELDSTERMINATEDBY"|"OPTIONALLYENCLOSEDBY'"'TRAILINGNULLCOLS(CAMPO0POSITION(1:15),CAMPO1CHAR"ltrim(rtrim(:CAMPO1))",CAMPO2CHAR"ltrim(rtrim(:CAMPO2))",

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina38/40

    CAMPO3NUMERICOINTEGEREXTERNAL,CAMPO4FECHADATE"DDMonthYY")

    Comoves,siloscampostienenunalongitudfijapuedesespecificarlelasposiciones,desdeelcarcter1ala15ysucesivamente.Osino,puedesdejarqueOracleinterpreteloscamposylosinserte.EnestecasoestintroduciondodatosAPPENDalfinaldelatabla.(PodraserREPLACEparaquereemplazaradatospreexistentes).Comopuedesimaginarpordefectocadalineaesunafila.Yenesteejemplocadacampoestdelimitadoporelcarcter|.TRAILINGNULLCOLSsirveparaqueinterpretequeloscampossincontenidoseaninterpretadoscomoNULOS.

    SqlLoaderyproblemasconfechasSiestascargandodatosconfechasesposiblequetecauseproblemasalintentarinsertarcolumnasconfechasycamposnulos.Unamaneradeevitarloesborrarloscaracteresenblancodelcampodefecha.

    Ejemplo:campo_de_fecha "to_date (ltrim(rtrim(:campo_de_fecha)), 'yyyy-mm-dd hh24:mi')"

    Ejemplocompleto:1)Crearlatabla:create table cim (CX char(2) not null, LANG char(2) not null, CODE varchar2(10) not null, descripcion varchar2(1000) not null);2)Copiarelarchivodedatoscim10.txten/tmp3)Crearelarchivodecontroltest.ctlen/tmp:LOAD DATAINTO TABLE cimTRUNCATEFIELDS TERMINATED BY X'09'TRAILING NULLCOLS(CX,LANG,CODE,DESCRIPCION)4)Cargarlosdatos:sqlldr userid=alumno/123@core2d control=/tmp/test.ctl data=/tmp/cim-10.txt log=/home/oracle/test.log5)Validarquelosdatoshansidocargados

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina39/40

    6 Respaldoyreposicindelabasededatos

    6.1 Respaldosfsicosonline Estetipoderespaldoeslamejoreleccinparaunplanderecuperacindespusdeundesastre.

    Losrespaldos'online'permitenhacerrespaldosmientraselsistemaestenuso.Sepuedenhacerrespaldosdiferenciales,oacumulativos.

    SoloestndisponiblesilabasededatoscorreenmodoARCHIVELOG.Estetipoderespaldo/restauracinservistoenuncursoavanzadoynohacepartedeestecursobsico.

    Losrespaldosencalientedebensiempretenercomobaseunrespaldoenfro.Sinrespaldocorrectoycompletoenfro,nosepodrhacerunareposicinusandolosrespaldoshechosencaliente.

    6.1.1 Respaldosencaliente(online) Parahacerunrespaldoencaliente,cadatablespacedebesercambiadoamododebackupantesdeiniciarelrespaldo.

    Ejemplo:ALTER TABLESPACE xyz BEGIN BACKUP;cp xyfFile1 /backupDir/ALTER TABLESPACE xyz END BACKUP;

    Desde10gestambinposibleponertodoslostablespaceenmododebackupconunsolocomando:ALTER DATABASE BEGIN BACKUP;

    Noolvidendeguardartambinunacopiadetodoslosrchivelogs'ydeloscontrolfiles.ALTER SYSTEM SWITCH LOGFILE; -- Force log switch to update control file headers ALTER DATABASE BACKUP CONTROLFILE TO '/backupDir/control.dbf';cp /camino_hacia_los_logs/*.arc /camino_de_backup/

    Sisubasededatosterminoanormalmente(crash)mientrasunoovariostablespacesestabanenmododebackup,hayquemencionaraOracledetermniarelmododebackupcuandolabasededatosesmontada(noabierta).ALTER DATABASE END BACKUP;

    6.2 Restauracinhacaunciertopuntoelenpasado Lasrestauracionesmsfcilsonlasrestauracionesapartirdeunrespaldolgico,odeunrespaldo'offline'.

    Encasodereposicindesdeunrespaldoencaliente,sernecesarioaplicarlosarchivelogs,pararecuperartodaslastransaccionesejecutadas(yconfirmadasconuncommit).

    LastablasdeFLASHBACKpermitenrecuperarfcilmentetablasbotadasoregistrosborradossinnecesidaddehaceunarestauracincompletadelabasededatos.

    Desde10gesmuyfcilcrearrespaldosyrestaurardatosusandoenEnterpriseManager.

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

  • CursodeadministracindeOracle10g(10.2) Pagina40/40

    Verdetallesen:http://examples.oreilly.com/unixbr/oracle.html

    CopyrightCdricSimon,2008 Versin1.1 Reproduccinprohibida

    1 ndice1 Introduccin al curso1.1 Objetivo de este curso1.2 Manual del alumno1.3 Requisitos para atender a este curso1.4 Soporte despus del curso

    2 DML - Sentencias de manipulacin de datos2.1 Objetivo del captulo2.2 Insert2.3 Update2.4 Delete2.5 Commit y rollback2.6 Select2.7 Where2.8 Count2.9 Sum, avg, min, max2.10 Distinct2.11 Order by2.12 Uniones 2.13 Subconsultas2.14 Agrupaciones2.15 Operadores SQL 2.16 La ausencia de valor: NULL 2.17 Rendimiento

    3 Creacin de objetos3.1 Vistas3.1.1 Creacin3.1.2 Modificacin3.1.3 Eliminacin3.1.4 Ejercicios

    3.2 Secuencias3.2.1 Creacin3.2.2 Modificacin3.2.3 Eliminacin3.2.4 Ejercicios

    3.3 Vistas materializadas3.3.1 Creacin3.3.2 Modificacin3.3.3 Eliminacin

    3.4 Sinnimos3.4.1 Creacin3.4.2 Eliminacin3.4.3 Ejercicios

    3.5 DB Link3.5.1 Creacin3.5.1.1 Examples

    3.5.2 Eliminacin

    4 PL/SQL bsico4.1 Introduccin4.2 Bloque annimo PL/SQL4.3 Identificadores4.4 Variables4.4.1 Tipos de variables4.4.2 Variables locales4.4.3 Variables globales

    4.5 Control de flujo4.6 Bucles4.6.1 LOOP4.6.2 WHILE4.6.3 FOR

    4.7 Cursores4.8 Excepciones4.8.1 Excepciones predefinidas 4.8.1.1 Excepciones asociadas a los cursores implcitos.4.8.1.2 Lista de excepciones predefinidas

    4.8.2 Excepciones definidas por el usuario 4.8.2.1 Reglas de Alcance4.8.2.2 La sentencia RAISE4.8.2.3 Uso de SQLCODE y SQLERRM

    4.8.3 RAISE_APPLICATION_ERROR

    4.9 Procedimientos, funciones, paquetes, disparadores4.9.1 Funciones4.9.1.1 Funciones predefinidas4.9.1.2 Funciones definidas por el usuario

    4.9.2 Procedimientos4.9.3 Paquetes4.9.4 Disparadores4.9.4.1 Orden de ejecucin de los triggers4.9.4.2 Restricciones de los triggers4.9.4.3 Utilizacin de :OLD y :NEW

    4.9.5 Ejercicios

    5 SQL Loader6 Respaldo y reposicin de la base de datos6.1 Respaldos fsicos online6.1.1 Respaldos en caliente (online)

    6.2 Restauracin haca un cierto punto el en pasado