Title | Cursores en PL SQL - Programación PL SQL |
---|---|
Author | Seshat Arb |
Course | Laboratorio Diseño de Sistemas Lógicos |
Institution | Universidad Nacional Experimental Politécnica Antonio José de Sucre |
Pages | 18 |
File Size | 749.6 KB |
File Type | |
Total Downloads | 92 |
Total Views | 181 |
El grupo de paquetes DBMS se trata de un conjunto de funciones y procedimientos que el PL/SQL de Oracle incorpora de forma estándar. Estos paquetes DBMS pueden ser de mucha utilidad cuando estamos programando en PLSQL. Hoy voy a hablar sobre el paquete DBMS_SQL que permite utilizar SQL dinámico en p...
22/10/2016
CursoresenPL/SQLProgramaciónPL/SQL
Programación PL/SQL El lenguaje de programación de bases de datos Oracle PL/SQL. Librerías y funciones estándar SQL y PLSQL.
AnunciosentutorialdeprogramaciónPLSQL
SigueaprogramaciónPLSQL
martes,5dediciembrede2006
Búsquedasrecomendadasen programaciónPL/SQL
CursoresenPL/SQL Megusta
3
Twittear
Anuncios Google
1
Loscursoresseutilizanen PL/SQLpara manejarlassentencias SELECT.Un cursor estaformadoporunconjuntoderegistros devueltosporunainstrucción SQLdeltipo SELECT.Desdeunpuntodevistointernoala basededatosOracle,loscursoresson segmentosdememoriautilizadospararealizar operacionesconlosregistrosdevueltostras ejecutarunasentencia SELECT.
Cursores
Anuncios Google
OrderPLSQL
OraclePlsql ForOracle
DeustoformaciónCursodecreaciónde páginasweb
Sepuedendistinguirdostiposdecursores: Cursoresimplícitos:Seutilizancuandolasentencia SELECTdevuelveunsolo registroysuformatoescomosigue: DECLARE lsalarioempleados.salario%TYPE; ldniempleados.dni%TYPE; BEGIN SELECTsalario,dni INTOlsalario,ldni FROMempleados WHEREnombre='Juan' ANDapellidos='RodrigoComas'; /*Restodesentenciasdelbloque*/ END; Nota:MuchagenteconsideraquelassentenciasUPDATE,dentrodeunbloque PLSQL,sontambiéncursoresimplícitos,noobstante,yoprefieronoincluirlasdentro deesteconcepto.
BuscarenprogramaciónPLSQL
Buscar
PromocionesenprogramaciónPL/SQL
Cursoresexplícitos:SeutilizancuandolasentenciaSELECTpuededevolvervarios registros.Tambiénsepuedenutilizarenconsultasquedevuelvanunsoloregistropor razonesdeeficienciaconrespectoaloscursoresimplícitos,eficienciaquemejorará especialmentesielcursorexplícitosetienequeejecutarvariasvecesdentrodel bloquedecódigoPL/SQL. Uncursorexplícitotienequeserdefinidopreviamentecomocualquierotravariable PLSQLydebeserleasignadounnombre.VeamosunejemploquemuestraelDNIyel salariodelostrabajadoresincluidosenlatablaempleados: DECLARE
http://www.plsql.biz/2006/12/cursoresenplsql.html#more
1/18
22/10/2016
CursoresenPL/SQLProgramaciónPL/SQL
CURSORcempIS SELECTsalario,dni FROMempleados; cepm_reccemp%ROWTYPE; BEGIN FORcemp_recINcemp LOOP DBMS_OUTPUT.PUT_LINE (cemp_rec.dni||''||cemp_rec.salario); ENDLOOP; END; Loscursoresexplícitosadmitenelusodeparámetros.Losparámetrosdeben declararsejuntoconelcursor.Porejemplo: DECLARE CURSORcemp(pnombreINVARCHAR2)IS SELECTsalario,dni FROMempleados WHEREnombre=pnombre; cepm_reccemp%ROWTYPE; vnombreVARCHAR2(20); BEGIN vnombre:='Juan'; DBMS_OUTPUT.PUT_LINE ('Sueldodelosempleadosconnombre'||vnombre); FORcemp_recINcemp(vnombre) LOOP DBMS_OUTPUT.PUT_LINE (cemp_rec.dni||''||cemp_rec.salario); ENDLOOP; END; EnlosejemplosanterioresloscursoressehancontroladoconlasentenciaFORpero tambiénpuedencontrolarsemedianteelusodelassentenciasOPEN, FETCHy CLOSE.LasentenciaOPENidentificaelcursorquesetienequeutilizar.Lasentencia FETCHpone,registroaregistro,losvaloresdevueltosporelcursorenlasvariables correspondientes,variablesquepuedenestarconstituidasporunalistadevariableso unregistroPLSQL(esteeselcasodelosejemplosqueincluyoenesteartículo).Por último,lasentenciaCLOSEcierraelcursoryliberalamemoriareservada.Veamos comoquedaríanuestroejemploutilizandoestetipodesentenciasenlugardeutilizarla sentenciaFOR:
Desarrolladopor: (//www.beon4u.com/) PROGRAMACIÓN PLSQL (HTTP://WWW.BEON
Tecnología, innovación y negocios serán los protagonistas del Oracle Digital Day ¿Estás preparado?… http s://t.co/ELBMskdyUK (https://t.co/EL BMskdyUK) (https://www.twitter.com/oracle_es (h ) tt oracle_es p (https://www.twitter.com/oracle_es) s: hace 1 dia // w SE EL PRIMERO w w LLEVATEESTEWIDGET(//www.beon4u.com/es/mywidget/widget/319)
FavoritosdePL/SQL Ajedrez Registrodedominios Ganardinerocontuweb Pepelu
DECLARE CURSORcemp(pnombreINVARCHAR2)IS SELECTsalario,dni FROMempleados WHEREnombre=pnombre; cepm_reccemp%ROWTYPE; vnombreVARCHAR2(20); BEGIN vnombre:='Juan'; DBMS_OUTPUT.PUT_LINE ('Sueldodelosempleadosconnombre'||vnombre); OPENcemp(vnombre); LOOP FETCHcempINTOcemp_rec; DBMS_OUTPUT.PUT_LINE (cemp_rec.dni||''||cemp_rec.salario); EXITWHENcemp%NOTFOUND;Últimoregistro. ENDLOOP; DBMS_OUTPUT.PUT_LINE ('Númerodeempleadosprocesados'||cemp%ROWCOUNT); CLOSEcemp; END;
Cursosdeformación Aplicaciones Pregúntame Juegosdeingenio
Ofertasde interésen programación PLSQL
Sólomequedaseñalarqueexisteunaterceraopciónparamanejarcursoresqueamí, particularmente,nomegustautilizarperoquenoquieroomitir:
http://www.plsql.biz/2006/12/cursoresenplsql.html#more
2/18
22/10/2016
CursoresenPL/SQLProgramaciónPL/SQL
DECLARE TYPEecursorISREFCURSORRETURNempleados%ROWTYPE; cempecursor; cepm_recempleados%ROWTYPE; BEGIN OPENcempFORSELECT*FROMempleados; FORcemp_recINcemp LOOP DBMS_OUTPUT.PUT_LINE (cemp_rec.dni||''||cemp_rec.salario); ENDLOOP; END;
Maestría en Gestión Ambiental
Finalmentesólomencionarqueexistencuatrotiposdeatributosquenospermiten controlarlaejecucióndeuncursor: %ISOPEN:Devuelve"true"sielcursorestáabierto. %FOUND:Devuelve"true"sielregistrofuesatisfactoriamenteprocesado. %NOTFOUND:Devuelve"true"sielregistronopudoserprocesado.Normalmente estoocurrecuandoyasehanprocesadotodoslosregistrosdevueltosporelcursor. %ROWCOUNT:Devuelveelnúmeroderegistrosquehansidoprocesadoshastaese momento.
PublicadoenPLSQLporJoséLuisPérezalas6:39p.m. Etiquetas:TutorialPL/SQL Compartir:
1
45
65comentarios: Lomdijo... Hola, HatahoysiemprehabíamanejadoloscursoresusandoOPEN,FETCHy CLOSEconEXITWHEN..%NOTFOUNDparasalirdelLOOP. Mehasorprendidolasimplicidaddemanejoexplicadaen: DECLARE CURSORcempIS SELECTsalario,dni FROMempleados; cepm_reccemp%ROWTYPE; BEGIN FORcemp_recINcemp LOOP DBMS_OUTPUT.PUT_LINE (cemp_rec.dni||''||cemp_rec.salario); ENDLOOP; END;
EtiquetasenProgramaciónPLSQL
Bases de datos Oracle Optimizaciónytuningdebasesde datos Tutorial PL/SQL
Gracias CarlosEduardodijo... Saludos,muybuenalaexplicacion,buenotengounapreg. Tengohechoabasedecursoresconquery'sdinamicosunprocedimiento enoracleypueslaverdadtardaenlostiemposderespuestaquisiera sabercomoreducirestostiempos,siacasoelusodeloscursoresreduce estostiemposoincrementaocualdelasformasqueexplicasesmas efectiva,buenobuenoesaesunapreg:P,laotraesqueparaelcasode pruebashecorridomistoreyayertermineelstoresinfinalizareste
http://www.plsql.biz/2006/12/cursoresenplsql.html#more
3/18
22/10/2016
CursoresenPL/SQLProgramaciónPL/SQL (ctrl+alt+delete:P)eintentedenuevoperoconunoscambiosenelstore (sinmodificarpartedelcursoroformadeuso)ylodejeasitodalanoche, yhoyreviseynohaterminado:Slapreguntaessielcursorsequeda bloqueadooalgoasienlabasededatos(yaquelocorridesdeuna terminalpuesnotengoaccesoadondeestamontadalabasededatos)asi esquetengoesas2dudas,megustariasabersisabesalgoalrespectote agradeceria,buenosipuedespuesposteaalgoomandameuncorreoa char_corp@hot....gracias. Pepeludijo... HolaCarlosEduardo, Losdosmotivosmásusualesporlosqueuncursortardademasiado tiempoenejecutarseson: 1)Unproblemaderendimiento,esdecir,quedentrodelcursortengas algunaconsultadinámicaquetardemuchotiempoenejecutarse. Enestecasoterecomiendoquepruebeslasconsultasdinámicasunaa unaparadeterminarcualeslaqueteestádandoproblemas. 2)Querealicesalgunaoperaciónquenecesitebloquearalgúnobjetodela basededatosydichoobjetoestéyabloqueadoyelcursorsequede experandohastaqueelobjetoquedeliberado. CRiveradijo... sisecualcualeslaquetardamastiempoperopuesesporeltipode consultaalgunconsejopararealizarquerysmasrapidos,quierodecirmira miqueryesalgoasi (SELECTB.ACCOUNT_NO,SUM(B.BALANCE_DUE)FROM CMF_BALANCE@NAMESERVER01,CMF@NAMESERVER01CWHERE B.ACCOUNT_NO=C.ACCOUNT_NOANDC.ACCOUNT_STATUS>=1 ANDB.PPDD_DATE=TRUNC(SYSDATE1)AND A.PERIOD_START_TIME...