Anda di halaman 1dari 61

Andres Reyes Torres

2 I. T. InIormatica de Gestion, Universidad de Cordoba.


1
Prcticus de Buses de utos.
Introdoction to Orucle: SQL und PL[SQL.
Advunced SQL und SQLPLLS.
Andrs Reyes Torres, ooq.
I. T. InIormticu de Gestin.
iretou@oco.es
http:[[www.oco.es[~iretou











































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
2
ndice

N PrucLIcu PugInu
PrucLIcu 1
PrucLIcu z
PrucLIcu 8
PrucLIcu q 11
PrucLIcu 1q
PrucLIcu 6 1;
PrucLIcu ; 1q
PrucLIcu zq z1
PrucLIcu z zz
PrucLIcu q z;
PrucLIcu 1o z
PrucLIcu 11
PrucLIcu 1z ;
PrucLIcu 1 q1
PrucLIcu 16 q
PrucLIcu 1; q
PrucLIcu 18 q;
PrucLIcu 1q o
PrucLIcu z1
PrucLIcu zz ;
PrucLIcu z q



























Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
3
PRACTICA 1

REM ; p1gz.sgl

REM , SQLPlus commcnds cccess the dctcbcse.

REM , Verdcdero

-------------------------------------------------------------------------------

REM ; p1gj.sgl

REM , Will the SELECT stctement execute successjull?
REM , SQL> SELECT encme, job, scl Sclcr
REM , z IRDM emp,

REM , Verdcdero.

-------------------------------------------------------------------------------

REM ; p1gq.sgl

REM , Will the SELECT stctement execute successjull?
REM , SQL> SELECT
REM , z IRDM sclrcde,
REM , Verdcdero

-------------------------------------------------------------------------------

REM ; p1gg.sgl

REM , There cre three codin errors in this stctement.
REM , Ccn ou identij them?

REM , SQL> SELECT empno, encme
REM , z sclcr x :z ANNUAL SALARY
REM , IRDM emp,

REM , Los tres errores son:
REM , :) El ctributo encme hc de ir seuido de unc comc ','.
REM , z) Al seleccioncr el ctributo sclcr multipliccrlo por :z,
REM , el opercdor pcrc lc multiplicccin es no x. Ademcs,
REM , el ctributo tiene como nombre "scl" no "sclcr".
REM , ) El clics pcrc lc columnc encme hc de ir entre comillcs.

REM , Teniendo en cuentc los tres errores, lc sentencic quedcrc:
REM , SQL> SELECT empno, encme,
REM , z scl :z "ANNUAL SALARY"
REM , IRDM emp,

-------------------------------------------------------------------------------

REM ; p1go.sgl

REM , Shou the structure oj the DEPT tcble.
REM , Select cll dctc jrom the DEPT tcble.

DESCRIBE dept
SELECT * FROM dept;

-------------------------------------------------------------------------------
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
4

REM ; p1g;.sgl

REM , Shou the structure oj the EMP tcble. Crecte c quer to displc
REM , the ncme, job, hire dcte cnd emploee number jor ecch emploee,
REM , uith emploee number cppecrin jirst. Scte our SQL stctement
REM , to c jile ncmed p:q;.sql

DESC emp
SELECT empno, ename, job, hiredate
FROM emp;

-------------------------------------------------------------------------------

REM ; p1gS.sgl

REM , Run our quer in the jile p:q;.sql

START p1q7.sql

-------------------------------------------------------------------------------

REM ; p1gp.sgl

REM , Crecte c quer to displc unique jobs jrom the EMP tcble.

SELECT DISTINCT job
FROM emp;

-------------------------------------------------------------------------------

REM , p:q:o.sql

REM , Locd p:q;.sql into the SQL bujjer. Ncme the column hecdins
REM , Emp #, Emploee, 1ob, cnd Hire Dcte, respectl. Rerun our quer.

SELECT empno "Emp #", ename "Employee", job "Job", hiredate "Hire
Date"
FROM emp;

-------------------------------------------------------------------------------

REM ; p1g11.sgl

REM , Displc the ncme concctencted uith the job, sepcrcted b
REM , c commc cnd spcce, cnd ncme the column Emploee cnd Title.

SELECT ename || ', ' || job AS "Employee and Title"
FROM emp;

-------------------------------------------------------------------------------

REM ; p1g1z.sgl

REM , Crecte c quer to displc cll the dctc jrom the EMP tcble.
REM , Sepcrcte ecch column b c commc. Ncme the column THE_DUTPUT.

SELECT empno || ',' || ename || ',' || job || ',' || mgr ||
',' || hiredate || ',' || sal || ',' || comm || ',' || deptno
AS THE_OUTPUT
FROM emp;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
5
PRACTICA

REM ; pzgo1.sgl

REM , Crecte c quer to displc the ncme cnd sclcr oj emploees ecrnin
REM , more thcn $z8o. Sce our SQL stctement to c jile ncmed pzq:.sql.
REM , Run our quer.

SELECT ename, sal
FROM emp
WHERE sal>2850;

REM , Pcrc ejecutcr lc consultc desde jichero: START pzqo:.sql

-------------------------------------------------------------------------------

REM ; pzgoz.sgl

REM , Crecte c quer to displc the emploee cnd depcrtment number
REM , jor emploee nomber ;.

SELECT ename, deptno


FROM emp
WHERE empno=7566;

-------------------------------------------------------------------------------

REM ; pzgoj.sgl

REM , Modij pzqo:.sql to displc the ncme cnd sclcr jor cll emploees
REM , uhose sclcr is not in the rcne oj $:oo cnd $z8o. Rescte our
REM , SQL stctement to c jile ncmed pzqo.sql. Rerun our quer.

SELECT ename, sal
FROM emp
WHERE sal NOT BETWEEN 1500 AND 2850;

-------------------------------------------------------------------------------

REM ; pzgoq.sgl

REM , Displc the emploee ncme, job cnd stcrt dcte oj emploees hired betueen
REM , Iebrcur zo, :p8:, cnd Mc :, :p8:. Drder the quer in cscendin order
REM , oj stcrt dcte.

SELECT ename, job, hiredate
FROM emp
WHERE hiredate BETWEEN '20-FEB-81' AND '01-MAY-81'
ORDER BY hiredate;

-------------------------------------------------------------------------------

REM ; pzgog.sgl

REM , Displc the emploee ncme cnd depcrtment number oj cll emploees
REM , in depcrtment :o cnd o in clphcbeticcl order b ncme.

SELECT ename, deptno
FROM emp
WHERE deptno IN(10,30)
ORDER BY ename;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
6

-------------------------------------------------------------------------------

REM ; pzgoo.sgl

REM , Modj pzqo.sql to list the ncme cnd sclcr oj emploees uho ecrn
REM , more thcn $:oo cnd cre in depcrtment :o or o. Lcbel the columns
REM , Emploee cnd Monthl Sclcr, respectitel. Rescte or SQL stctement
REM , to c jile ncmed pzqo.sql. Rerun our quer.

SELECT ename "Employee", sal "Monthly Salary"
FROM emp
WHERE sal>1500 AND deptno IN(10,30);

-------------------------------------------------------------------------------

REM ; pzgo;.sgl

REM , Displc the ncme cnd hire dcte oj eter emploee uho ucs
REM , hired in :p8z.

SELECT ename, hiredate
FROM emp
WHERE hiredate BETWEEN '01-JAN-82' AND '31-DEC-82';

-------------------------------------------------------------------------------

REM ; pzgoS.sgl

REM , Displc the ncme cnd title oj cll emploees uho do not hcte
REM , c mcncer.

SELECT ename, job
FROM emp
WHERE mgr IS NULL;

-------------------------------------------------------------------------------

REM ; pzgop.sgl

REM , Displc the ncme, sclcr, cnd commisions jor cll emploees uho
REM , ecrn commisions. Sort dct in descendin order oj sclcr cnd
REM , commisions.

SELECT ename, sal, comm
FROM emp
WHERE comm IS NOT NULL
ORDER BY sal, comm DESC;

-------------------------------------------------------------------------------

REM ; pzg1o.sgl

REM , Displc the ncmes oj cll emploees uhere the third letter oj
REM , their ncme is cn A.

SELECT ename
FROM emp
WHERE ename LIKE '__A%';

-------------------------------------------------------------------------------
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
7

REM ; pzg11.sgl

REM , Displc the ncme oj cll emploees thct hcte tuo Ls in their
REM , ncme cnd cre in depcrtment o or their mcncer is ;;8z.

SELECT ename
FROM emp
WHERE ename LIKE '%LL%' AND (deptno=30 OR mgr=7782);

-------------------------------------------------------------------------------

REM ; pzg1z.sgl

REM , Displc the ncme, job cnd sclcr jor cll emploees uhoose job is
REM , Clerl or Anclst cnd their sclcr is not equcl to $:ooo, $ooo
REM , or $ooo.

SELECT ename, job, sal
FROM emp
WHERE job IN('CLERK','ANALYST') AND sal NOT IN(1000,3000,5000);

-------------------------------------------------------------------------------

REM ; pzg1j.sgl

REM , Modij pzqo.sql to displc the ncme, sclcr cnd commisions
REM , jor cll emploees uhose commisions cmount is recter thcn
REM , their sclcr increcsed b :o. Rerun our quer. Rescte our
REM , quer cs p:q:.sql.

SELECT ename, sal, comm
FROM emp
WHERE comm>(sal*1.1);



























Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
8
PRACTICA

REM ; pjgo1.sgl

REM , Write c quer to displc the current dcte. Lcbel the column Dcte.

SELECT sysdate "Date"
FROM dual;

-------------------------------------------------------------------------------

REM ; pjgoz.sgl

REM , Displc the emploee number, ncme, sclcr cnd sclcr increcse b
REM , : expressed cs c uhole number. Lcbel the column Neu Sclcr.
REM , Scte our SQL stctement to c jile ncmed pqoz.sql

SELECT empno, ename, sal, ROUND(sal*1.15) as "New Salary"
FROM emp;

-------------------------------------------------------------------------------

REM ; pjgoj.sgl

REM , Run our quer in the jile pqoz.sql

START p3q02.sql

-------------------------------------------------------------------------------

REM ; pjgoq.sgl

REM , Modij our quer pqoz.sql to cdd cn cdditioncl column thcn
REM , uill substrcct the old sclcr jrom the neu sclcr. Lcbel the
REM , column Increcse. Rerun our quer.

SELECT empno, ename, sal, ROUND(sal*1.15) AS "New Salary",
ROUND(sal*1.15)-sal as "Increase"
FROM emp;

-------------------------------------------------------------------------------

REM ; pjgog.sgl

REM , Displc the emploee's ncme. hire dcte, cnd sclcr retieu dcte, uhich
REM , is the jirst Mondc cjter six months oj sertice. Lcbel the column
REM , REVIEW. Iormct the dctes to cppecr in the jormct similcr to
REM , "Sundc, the Setenth oj September, :p8:".

SELECT ename, hiredate,
TO_CHAR(NEXT_DAY(ADD_MONTHS(hiredate,6),'MONDAY'),
'DAY", the " fmDdspth " of " MONTH ", " YYYY') AS REVIEW
FROM emp;

REM SELECT ename, hiredate,
REM TO_CHAR(ADD_MONTHS(NEXT_DAY(hiredate,'MONDAY'),6),
REM 'DAY", the " fmDdspth " of " MONTH ", " YYYY') AS REVIEW
REM FROM emp;

-------------------------------------------------------------------------------

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
9
REM ; pjgoo.sgl

REM , Ior ecch emploee displc the emploee ncme cnd cclculcte the number
REM , oj months betueen todc cnd the dcte the emploee ucs hired. Lcbel
REM , the column MDNTHS_WDRKED. Drder our results b the number oj months
REM , emploed. Round the number oj months up to the closest uhole number.

SELECT ename, MONTHS_BETWEEN( SYSDATE, hiredate ) AS MONTHS_WORKED
FROM emp
ORDER BY MONTHS_WORKED;

-------------------------------------------------------------------------------

REM ; pjgo;.sgl

REM , Write c quer thct produces the jollouin jor ecch emploee:
REM , <emploee ncme> ecrns <sclcr> monthl but ucnts < times sclcr>.
REM , Lcbel the column Drecm Sclcries.

SELECT ename || ' earns ' || TO_CHAR(sal,'$99,999.99') || ' monthly
but wants '
|| TO_CHAR(sal*3,'$99,999.99') || '.'
AS "Dream Salaries"
FROM emp;

-------------------------------------------------------------------------------

REM ; pjgoS.sgl

REM , Crecte c quer to displc ncme cnd sclcr jor cll emploees. Iormct
REM , the sclcr to be : chcrccteres lon, lej-pcdded uith $. Lcbel the
REM , column SALARY.

SELECT ename, LPAD(sal,15,'$') AS SALARY
FROM emp
WHERE sal IS NOT NULL;

-------------------------------------------------------------------------------

REM ; pjgop.sgl

REM , Write c quer thct uill displc the emploee's ncme uith the jirst letter
REM , ccpitclized cnd cll other letters louerccse cnd the leht ot ther ncme,
REM , jor cll emploees uhose ncme stcrts uith 1, A or M. Gite ecch column
REM , the cppropicte lcbel.

SELECT INITCAP(ename) AS "Name", LENGTH(ename) AS "Lenght"
FROM emp
WHERE SUBSTR(UPPER(ename),1,1) IN ('J','A','M');

-------------------------------------------------------------------------------

REM ; pjg1o.sgl

REM , Displc the ncme, hire dcte, cnd dc oj ueel on uhich the emploee
REM , stcrted. Lcbel the column DAY. Drder the results b the dc oj the
REM , ueel stcrtin uith Mondc.

SELECT ename, hiredate, DECODE(TO_CHAR(hiredate,'D'),
1, 'Monday',
2, 'Tuesday',
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
10
3, 'Wednesday',
4, 'Thursday',
5, 'Friday',
6, 'Saturday',
7, 'Sunday') AS day
FROM emp
ORDER BY DECODE(day,
'Monday', 1,
'Tuesday', 2,
'Wednesday', 3,
'Thursday', 4,
'Friday', 5,
'Saturday', 6,
'Sunday', 7);

-------------------------------------------------------------------------------

REM ; pjg11.sgl

REM , Crecte c quer thct uill displc the emploee ncme cnd commision cmount.
REM , Ij the emploee does not ecrn commisions, put "No Commision." Lcbel the
REM , column CDMM.

SELECT ename, NVL(TO_CHAR(comm),'No Commision') AS comm
FROM emp;




































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
11
PRACTICA q

REM ; pqgo1.sgl

REM , Escribe unc consultc pcrc mostrcr el nombre, nmero de depcrtcmento
REM , nombre de depcrtcmento pcrc todos los emplecdos.

SELECT e.ename, e.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno
ORDER BY d.dname;

-------------------------------------------------------------------------------

REM ; pqgoz.sgl

REM , Crec un listcdo nico de todos los trcbcjos que estcn
REM , en el depcrtcmento o.

SELECT DISTINCT e.job, d.loc
FROM emp e, dept d
WHERE e.deptno=d.deptno AND d.deptno=30
ORDER BY job;

-------------------------------------------------------------------------------

REM ; pqgoj.sgl

REM , Escribe unc consultc pcrc mostrcr el nombre de emplecdo, nombre
REM , de depcrtcmento locclizccin de todos los emplecdos que cncn
REM , unc comisin.

SELECT e.ename, d.dname, d.loc
FROM emp e, dept d
WHERE e.deptno=d.deptno AND e.comm IS NOT NULL;

-------------------------------------------------------------------------------

REM ; pqgoq.sgl

REM , Muestrc el nombre de emplecdo nombre de depcrtcmento pcrc todos los
REM , emplecdos que tienen unc A en su nombre. Grcbc tu sentencic SQL en un
REM , jichero llcmcdo p(qo(.sql

SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.ename LIKE '%A%' AND e.deptno=d.deptno
ORDER BY d.dname;

-------------------------------------------------------------------------------

REM ; pqgog.sgl

REM , Escribe unc consultc pcrc mostrcr el nombre, trcbcjo, nmero de
REM , depcrtcmento nombre de depcrtcmento pcrc todos los emplecdos
REM , que trcbcjcn en DALLAS.

SELECT e.ename, e.job, e.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno=d.deptno AND UPPER(d.loc)='DALLAS'
ORDER BY e.ename;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
12

-------------------------------------------------------------------------------

REM ; pqgoo.sgl

REM , Muestrc el nombre de emplecdo nmero de emplecdo junto con el
REM , nombre de su jeje el numero de jeje. Etiquetc lcs columncs
REM , Emplecdo, Emp#, 1eje, 1ej# respectitcmente. Grcbc tu sentencic
REM , SQL c un jichero llcmcdo p(qo.sql

SELECT e.ename "Empleado", e.empno "Emp#", w.ename "Jefe", w.empno
"Jef#"
FROM emp e, emp w
WHERE w.empno=e.mgr
ORDER BY e.ename;

-------------------------------------------------------------------------------

REM ; pqgo;.sgl

REM , Modijicc p(qo.sql pcrc mostrcr c todos los emplecdos incluendo
REM , c Kin, quien no tiene jeje. Vuelte c rcbcr como p(qo;.
REM , Ejecutc p(qo;.sql

SELECT e.ename "Empleado", e.empno "Emp#", w.ename "Jefe", w.empno
"Jef#"
FROM emp e, emp w
WHERE w.empno(+)=e.mgr
ORDER BY e.ename;

-------------------------------------------------------------------------------

REM ; pqgoS.sgl

REM , Crec unc consultc que mostrcrc el nombre de emplecdo, nmero de
REM , depcrtcmento todos los emplecdos que trcbcjcn en el mismo
REM , depcrtcmento de un emplecdo dcdo. Dc c ccdc columnc unc etiquetc
REM , cpropicdc.

SELECT e.deptno "DEPARTAMENTO", e.ename "EMPLEADO", w.ename "COLEGA"
FROM emp e, emp w
WHERE w.deptno=e.deptno AND w.ename<>e.ename
ORDER BY "DEPARTAMENTO", "EMPLEADO";

-------------------------------------------------------------------------------

REM ; pqgop.sgl

REM , Muestrc lc estructurc de lc tcblc SALGRADE. Crec unc consultc
REM , que mostrcrc el nombre, trcbcjo, nombre de depcrtcmento, sclcrio
REM , rcdo pcrc todos los emplecdos.

DESC salgrade

SELECT e.ename, e.job, d.dname, e.sal, s.grade
FROM emp e, dept d, salgrade s
WHERE e.deptno=d.deptno AND
e.sal BETWEEN s.losal AND s.hisal
ORDER BY e.ename;

-------------------------------------------------------------------------------
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
13

REM ; pqg1o.sgl

REM , Crec unc consultc pcrc mostrcr el nombre jechc de contrcto de
REM , cuclquier emplecdo contrctcdo despues del emplecdo lcle.

SELECT e.ename, e.hiredate
FROM emp e, emp w
WHERE e.hiredate>w.hiredate AND UPPER(w.ename)='BLAKE'
ORDER BY e.ename;

-------------------------------------------------------------------------------

REM ; pqg11.sgl

REM , Muestrc los nombre de todos los emplecdos sus jechcs de contrcdo
REM , junto con el nombre de su jeje jechc de contrcto pcrc todos los
REM , emplecdos que jueron contrctcdos cntes que sus jejes. Etiquetc lcs
REM , columncs Emplecdo, Emp Hiredcte, 1eje 1ej Hiredcte, respectitcmente.

SELECT e.ename "Empleado", e.hiredate "Emp Hiredate",
j.ename "Jefe", j.hiredate "Jef Hiredate"
FROM emp e, emp j
WHERE e.hiredate < j.hiredate AND e.mgr=j.empno
ORDER BY e.ename;

-------------------------------------------------------------------------------

REM ; pqg1z.sgl

REM , Crec unc consultc que muestre el nombre de los emplecdos
REM , lc ccntidcd del sclcrio indiccdo por csterscos. Ccdc
REM , cstersco representc cien dolcres. Drdenc los dctos en orden
REM , descendende de sclcrio. Etiquetc lc columnc EMPLEADDS_Y_SUS_SALARIDS.

SELECT RPAD(ename,10,' ') ||
RPAD(' ',(sal/100),'*') EMPLEADOS_Y_SUS_SALARIOS
FROM emp
WHERE sal IS NOT NULL
ORDER BY sal DESC;





















Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
14
PRACTICA g

REM ; pggo1.sgl

REM , Lcs junciones de rupo trcbcjcn con muchcs jilcs pcrc
REM , producir un solo resultcdo.
REM , VERDADERD

-------------------------------------------------------------------------------

REM ; pggoz.sgl

REM , Lcs junciones de rupo incluen los tclores nulos en los cclculos.
REM , IALSD

-------------------------------------------------------------------------------

REM ; pggoj.sgl

REM , Lc clcusulc WHERE restine lcs jilcs c ser incluidcs en el
REM , cclculo de rupo.
REM , VERDADERD.

-------------------------------------------------------------------------------

REM ; pggoq.sgl

REM , Muestrc el sclcrio mcs clto, mcs bcjo, lc sumc lc medic del sclcrio
REM , de todos los emplecdos. Etiquetc lcs columncs Mcximo, Mnimo, Sumc
REM , Medic, respectitcmente. Redondec tus resultcdos c lc posicin
REM , decimcl. Grcbc tu sentencic SQL en un jichero llcmcdo pqo(.sql.

SELECT MAX(sal) "Mximo",
MIN(sal) "Mnimo",
SUM(sal) "Suma",
ROUND(AVG(sal)) "Media"
FROM emp;

-------------------------------------------------------------------------------

REM ; pggog.sgl

REM , Modijicc pqo(.sql pcrc mostrcr el mnimo, mcximo, sumc
REM , sclcrio medio pcrc ccdc tipo de trcbcjo. Vuelte c rcbcr
REM , c un jichero llcmcdo pqo.sql. Ejecutc de nueto tu consultc.

SELECT job,
MAX(sal) "Mximo",
MIN(sal) "Mnimo",
SUM(sal) "Suma",
ROUND(AVG(sal)) "Media"
FROM emp
GROUP BY job;

-------------------------------------------------------------------------------

REM ; pggoo.sgl

REM , Escribe unc consultc pcrc mostrcr el nmero de
REM , personcs con el mismo trcbcjo.

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
15
SELECT job, COUNT(*)
FROM emp
GROUP BY job;

-------------------------------------------------------------------------------

REM ; pggo;.sgl

REM , Determinc el nmero de jejes sin listcrlos. Etiquetc lc
REM , columnc Nmero de jejes.

SELECT COUNT(DISTINCT(mgr)) "Nmero de jefes"
FROM emp;

-------------------------------------------------------------------------------

REM ; pggoS.sgl

REM , Escribe unc consultc que mostrcrc lc dijerencic entre
REM , los sclcrios mcs clto mcs bcjo. Etiquetc lc columnc
REM , DIIERENCIA.

SELECT MAX(sal)-MIN(sal) DIFERENCIA
FROM emp;

-------------------------------------------------------------------------------

REM ; pggop.sgl

REM , Muestrc el nmero de jeje sclcrio del emplecdo
REM , peor pccdo pcrc ese jeje. Exclue c cuclquierc
REM , donde el cdio del jeje no es conocido. Exclue
REM , cquellos ruops donde el sclcrio mnimo es menor
REM , de $:ooo. Drdenc lc sclidc en orden descendente
REM , de sclcrio.

SELECT mgr, MIN(sal)
FROM emp
WHERE mgr IS NOT NULL
GROUP BY mgr
HAVING MIN(sal)>1000;

-------------------------------------------------------------------------------

REM ; pgg1o.sgl

REM , Escribe unc consultc pcrc mostrcr el nombre de
REM , depcrtcmento, nombre de locclizccin, nmero de
REM , emplecdos el sclcrio medio de todos los emplecdos
REM , en ese depcrtcmento. Etiquetc lcs columncs dncme, loc,
REM , Numero de Personcs Sclcrio, respectitcmente.

SELECT d.dname "dname",
d.loc "loc",
COUNT(DISTINCT(e.deptno)) "Nmero de Personas",
ROUND(AVG(e.sal),2) "Salario"
FROM dept d, emp e
WHERE d.deptno=e.deptno
GROUP BY d.dname,d.loc;

-------------------------------------------------------------------------------
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
16

REM ; pgg11.sgl

REM , Crec unc consultc que mostrcrc el nmero totcl de emplecdos
REM , de ese totcl el nmero que jueron contrctcdos en :p8o,
REM , :p8:, :p8z :p8. Dc nombres cpropicdos c los enccbezcdos.



SELECT COUNT(DISTINCT(e.hiredate)) TOTAL,
SUM(DECODE(TO_CHAR(e.hiredate,'YY'),'80',1)) "1980",
SUM(DECODE(TO_CHAR(e.hiredate,'YY'),'81',1)) "1981",
SUM(DECODE(TO_CHAR(e.hiredate,'YY'),'82',1)) "1982",
SUM(DECODE(TO_CHAR(e.hiredate,'YY'),'83',1)) "1983"
FROM emp e;

-------------------------------------------------------------------------------

REM ; pgg1z.sgl

REM , Crec unc consultc mctrz pcrc mostrcr el trcbcjo, el sclcrio pcrc
REM , ese trcbcjo bcscdo en el nmero de depcrtcmento el sclcrio totcl
REM , pcrc ese trcbcjo pcrc todos los depcrtcmentos, dcndo c ccdc
REM , columnc unc ccbecerc cpropicdc.

SELECT DISTINCT e.job "Trabajo",
SUM(DECODE(e.deptno,10,e.sal)) "Depto.10",
SUM(DECODE(e.deptno,20,e.sal)) "Depto.20",
SUM(DECODE(e.deptno,30,e.sal)) "Depto.30",
SUM(e.sal) "Total"
FROM emp e, dept d
WHERE d.deptno=e.deptno
GROUP BY e.job
;



























Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
17
PRACTICA 6

REM ; pogo1.sgl

REM , Escribe unc consultc pcrc mostrcr el nombre de emplecdo jechc de
REM , contrctccin pcrc todos los emplecdos del mismo depcrtcmento que
REM , lcle. Exclue c lcle.

SELECT ename, hiredate
FROM emp
WHERE ename!='BLAKE' AND
deptno=(SELECT deptno
FROM emp
WHERE ename='BLAKE')
;

-------------------------------------------------------------------------------

REM ; pogoz.sgl

REM , Crec unc consultc pcrc mostrcr el nmero de emplecdo nombre
REM , pcrc todos los emplecdos que cncn mcs del sclcrio medio.
REM , Drdenc los resultcdos en orden descendente de sclcrio.

SELECT empno, ename
FROM emp
WHERE sal>(SELECT AVG(sal)
FROM emp)
ORDER BY sal DESC
;

-------------------------------------------------------------------------------

REM ; pogoj.sgl

REM , Escribe unc consultc que mostrcrc el nmero de emplecdo nombre
REM , pcrc todos los emplecdos que trcbcjcn en un depcrtcmento con
REM , cln emplecdo cuo nombre contentc unc T. Grcbc tu sentencic SQL
REM , en un jichero llcmcdo pqo.sql

SELECT empno, ename
FROM emp
WHERE deptno IN ( SELECT deptno
FROM emp
WHERE ename LIKE '%T%')
;

-------------------------------------------------------------------------------

REM ; pogoq.sgl

REM , Muestrc el nombre de emplecdo, nmero de depcrtcmento
REM , ttulo de trcbcjo pcrc todos los emplecdos cuo depcrtcmento
REM , estc locclizcdo en Dcllcs.

SELECT ename, deptno, job
FROM emp
WHERE deptno IN ( SELECT deptno
FROM dept
WHERE UPPER(loc)='DALLAS')
;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
18

-------------------------------------------------------------------------------

REM ; pogog.sgl

REM , Muestrc el nombre de emplecdo sclcrio pcrc todos los emplecdos
REM , que dependen de Kin.

SELECT ename, sal
FROM emp
WHERE mgr=( SELECT empno
FROM emp
WHERE UPPER(ename)='KING')
;

-------------------------------------------------------------------------------

REM ; pogoo.sgl

REM , Muestrc el nmero de depcrtcmento, nombre, trcbcjo pcrc
REM , todos los emplecdos en el depcrtcmento de Scles (tentcs)

SELECT deptno, ename, job
FROM emp
WHERE deptno=(SELECT deptno
FROM dept
WHERE UPPER(dname)='SALES')
;

-------------------------------------------------------------------------------

REM ; pogo;.sgl

REM , Modijicc pqo.sql pcrc mostrcr el nmero de emplecdo, nombre
REM , sclcrio pcrc todos los emplecdos que cncn mcs del sclcrio medio
REM , quienes trcbcjcn en un depcrtcmento con cln emplecdo con
REM , unc T en su nombre. Rercbc como pqo.sql. Vuelte c ejecutcr
REM , tu consultc.

SELECT empno, ename, sal
FROM emp
WHERE deptno IN ( SELECT deptno
FROM emp
WHERE ename LIKE '%T%')
AND sal>( SELECT AVG(sal)
FROM emp)
;














Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
19
PRACTICA ,

REM ; p;go1.sgl

REM , Escribe unc sentencic pcrc mostrcr el nombre, nmero de depcrtcmento
REM , sclcrio de ccdc emplecdo cuo nmero de depcrtcmento sclcrio
REM , coincidcn cmbos con el nmero de depcrtcmento sclcrio de cuclquier
REM , otro emplecdo que cne unc comisin.

SELECT ename, deptno, sal
FROM emp
WHERE deptno IN ( SELECT deptno
FROM emp
WHERE comm>=0
)
AND
sal IN ( SELECT sal
FROM emp
WHERE comm>=0
)
;

-------------------------------------------------------------------------------

REM ; p;goz.sgl

REM , Muestrc el nombre, nombre de depcrtcmento sclcrio de cuclquier
REM , emplecdo cuo sclcrio comisin coincidcn cmbos con el sclcrio
REM , comisin de cuclquier emplecdo locclizcdo en Dcllcs.

SELECT e.ename, d.dname, e.sal
FROM emp e, dept d
WHERE (sal,NVL(comm,-1)) IN
( SELECT sal, NVL(comm,-1)
FROM emp
WHERE deptno= ( SELECT
deptno
FROM dept
WHERE
loc='DALLAS')
)
AND
d.deptno=e.deptno
AND
d.loc='DALLAS'
;

-------------------------------------------------------------------------------

REM ; p;goj.sgl

REM , Crec unc consultc pcrc mostrcr el nombre, jechc de contrcto sclcrio
REM , pcrc todos los emplecdos que tienen el mismo sclcrio comisin
REM , que Scott.

SELECT ename, hiredate, sal
FROM emp
WHERE (sal,NVL(comm,-1)) IN
( SELECT sal ,NVL(comm,-1)
FROM emp
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
20
WHERE
UPPER(ename)='SCOTT')
AND
UPPER(ename) != 'SCOTT'
;

-------------------------------------------------------------------------------

REM ; p;goq.sgl

REM , Crec unc consultc pcrc mostrcr los emplecdos que cncn un sclcrio
REM , mcor que el sclcrio de cuclquier CLERK <<ojicinistc>>. Drdenc
REM , los resultcdos desde el sclcrio mcs clto cl mcs bcjo.

SELECT ename, job, sal
FROM emp
WHERE sal > ANY ( SELECT sal
FROM emp
WHERE job='CLERK')
AND
job!='CLERK'
ORDER BY sal DESC
;






































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
21
PRACTICA q

REM ; pzqgo1.sgl

REM , Muestrc el depcrtcmento que no tiene emplecdos.

SELECT deptno, dname
FROM dept
MINUS
SELECT d.deptno, d.dname
FROM dept d, emp e
WHERE d.deptno=e.deptno
;

REM ; DEPTNO DNAME
REM ; --------- --------------
REM ; 40 OPERATIONS

-------------------------------------------------------------------------------

REM ; pzqgoz.sgl

REM , Encuentrc el trcbcjo que estubo completo en lc ultimc mitcd de
REM , :p8: el mismo trcbcjo que estubo completo durcnte el mismo
REM , periodo en :p8z

SELECT job
FROM emp
WHERE hiredate BETWEEN '15-JUL-81' AND '31-DEC-81'
INTERSECT
SELECT job
FROM emp
WHERE hiredate BETWEEN '15-JUL-82' AND '31-DEC-82'
;

REM ; JOB
REM ; ---------
REM ; ANALYST

-------------------------------------------------------------------------------

REM ; pzqgoj.sgl

REM , Escribe unc consultc compuestc pcrc producir unc listc de productos
REM , mostrcndo el porcentcje de descuento, identijiccdor del producto
REM , tiejo nueto precio. Los productos por debcjo de $:o son reducidos
REM , un :o, los productos entre $:o $o son reducidos un :, los
REM , productos sobre $o son reducidos un zo los productos sobre (o$
REM , no son reducidos.

SELECT '10% off ' "DISCOUNT", prodid, stdprice, stdprice-
((stdprice*10)/100) ACTPRICE
FROM price
WHERE stdprice < 10
UNION
SELECT '15% off ' "DISCOUNT", prodid, stdprice, stdprice-
((stdprice*15)/100) ACTPRICE
FROM price
WHERE stdprice BETWEEN 10 AND 30
UNION
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
22
SELECT '20% off ' "DISCOUNT", prodid, stdprice, stdprice-
((stdprice*20)/100) ACTPRICE
FROM price
WHERE stdprice BETWEEN 30 AND 40
UNION
SELECT 'no desc ' "DISCOUNT", prodid, stdprice, stdprice ACTPRICE
FROM price
WHERE stdprice > 40
;

REM ; DISCOUNT PRODID STDPRICE ACTPRICE
REM ; -------- --------- --------- ---------
REM ; 10% off 200380 4 3.6
REM ; 15% off 100860 30 25.5
REM ; 15% off 100870 24 20.4
REM ; 15% off 100870 28 23.8
REM ; 15% off 101860 24 20.4
REM ; 15% off 200376 24 20.4
REM ; 20% off 100860 30 24
REM ; 20% off 100860 32 25.6
REM ; 20% off 100860 35 28
REM ; 20% off 100861 39 31.2
REM ; 20% off 102130 34 27.2
REM ; no desc 100861 42 42
REM ; no desc 100861 45 45
REM ; no desc 100871 48 48
REM ; no desc 100871 56 56
REM ; no desc 100890 54 54
REM ; no desc 100890 58 58
REM ; no desc 101863 125 125
REM ;
REM ; 18 rows selected.

-------------------------------------------------------------------------------

REM ; pzqgoq.sgl

REM , Produce unc listc de trcbcjos por depcrtcmentos :o, o zo en este
REM , orden. Muetrc el trcbcjo el nmero de depcrtcmento.

SELECT DISTINCT job, deptno, DECODE(deptno,
10,0,
20,2,
30,1) orden
FROM emp
ORDER BY orden
;

REM ; JOB DEPTNO ORDEN
REM ; --------- --------- ---------
REM ; CLERK 10 0
REM ; MANAGER 10 0
REM ; PRESIDENT 10 0
REM ; CLERK 30 1
REM ; MANAGER 30 1
REM ; SALESMAN 30 1
REM ; ANALYST 20 2
REM ; CLERK 20 2
REM ; MANAGER 20 2
REM ;
REM ; 9 rows selected.
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
23

-------------------------------------------------------------------------------

REM ; pzqgog.sgl

REM , Listc el nmero de depcrtcmento pcrc los depcrtcmentos
REM , que no tiene como ttulo de trcbcjo ANALYST.

SELECT deptno
FROM dept
MINUS
SELECT deptno
FROM emp
WHERE job LIKE 'ANALYST'
;

REM ; DEPTNO
REM ; ---------
REM ; 10
REM ; 30
REM ; 40

-------------------------------------------------------------------------------

REM ; pzqgoo.sgl

REM , Listc todos los titulos de trcbcjo en el depcrtcmento :o zo
REM , que no ocurren en cmbos depcrtcmentos.

SELECT job
FROM emp
MINUS
SELECT job
FROM emp
WHERE deptno != 20
AND
deptno != 10
;

REM ; JOB
REM ; ---------
REM ; ANALYST
REM ; PRESIDENT


















Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
24
PRACTICA g

REM ; pzggo1.sgl

REM , Escribe unc consultc pcrc mostrcr los tres que mcs cncn en lc
REM , tcblc EMP. Mustrc sus nombres sclcrios.

SELECT e.ename, e.sal
FROM emp e
WHERE 3 > ( SELECT COUNT(sal)
FROM emp
WHERE e.sal < sal
)
AND
sal IS NOT NULL
;

REM ; ENAME SAL
REM ; ---------- ---------
REM ; KING 5000
REM ; FORD 3000
REM ; SCOTT 3000

-------------------------------------------------------------------------------

REM ; pzggoz.sgl

REM , Encuentrc todos los emplecdos que no son un supertisor.
REM , c) Hcz esto uscndo primero el opercdor EXISTS

SELECT e.ename
FROM emp e
WHERE NOT EXISTS ( SELECT empno
FROM emp
WHERE mgr=e.empno
)
;

REM ; ENAME
REM ; ----------
REM ; MARTIN
REM ; ALLEN
REM ; TURNER
REM ; JAMES
REM ; WARD
REM ; SMITH
REM ; ADAMS
REM ; MILLER
REM ; DOE
REM ;
REM ; 9 rows selected.

REM , b) Puede hccerse esto uscndo el opercdor IN? Porque, o
REM , porque no?
REM , No se puede hccer, porque lc consultc internc solo se
REM , etclucrc unc solc tez, es decir, solo pcrc el primer
REM , emplecdo detuelto por lc consultc externc, lo cucl nos
REM , detolterc solo cquellos emplecdos cuo jeje no es
REM , el primer emplecdo detuelto por lc consultc principcl:

SELECT e.ename
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
25
FROM emp e
WHERE empno IN ( SELECT empno
FROM emp
WHERE mgr=e.empno
);
rem ; no rows selected


-------------------------------------------------------------------------------

REM ; pzggoj.sgl

REM , Escribe unc consultc pcrc encontrcr c todos los emplecdos que
REM , cncn mcs del sclcrio medio en su depcrtcmento. Muestrc
REM , el nmero de emplecdo, sclcrio, nmero de depcrtcmento
REM , sclcrio medio pcrc el depcrtcmento. Drdenc por sclcrio medio.

SELECT e.ename, e.sal SALARY, e.deptno, AVG(w.sal) "DEPT_AVG"
FROM emp e, emp w
WHERE e.sal > ( SELECT AVG(sal)
FROM emp
WHERE deptno=e.deptno
GROUP BY deptno
)
AND
w.deptno=e.deptno
GROUP BY e.ename, e.sal, e.deptno
ORDER BY AVG(w.sal)
;

REM ; ENAME SALARY DEPTNO DEPT_AVG
REM ; ---------- --------- --------- ---------
REM ; ALLEN 1600 30 1566.6667
REM ; BLAKE 2850 30 1566.6667
REM ; JONES 2975 20 2175
REM ; FORD 3000 20 2175
REM ; SCOTT 3000 20 2175
REM ; KING 5000 10 2916.6667
REM ;
REM ; 6 rows selected.

-------------------------------------------------------------------------------

REM ; pzggoq.sgl

REM , Escribe unc consultc pcrc mostrcr los emplecdos que cncn menos
REM , que lc mitcd del sclcrio medio en su depcrtcmento.

SELECT ename
FROM emp e
WHERE sal < ( SELECT AVG(sal)/2
FROM emp
WHERE deptno=e.deptno
)
;

REM ; ENAME
REM ; ----------
REM ; SMITH
REM ; MILLER

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
26
-------------------------------------------------------------------------------

REM ; pzggog.sgl

REM , Escribe unc consultc pcrc mostrcr los emplecdos que tienen uno
REM , o mcs compceros en su depcrtcmento con jechcs de contrcto
REM , posteriores pero sclcrios mcs cltos.

SELECT ename
FROM emp e
WHERE EXISTS ( SELECT ename
FROM emp
WHERE e.deptno = deptno
AND
hiredate > e.hiredate
AND
sal > e.sal
)
;

REM ; ENAME
REM ; ----------
REM ; CLARK
REM ; JONES
REM ; ALLEN
REM ; WARD
REM ; SMITH


































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
27
PRACTICA q


REM ; ppgo1.sgl

REM , Ejecutc el script \LAS\lcbp_:.sql pcrc construir lc tcblc MY_EMPLDYEE
REM , que serc uscdc pcrc el 'lcb'.

REM , Lc tcblc c estc crecdc en lc bcse de dctos, pero el comcndo se
REM , ejecutcrc con el siuiente comcndo SQLPLUS:
REM , SQL>START \LAS\lcbp_:.sql

-------------------------------------------------------------------------------

REM ; ppgoz.sgl

REM , Describc lc estructurc de lc tcblc MY_EMPLDYEE pcrc identijiccr
REM , los nombres de lcs columncs.

REM , Los nombres de lcs columncs son ID, LAST_NAME, IIRST_NAME,
REM , USERID SALARY.

-------------------------------------------------------------------------------

REM ; ppgoj.sgl

REM , Acde lc primerc jilc de dctos c lc tcblc MY_EMPLDYEE del ejemplo
REM , de dctos siuiente. No listes lcs columncs en lc clcusulc INSERT.

INSERT INTO my_employee
VALUES (1, 'Patel', 'Ralph', 'rpatel', 795)
;

-------------------------------------------------------------------------------

REM ; ppgoq.sgl

REM , Acde c lc tcblc MY_EMPLDYEE con los dctos de lc seundc jilc
REM , de lc tcblc de ejemplo del ejercicio cnterior. Estc tez, listc
REM , explcitcmente lcs columncs en lc clcusulc SELECT.

INSERT INTO my_employee (id, last_name, first_name, userid, salary)
VALUES (2, 'Dancs', 'Betty', 'bdancs', 860)
;

-------------------------------------------------------------------------------

REM ; ppgog.sgl

REM , Conjirmc tu cdicin c lc tcblc.

SELECT *
FROM MY_EMPLOYEE
;

REM ; ID LAST_NAME FIRST_NAME
USERID SALARY
REM ; --------- ------------------------- ------------------------- --
------ ---------
REM ; 1 Patel Ralph
rpatel 795
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
28
REM ; 2 Dancs Betty
bdancs 860

-------------------------------------------------------------------------------

REM ; ppgoo.sgl , loodemp.sgl

REM , Crec un script llcmcdo locdemp.sql pcrc ccrcr lcs jilcs en lc
REM , tcblc MY_EMPLDYEE intercctitcmente. Preuntc cl usucrio por el
REM , nombre de emplecdo, cpellido sclcrio. Concctenc lc primerc
REM , letrc del primer nombre los primeros siete ccrccteres del
REM , cpellido pcrc producir el USERID.

ACCEPT _id PROMPT 'Nmero de empleado:'
ACCEPT _last_name PROMPT 'Ultimo nombre:'
ACCEPT _first_name PROMPT 'Primer nombre:'
ACCEPT _salary PROMPT 'Salario:'

INSERT INTO my_employee(id,last_name,first_name,userid,salary)
VALUES (&_id, '&_last_name', '&_first_name',
LOWER(TO_CHAR(SUBSTR('&_first_name',1,1)) ||
SUBSTR('&_last_name',1,7)),
&_salary)
;

-------------------------------------------------------------------------------

REM ; ppgoS.sgl

REM , Conjirmc tus cdiciones c lc tcblc.

SELECT *
FROM MY_EMPLOYEE
;

REM ; ID LAST_NAME FIRST_NAME
USERID SALARY
REM ; --------- ------------------------- ------------------------- --
------ ---------
REM ; 1 Patel Ralph
rpatel 795
REM ; 2 Dancs Betty
bdancs 860
REM ; 3 Biri Ben
bbiri 1100
REM ; 4 Newman Chad
cnewman 750

-------------------------------------------------------------------------------

REM ; ppgop.sgl

REM , Hcz que lcs cdiciones de dctos secn permcnentes.

COMMIT;

-------------------------------------------------------------------------------

REM ; ppg1o.sgl

REM , Ccmbic el cpellido del emplecdo c Dexter.
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
29

UPDATE my_employee
SET last_name='Dexter'
WHERE id=3
;

-------------------------------------------------------------------------------

REM ; ppg11.sgl

REM , Ccmbic el sclcrio c :ooo pcrc todos los emplecdos con un sclcrio
REM , menor c poo$.

UPDATE my_employee
SET salary=1000
WHERE salary<900
;

-------------------------------------------------------------------------------

REM ; ppg1z.sgl

REM , Verijicc los ccmbios c lc tcblc.

SELECT last_name, salary
FROM my_employee
;

REM ; LAST_NAME SALARY
REM ; ------------------------- ---------
REM ; Patel 1000
REM ; Dancs 1000
REM ; Dexter 1100
REM ; Newman 1000

-------------------------------------------------------------------------------

REM ; ppg1j.sgl

REM , orrc c ett Dcncs de lc tcblc MY_EMPLDYEE

DELETE FROM my_employee
WHERE UPPER(first_name)='BETTY'
AND
UPPER(last_name)='DANCS'
;

-------------------------------------------------------------------------------

REM ; ppg1q.sgl

REM , Conjirmc tus ccmbios c lc tcblc.

SELECT *
FROM my_employee
;

REM ; ID LAST_NAME FIRST_NAME
USERID SALARY
REM ; --------- ------------------------- ------------------------- --
------ ---------
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
30
REM ; 1 Patel Ralph
rpatel 1000
REM ; 3 Dexter Ben
bbiri 1100
REM ; 4 Newman Chad
cnewman 1000

-------------------------------------------------------------------------------

REM ; ppg1g.sgl

REM , Compromete todos los ccmbios pendientes

COMMIT
;

-------------------------------------------------------------------------------

REM ; ppg1;.sgl

REM , Conjirmc tus cdiciones c lc tcblc.

SELECT *
FROM my_employee
;

REM ; ID LAST_NAME FIRST_NAME
USERID SALARY
REM ; --------- ------------------------- ------------------------- --
------ ---------
REM ; 5 Ropeburn Audry
aropebur 1550
REM ; 1 Patel Ralph
rpatel 1000
REM ; 3 Dexter Ben
bbiri 1100
REM ; 4 Newman Chad
cnewman 1000

-------------------------------------------------------------------------------

REM ; ppg1S.sgl

REM , Mcrcc un punto intermedio en el proceso de lc trcnscccin.

SAVEPOINT salvado;

-------------------------------------------------------------------------------

REM ; ppg1p.sgl

REM , orrc lc tcblc completcmente.

DELETE FROM my_employee
;

-------------------------------------------------------------------------------

REM ; ppgzo.sgl

REM , Conjirmc que lc tcblc estc tccc.
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
31

SELECT *
FROM my_employee
;

REM ; no rows selected

-------------------------------------------------------------------------------

REM ; ppgz1.sgl

REM , Desccrtc lc operccion DELETE mcs reciente sin desccrtcr lc operccin
REM , INSERT mcs cerccnc.

ROLLBACK TO salvado;

-------------------------------------------------------------------------------

REM ; ppgzz.sgl

REM , Conjirmc que lc nuetc jilc permcnece intcctc.

SELECT *
FROM my_employee
;

REM ; ID LAST_NAME FIRST_NAME
USERID SALARY
REM ; --------- ------------------------- ------------------------- --
------ ---------
REM ; 5 Ropeburn Audry
aropebur 1550
REM ; 1 Patel Ralph
rpatel 1000
REM ; 3 Dexter Ben
bbiri 1100
REM ; 4 Newman Chad
cnewman 1000

-------------------------------------------------------------------------------

REM ; ppgzj.sgl

REM , Hcz lc cdicin de dctos permcnente.

COMMIT;















Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
32
PRACTICA 1o

REM ; p1ogo1.sgl

REM , Crec lc tcblc DEPARTMENT bcscdc en lc tcblc dcdc cbcjo. Escribe el script
REM , en un crchito llcmcdo p:oq:.sql, lueo ejecutc el script pcrc crecr lc
REM , tcblc. Conjirmc que lc tcblc estc crecdc.

CREATE TABLE DEPARTMENT
( ID NUMBER(7),
NAME VARCHAR(25)
)
;

DESC department;

REM ; Name Null? Type
REM ; ------------------------------- -------- ----
REM ; ID NUMBER(7)
REM ; NAME VARCHAR2(25)

-------------------------------------------------------------------------------

REM ; p1ogoz.sgl

REM , Rellenc lc tcblc DEPARTMENT con los dctos de lc tcblc DEPT. Inclue
REM , solo lcs columncs que necesites.

INSERT INTO department(id,name)
SELECT deptno, dname
FROM dept
;

-------------------------------------------------------------------------------

REM ; p1ogoj.sgl

REM , Crec lc tcblc EMPLDYEE bcscdc en lc tcblc dcdc cbcjo. Escribe el script
REM , en un crchito llcmcdo p:oqo.sql, lueo ejecutc el script pcrc crecr lc
REM , tcblc. Conjirmc que lc tcblc estc crecdc.

CREATE TABLE employee
( ID NUMBER(7),
LAST_NAME VARCHAR2(25),
FIRST_NAME VARCHAR2(25),
DEPT_ID NUMBER(7)
)
;
DESC employee;

REM ; Name Null? Type
REM ; ------------------------------- -------- ----
REM ; ID NUMBER(7)
REM ; LAST_NAME VARCHAR2(25)
REM ; FIRST_NAME VARCHAR2(25)
REM ; DEPT_ID NUMBER(7)

-------------------------------------------------------------------------------

REM ; p1ogoq.sgl

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
33
REM , Modijicc lc tcbnlc EMPLDYEE pcrc permitir nombres de emplecdo
REM , mcs lcros. Conjirmc tus modijiccciones.

ALTER TABLE employee
MODIFY ( last_name VARCHAR2(50))
;
DESC employee;

REM ; Name Null? Type
REM ; ------------------------------- -------- ----
REM ; ID NUMBER(7)
REM ; LAST_NAME VARCHAR2(50)
REM ; FIRST_NAME VARCHAR2(25)
REM ; DEPT_ID NUMBER(7)

-------------------------------------------------------------------------------

REM ; p1ogog.sgl

REM , Conjirmc que cmbcs tcblcs, EMPLDYEE DEPARTMENT, estcn clmccencdcs
REM , en el diccioncrio de dctos (Notc: USER_TALES)

SELECT table_name
FROM user_tables
;

REM ; TABLE_NAME
REM ; ------------------
REM ; BONUS
REM ; CUSTOMER
REM ; DEPARTMENT
REM ; DEPT
REM ; DUMMY
REM ; EMP
REM ; EMPLOYEE
REM ; EMP_HISTORY
REM ; ITEM
REM ; MESSAGES
REM ; MY_EMPLOYEE
REM ; ORD
REM ; PRICE
REM ; PRODUCT
REM ; SALGRADE
REM ; TOP_DOGS
REM ;
REM ; 16 rows selected.

-------------------------------------------------------------------------------

REM ; p1ogoo.sgl

REM , Crec lc tcblc EMPLDYEEz bcscdc en lc estructurc de lc tcblc EMP,
REM , inclue solo lcs columncs EMPND, ENAME DEPTND. Nombrc lcs columncs
REM , en tu nuetc tcblc como ID, LAST_NAME DEPT_ID, respectitcmente.

CREATE TABLE employee2(id,last_name,dept_id)
AS
SELECT empno, ename, deptno
FROM emp
;

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
34
REM ; Name Null? Type
REM ; ------------------------------- -------- ----
REM ; ID NOT NULL NUMBER(4)
REM ; LAST_NAME VARCHAR2(10)
REM ; DEPT_ID NOT NULL NUMBER(2)

-------------------------------------------------------------------------------

REM ; p1ogo;.sgl

REM , orrc lc tcblc EMPLDYEE.

DROP TABLE employee
;

-------------------------------------------------------------------------------

REM ; p1ogoS.sgl

REM , Renombrc lc tcblc EMPLDYEEz c EMPLDYEE.

RENAME employee2 TO employee
;

-------------------------------------------------------------------------------

REM ; p1ogop.sgl

REM , Acde comentcrios c lcs dejiniciones de lcs tcblcs DEPARTMENT
REM , EMPLDYEE describiendo lcs tcblcs. Conjirmc tus cdiciones
REM , en el diccioncrio de dctos.

COMMENT ON TABLE department
IS 'Esta es la tabla de departamentos'
;

COMMENT ON TABLE employee
IS 'Esta es la tabla de empleados'
;

SELECT *
FROM all_tab_comments
WHERE table_name='EMPLOYEE' OR table_name='DEPARTMENT'
;

REM ; OWNER TABLE_NAME
TABLE_TYPE
REM ; ------------------------------ ------------------------------ --
---------
REM ; COMMENTS
REM ; ----------------------------------------------------------------
----------
REM ; I22RETOA DEPARTMENT
TABLE
REM ; Esta es la tabla de departamentos
REM ;
REM ; I22RETOA EMPLOYEE
TABLE
REM ; Esta es la tabla de empleados


Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
35
PRACTICA 11

REM ; p11go1.sgl

REM , Acde unc restriccin de PRIMARY_KEY c nitel de tcblc en lc tcblc
REM , EMPLDYEE, uscndo lc columnc ID. Lc restriccin deberc ser cctitc
REM , en lc creccin.

ALTER TABLE employee
ADD CONSTRAINT employee_pk PRIMARY KEY (ID)
;

-------------------------------------------------------------------------------

REM ; p11goz.sgl

REM , Crec unc restriccin PRIMARY KEY en lc tcblc DEPARTMENT uscndo
REM , lc columnc ID. Lc restriccin deberc ser cctitc en lc creccin.

ALTER TABLE department
ADD CONSTRAINT department_id_pk PRIMARY KEY (ID)
;

-------------------------------------------------------------------------------

REM ; p11goj.sgl

REM , Acde unc rejerencic de clcte jorcnec c lc tcble EMPLDYEE que cseure
REM , que el emplecdo no es csincdo c un depcrtcmento inexistente.

ALTER TABLE employee
ADD CONSTRAINT dept_id_fk FOREIGN KEY (dept_id) REFERENCES
department (id)
;

-------------------------------------------------------------------------------

REM ; p11goq.sgl

REM , Conjirmc que lcs restricciones jueron ccdidcs consultcdo
REM , USER_CDNSTRAINTS. Notc los tipos nombres de lcs restricciones.
REM , Gucrdc el texto de tu sentencic en un jichero llcmcdo p::qo(.sql

SELECT constraint_name, constraint_type
FROM user_constraints
;

-------------------------------------------------------------------------------

REM ; p11gog.sgl

REM , Muestrc los nombres de objeto tipos de lcs tistcs de lcs tcblcs
REM , EMPLDYEE DEPARTMENT del diccioncrio de dctos USER_D1ECTS.
REM , Deberics jormctecr lcs columncs pcrc unc mcor leibilidcd.
REM , Ijcte que lcs nuetcs tcblcs e indices jueron crecdos.

COLUMN object_name HEADING 'OBJECT_NAME' FORMAT A15
COLUMN object_type HEADING 'OBJECT_TYPE' FORMAT A15
SELECT object_name, object_type
FROM user_objects
WHERE object_name='EMPLOYEE' or object_name='DEPARTMENT'
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
36
;
COLUMN object_name CLEAR
COLUMN object_type CLEAR

-------------------------------------------------------------------------------

REM ; p11goo.sgl

REM , Modijicc lc tcblc EMPLDYEE. Acde unc columnc SALARY de tipo
REM , de dcto NUMER con precisin ;.

ALTER TABLE employee
ADD ( salary NUMBER(7))
;















































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
37
PRACTICA 1

REM ; p1zgo1.sgl

REM , Crec unc tistc llcmcdc EMP_VU de los ccmpos nmero de emplecdo,
REM , nombre de emplecdo nmero de depcrtcmento de lc tcblc EMP.
REM , Ccmbic lc ccbecerc del nombre de emplecdo por EMPLDYEE.

CREATE VIEW emp_vu(empno, employee, deptno)
AS
SELECT empno, ename, deptno
FROM emp
;

-------------------------------------------------------------------------------

REM ; p1zgoz.sgl

REM , Muestrc el contenido de lc tistc EMP_VU.

SELECT *
FROM emp_vu
;

REM ; EMPNO EMPLOYEE DEPTNO
REM ; --------- ---------- ---------
REM ; 7839 KING 10
REM ; 7698 BLAKE 30
REM ; 7782 CLARK 10
REM ; 7566 JONES 20
REM ; 7654 MARTIN 30
REM ; 7499 ALLEN 30
REM ; 7844 TURNER 30
REM ; 7900 JAMES 30
REM ; 7521 WARD 30
REM ; 7902 FORD 20
REM ; 7369 SMITH 20
REM ; 7788 SCOTT 20
REM ; 7876 ADAMS 20
REM ; 7934 MILLER 10
REM ; 8000 DOE 10
REM ;
REM ; 15 rows selected.

-------------------------------------------------------------------------------

REM ; p1zgoj.sgl

REM , Seleccionc tieu_ncme text del diccioncrio de dctos USER_VIEWS.

SELECT view_name, text
FROM user_views
;

REM ; VIEW_NAME
REM ; ------------------------------
REM ; TEXT
REM ; ----------------------------------------------------------------
-
REM ; EMP_VU
REM ; SELECT empno, ename, deptno
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
38
REM ; FROM emp
REM ;
REM ;
REM ; SALES
REM ; SELECT REPID, ORD.CUSTID, CUSTOMER.NAME CUSTNAME,
PRODUCT.PRODID,
REM ; DESCRIP PRODNA

-------------------------------------------------------------------------------

REM ; p1zgoq.sgl

REM , Uscndo tu tistc EMP_VU, insertc unc consultc pcrc mostrcr los nombres
REM , nmero de depcrtcmento de todos los emplecdos.

SELECT employee, deptno
FROM emp_vu
;

REM ; EMPLOYEE DEPTNO
REM ; ---------- ---------
REM ; KING 10
REM ; BLAKE 30
REM ; CLARK 10
REM ; JONES 20
REM ; MARTIN 30
REM ; ALLEN 30
REM ; TURNER 30
REM ; JAMES 30
REM ; WARD 30
REM ; FORD 20
REM ; SMITH 20
REM ; SCOTT 20
REM ; ADAMS 20
REM ; MILLER 10
REM ; DOE 10
REM ;
REM ; 15 rows selected.

-------------------------------------------------------------------------------

REM ; p1zgog.sgl

REM , Crec unc tistc llcmcdc DEPTzo que contenc el nmero de emplecdo,
REM , nombre de emplecdo nmero de depcrtcmento pcrc todos los emplecdos
REM , del depcrtcmento nmero zo. Etiquetc lcs columncs de lc tistc
REM , EMPLDYEE_ID, EMPLDYEE DEPARTMENT_ID. No permitcs que un emplecdo
REM , sec recsincdo c otro depcrtcmento c trctes de lc tistc.

CREATE VIEW dept20(employee_id, employee, department_id)
AS
SELECT empno, ename, deptno
FROM emp
WHERE deptno=20
WITH READ ONLY
;

-------------------------------------------------------------------------------

REM ; p1zgoo.sgl

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
39
REM , Muestrc lc estructurc contenidos de lc tistc DEPTzo.

DESC dept20

REM ; Name Null? Type
REM ; ------------------------------- -------- ----
REM ; EMPLOYEE_ID NOT NULL NUMBER(4)
REM ; EMPLOYEE VARCHAR2(10)
REM ; DEPARTMENT_ID NOT NULL NUMBER(2)

SELECT *
FROM dept20
;

REM ; EMPLOYEE_ID EMPLOYEE DEPARTMENT_ID
REM ; ----------- ---------- -------------
REM ; 7566 JONES 20
REM ; 7902 FORD 20
REM ; 7369 SMITH 20
REM ; 7788 SCOTT 20
REM ; 7876 ADAMS 20

-------------------------------------------------------------------------------

REM ; p1zgo;.sgl

REM , Intentc recsincr c Smith cl depcrtcmento o.

UPDATE dept20
SET department_id=30
WHERE UPPER(employee)='SMITH'
;

REM ; SET department_id=30
REM ; *
REM ; ERROR at line 2:
REM ; ORA-01733: virtual column not allowed here

-------------------------------------------------------------------------------

REM ; p1zgoS.sgl

REM , Crec unc tistc llcmcdc SALARY_VU bcscdc en el nombre de emplecdo,
REM , nombre de depcrtcmento, sclcrio rcdo sclcricl pcrc todos los
REM , emplecdos. Etiquetc lcs columncs Emploee, Depcrtment, Sclcr
REM , Grcde, respectitcmente.

CREATE VIEW salary_vu(employee, department, salary, grade)
AS
SELECT e.ename, e.deptno, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal
;

REM ; EMPLOYEE DEPARTMENT SALARY GRADE
REM ; ---------- ---------- --------- ---------
REM ; JAMES 30 950 1
REM ; SMITH 20 800 1
REM ; ADAMS 20 1100 1
REM ; MARTIN 30 1250 2
REM ; WARD 30 1250 2
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
40
REM ; MILLER 10 1300 2
REM ; ALLEN 30 1600 3
REM ; TURNER 30 1500 3
REM ; BLAKE 30 2850 4
REM ; CLARK 10 2450 4
REM ; JONES 20 2975 4
REM ; FORD 20 3000 4
REM ; SCOTT 20 3000 4
REM ; KING 10 5000 5
REM ;
REM ; 14 rows selected.


















































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
41
PRACTICA 1

REM ; p1jgo1.sgl

REM , Crec unc secuencic pcrc ser uscdc con lc clcte principcl de lc primerc
REM , columnc de lc tcblc DEPARTMENT. Lc secuencic deberc comenzcr en o
REM , tener un tclor mcximo de zoo. Hcz que tu secuencic se incremente
REM , de diez en diez. Llcmc c lc secuencic DEPT_ID_SEQ.

CREATE SEQUENCE dept_id_seq


INCREMENT BY 10
START WITH 60
MAXVALUE 200
;

-------------------------------------------------------------------------------

REM ; p1jgoz.sgl

REM , Escribe un script pcrc mostrcr lc siuiente injormccin ccercc de
REM , tus secuencics: nombre de secuencic, tclor mcximo, tcmco de
REM , incremento ltimo nmero. Llcmc cl script p:qoz.sql. Ejecutclo.

SELECT sequence_name, max_value, increment_by, last_number
FROM user_sequences
;

REM ; SEQUENCE_NAME MAX_VALUE INCREMENT_BY
LAST_NUMBER
REM ; ------------------------------ --------- ------------ ----------
-
REM ; CUSTID 1.000E+27 1
109
REM ; DEPT_ID_SEQ 200 10
60
REM ; ORDID 1.000E+27 1
622
REM ; PRODID 1.000E+27 1
200381

-------------------------------------------------------------------------------

REM ; p1jgoj.sgl

REM , Escribe un script intercctito pcrc insertcr unc jilc en lc tcblc
REM , DEPARTMENT. Llcmc c tu script p:qo.sql. Aseurcte de que uscs
REM , lc secuencic crecdc pcrc lc columnc ID. Crec un propmt customizcdo
REM , pcrc entrcr el nombre de depcrtcmento. Ejecutc el script. Acde
REM , dos nuetos depcrtcmentos llcmcdos Educction Administrction.
REM , Conjirmc tus ccdidos.

ACCEPT _dept_name PROMPT "Nombre del departamento:"

INSERT INTO department(id, name)
VALUES
(dept_id_seq.nextval , '&_dept_name')
;

SELECT * FROM department ORDER BY id;

REM ; ID NAME
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
42
REM ; --------- -------------------------
REM ; 10 ACCOUNTING
REM ; 20 RESEARCH
REM ; 30 SALES
REM ; 40 OPERATIONS
REM ; 60 Education
REM ; 70 Administration
REM ;
REM ; 6 rows selected.

-------------------------------------------------------------------------------

REM ; p1jgoq.sgl

REM , Crec un ndice no nico pcrc lc colmnc clcte jorcnec en lc
REM , tcblc EMPLDYEE.

CREATE INDEX employee_dept_id_idx
ON employee(dept_id)
;

-------------------------------------------------------------------------------

REM ; p1jgog.sgl

REM , Muestrc los ndices nicos que existcn en el diccioncrio de dctos
REM , pcrc lc tcblc EMPLDYEE. Grcbc lc sentencic en un script llcmcdo p:qo.sql

SELECT index_name, table_name, uniqueness
FROM user_indexes
WHERE table_name='EMPLOYEE'
;

REM ; INDEX_NAME TABLE_NAME
UNIQUENES
REM ; ------------------------------ ------------------------------ --
-------
REM ; EMPLOYEE_DEPT_ID_IDX EMPLOYEE
NONUNIQUE
REM ; EMPLOYEE_PK EMPLOYEE
UNIQUE




















Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
43
PRACTICA 16

REM ; p1ogo1.sgl

REM , Etcluc ccdc unc de lcs siuientes declcrcciones. Determinc cucles
REM , de ellcs no son lecles explicc por que.

REM , c) DECLARE
REM , t_id NUMER((),
REM , LEGAL

REM , b) DECLARE
REM , t_x, t_, t_z VARCHARz(:o),
REM , ILEGAL: solo unc tcricble por lnec

REM , c) DECLARE
REM , t_birthdcte DATE NDT NULL,
REM , ILEGAL: se debe especijiccr un tclor por dejecto, c que no puede ser NULL

REM , d) DECLARE
REM , t_in_stocl DDLEAN := :,
REM , ILEGAL: : no es un tclor boolecno (TRUE, IALSE, NULL)

REM , e) DECLARE
REM , TYPE ncme_tcble_tpe IS TALE DI VARCHARz(zo)
REM , INDEX Y INARY_INTEGER,
REM , dept_ncme_tcble ncme_tcble_tpe,
REM , LEGAL

-------------------------------------------------------------------------------

REM ; p1ogoz.sgl

REM , En ccdc unc de lcs siuientes csincciones, determinc el tipo de
REM , de dcto resultcnte de lc expresin.

REM , c) t_dcs_to_o := t_due_dcte - SYSDATE,
REM , DATE

REM , b) t_sender := USER ]] ': ' ]] TD_CHAR(t_dept_no),
REM , VARCHARz

REM , c) t_sum := $:oo,ooo + $zo,ooo,
REM , NUMER

REM , d) t_jlc := TRUE,
REM , DDLEAN

REM , e) t_n: := t_nz > (z t_n),
REM , DDLEAN

REM , j) t_tclue := NULL,
REM , NULL

-------------------------------------------------------------------------------

REM ; p1ogoj.sgl

REM , Crec un bloque cnnimo que produzcc lc sclidc:
REM , "M PL,SQL locl Worls" c lc pcntcllc.

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
44
VAR g_message VARCHAR2(30);
BEGIN
:g_message:='My PL/SQL Block Works';
END;
/
print g_message


-------------------------------------------------------------------------------

REM ; p1ogoq.sgl

REM , Crec un bloque que declcre dos tcricbles. Asinc el tclor de escs
REM , tcricbles PL,SQL c tcricbles host de SQLPLUS e imprime los
REM , resultcdos de lcs tcricbles PL,SQL en pcntcllc. Ejecutc tu bloque
REM , PS,SQL. Grcbc tu bloque PL,SQL c un jichero llcmcdo p:qo(.sql

VAR g_char VARCHAR2(16);
VAR g_num NUMBER;
DECLARE
v_char VARCHAR2(16);
v_num NUMBER(2);
BEGIN
v_char := '42 is the answer';
v_num := TO_NUMBER(SUBSTR(v_char,1,2));
:g_char := v_char;
:g_num := v_num;
END;
/
print g_char
print g_num






























Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
45
PRACTICA 1,

REM ; p1;go1.sgl

loque PL,SQL:

DECLARE
v_weight NUMBER(3) := 600;
v_message VARCHAR2(255) := 'Product 10012';
BEGIN
DECLARE
v_weight NUMBER(3)
v_message VARCHAR2(255) := 'Product 11001';
v_new_locn VARCHAR2(50) := 'Europe';
BEGIN
v_weight := v_weight + 1;
v_new_locn := 'Western ' || v_new_locn;
END;
v_weight := v_weight + 1;
v_message := v_message || ' is in stock';
v_new_locn := 'Western ' || v_new_locn;
END;

Etclucc el bloque PL,SQL determinc ccdc uno de los tclores de
ccuerdo con lcs relcs de clccnce.

c) El tclor de V_WEIGHT en el subbloque es: :
b) El tclor de V_NEW_LDCN en el subbloque es: 'Western Europe'
c) El tclor de V_WEIGHT en el bloque principcl es: o:
d) El tclor de V_MESSAGE en el bloque principcl es: 'Product ::oo::'
e) El tclor de V_NEW_LDCN en el bloque principcl es: no estc dejinidc

-------------------------------------------------------------------------------

RIM ; p1,qo.sql

Ejemplo de clccnce:
DECLARE
v_customer VARCHAR(50) := 'Womansport';
v_credit_rating VARCHAR2(50) := 'EXCELLENT';
BEGIN
DECLARE
v_customer NUMBER(7) := 201;
v_name VARCHAR2(25) := 'Unisports';
BEGIN
(v_customer) (v_name) (v_credit_rating)
END;
(v_customer) (v_name) (v_credit_rating)
END;

Supon que metes un subbloque dentro de un bloque, como se muestrc en el ejemplo.
Declcrcs dos tcricbles, V_CUSTDMER V_CREDIT_RATING, en el bloque principcl.
Debes declcrcr dos tcricbles, V_CUSTDMER V_NAME en el subbloque. Determinc los
tclores pcrc ccdc uno de los ccsos siuientes:

c) El tclor de V_CUSTDMER en el subbloque es: zo:
b) El tclor de V_NAME en el subbloque es: 'Unisports'
c) El tclor de V_CREDIT_RATING en el subbloque es: 'EXCELLENT'
d) El tclor de V_CUSTDMER en el bloque principcl es: 'Womcnsport'
e) El tclor de V_NAME en el bloque principcl es: No estc dejinidc
j) El tclor de V_CREDIT_RATING en el bloque principcl es: 'EXCELLENT'
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
46

-------------------------------------------------------------------------------

REM ; p1;goj.sgl

REM , Crec ejecutc un bloque PL,SQL que ccepte dos nmeros c trctes
REM , de lc sustitucin de tcricbles SQLPLUS. El primer nmero deberc
REM , ser ditidido por el seundo nmero el seundo sumcdo cl resultcdo.
REM , El resultcdo debe ser escrito c unc tcricble PL,SQL ser imprimido
REM , por pcntcllc.

SET verify OFF
VAR g_num1 NUMBER;
VAR g_num2 NUMBER;
VAR v_result NUMBER;
ACCEPT g_num1 PROMPT 'Please enter the first number:'
ACCEPT g_num2 PROMPT 'Please enter the second number:'
DECLARE
v_num1 NUMBER(2) := &g_num1;
v_num2 NUMBER(2) := &g_num2;
BEGIN
:v_result := (v_num1 / v_num2) + v_num2;
END;
/
print v_result
SET verify ON

-------------------------------------------------------------------------------

REM ; p1;goq.sgl

REM , Construe un bloque PL,SQP que computc el totcl de lc compensccin cnucl.
REM , El sclcrio cnucl el porcentcje de extrc cnucl son pcscdos cl bloque
REM , PL,SQL c trctes de tcricbles de sustitucin de SQLPlus el extrc
REM , necesitc ser contertido desde un nmero entero c un decimcl (por ejemplo,
REM , : c .:). Si el sclcrio es nulo, ponlo c cero cntes de computcr lc
REM , compensccin totcl. Ejecutc el bloque PL,SQL. Recordctorio: usc lc
REM , juncin NVL pcrc mcnejcr tclores nulos.
REM , Notc: Pcrc probcr lc juncin NVL escribe NULL en el prompt, presioncr
REM , [RETURN] enerc un error de expresin perdidc.

SET verify OFF
VAR g_anual NUMBER;
VAR g_extra NUMBER;
VAR g_total NUMBER;
ACCEPT g_anual PROMPT 'Salario anual:'
ACCEPT g_extra PROMPT 'Porcentaje extra:'
DECLARE
v_anual NUMBER(8) := NVL(&g_anual,0);
v_extra NUMBER(8) := (&g_extra/100)*v_anual;
BEGIN
:g_total := v_anual + v_extra;
END;
/
print g_total
SET verify ON





Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
47
PRACTICA 1S

REM ; p1Sgo1.sgl

REM , Crec un bloque PL,SQL que seleccione el nmero mcximo de depcrtcmento
REM , en lc tcblc DEPT lo ucrde en unc tcricble SQLPlus. Imprime el
REM , resultcdo en pcntcllc.

SET verify OFF
VAR g_max_deptno NUMBER;
BEGIN
SELECT MAX(deptno)
INTO :g_max_deptno
FROM dept;
END;
/
print g_max_deptno
SET verify ON

REM ; G_MAX_DEPTNO
REM ; ------------
REM ; 40

-------------------------------------------------------------------------------

REM ; p18q2.sql

REM , Crec un bloque PL,SQL que inserte un nueto depcrtcmento en lc tcblc DEPT.
REM , c) Usc el nmero de depcrtcmento recoido del ejercicio : sumcle :o
REM , c ese nmero como entrcdc de nmero de depcrtcmento pcrc el nueto.
REM , b) Usc un pcrcmetro pcrc el nombre de depcrtcmento.
REM , c) Dejc lc locclizccin como nulc por chorc.
REM , d) Ejecutc el bloque PL,SQL.

SET verify OFF
VAR g_dept_name VARCHAR2;
ACCEPT g_dept_name PROMPT 'Nombre de departamento:'
DELCLARE
g_deptno dept.deptno%TYPE;
BEGIN
SELECT MAX(deptno)
INTO g_deptno
FROM dept;

INSERT INTO dept(deptno, dname)
VALUES (g_deptno+10, UPPER('&g_dept_name'));
END;
/
SET verify ON

REM , e) Muestrc el nueto depcrtcmento que hcs crecdo.

SELECT *
FROM dept
WHERE deptno=50;

-------------------------------------------------------------------------------

REM ; p1Sgoj.sgl

REM , Crec un bloque PL,SQL que cctuclice lc locclizccin de un depcrtcmento
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
48
REM , existente.
REM , c) Usc un pcrcmetro pcrc el nmero de depcrtcmento.
REM , b) Usc un pcrcmetro pcrc lc locclizccin de depcrtcmento.
REM , c) Pruebc el bloque PL,SQL.
REM , d) Muestrc el nmero de depcrtcmento, nombre locclizccin pcrc
REM , el depcrtcmento cctuclizcdo.
REM , e) Muestrc el depcrtcmento que hcs cctuclizcdo.

SET verify OFF
VAR g_deptno NUMBER;
VAR g_dept_loc VARCHAR2;
ACCEPT g_deptno PROMPT 'Nmero de departamento:'
ACCEPT g_dept_loc PROMPT 'Localizacin del departamento:'
BEGIN
UPDATE dept
SET loc='&g_dept_loc'
WHERE deptno=&g_deptno;
END;
/

SELECT deptno, dname, loc
FROM dept
WHERE deptno=&g_deptno;
SET verify ON

-------------------------------------------------------------------------------


REM ; p1Sgoq.sgl

REM , Crec un bloque PL,SQL que borre el depcrtcmento crecdo en el ejercicio z.
REM , c) Usc un pcrcmetro pcrc el nmero de depcrtcmento.
REM , b) Imprime en pcntcllc el nmero de columncs cjectcdcs.
REM , c) Pruebc el bloque PL,SQL.

SET verify OFF
VAR g_deptno NUMBER;
VAR g_result VARCHAR2(30);
ACCEPT g_deptno PROMPT 'Nmero de departamento:'
DECLARE
BEGIN
DELETE FROM dept
WHERE deptno=&g_deptno;
:g_result := TO_CHAR(SQL%ROWCOUNT) || ' filas borradas';
END;
/
print g_result
SET verify ON

REM ; Nmero de departamento:50
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; G_RESULT
REM ; ----------------------------------------
REM ; 1 filas borradas

REM , d) Que ocurre cucndo introduces un nmer de depcrtcmento que no existe?
REM ; Nmero de departamento:99
REM ;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
49
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; G_RESULT
REM ; -----------------------------------------
REM ; 0 filas borradas

REM , e) Conjirmc que el depcrtcmento hc sido borrcdo.
SELECT *
FROM dept
WHERE deptno=&g_deptno
;

REM ; no rows selected














































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
50
PRACTICA 1q

REM ; p1pgo1.sgl

REM , Ejecutc el script \LAS\lcb:p_:.sql pcrc crecr (YA ESTA CREADA) lc tcblc
REM , MESSAGES. Escribe un bloque PL,SQL pcrc insertcr nmeros en lc tcblc
REM , MESSAGES.

REM , c) Insertc los nmeros del : cl :o excluendo el el 8.
REM , b) CDMMIT despues del jin de bloque.

DECLARE
numero messages.results%TYPE := 0;
BEGIN
LOOP
numero := numero + 1;
EXIT WHEN numero = 6;
INSERT INTO messages(results)
VALUES (numero);
END LOOP;
INSERT INTO messages(results)
VALUES (7);
numero := 8;
LOOP
numero := numero + 1;
EXIT WHEN numero = 11;
INSERT INTO messages(results)
VALUES (numero);
END LOOP;
END;
/
COMMIT

REM , c) Seleccionc de lc tcbc MESSAGES pcrc terijiccr que tu bloque
REM , bloque PL,SQL juncion.

SELECT * FROM MESSAGES;

REM ; RESULTS
REM ; ------------------
REM ; 1
REM ; 2
REM ; 3
REM ; 4
REM ; 5
REM ; 7
REM ; 9
REM ; 10
REM ;
REM ; 8 rows selected.

-------------------------------------------------------------------------------

REM ; p1pgoz.sgl

REM , Crec un bloque PL,SQL que cclcule el porcentcje de lc comisin pcrc
REM , un emplecdo dcdo bcscdo en el sclcrio del emplecdo.

REM , c) Ejecutc el script LAS\lcb:p_z.sql pcrc insertcr un nueto emplecdo
REM , en lc tcblc EMP. Notc: el emplecdo tendrc un sclcrio NULD.
REM , YA ESTA CREADD ESTE USUARID, ND E1ECUTAR EL SCRIPT.
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
51

REM , b) Aceptc el nmero de emplecdo como unc entrcdc de usucrio con unc
REM , sustitucin de tcricble SQLPlus.
REM , c) Si el sclcrio del emplecdo es menor de $:.ooo, pon el porcentcje
REM , de comisin pcrc el emplecdo c un :o del sclcrio.
REM , d) Si el sclcrio del emplecdo estc entre $:.ooo $:.oo, pon el
REM , porcentcje de comisin pcrc el emplecdo c un : del sclcrio.
REM , e) Si el sclcrio del emplecdo excede $:.oo, pon el porcentcje de
REM , comisin pcrc el emplecdo c un zo del sclcrio.
REM , j) Si el sclcrio del emplecdo es NULL, pon el porcentcje de
REM , comisin c o.
REM , ) CDMMIT
REM , h) Pruebc el bloque PL,SQL pcrc ccdc ccso uscndo los siuientes
REM , ccsos de pruebc, compruebc ccdc cctuclizccin de comisin.

SET verify OFF
VAR g_codigo NUMBER;
ACCEPT g_codigo PROMPT 'Nmero de Empleado:'
DECLARE
v_comision emp.comm%TYPE;
v_salario emp.sal%TYPE;
v_codigo NUMBER := &g_codigo;
BEGIN
SELECT sal
INTO v_salario
FROM emp
WHERE empno = v_codigo;

IF v_salario < 1000 THEN
v_comision := v_salario * 0.10;
ELSIF v_salario < 1500 AND v_salario > 1000 THEN
v_comision := v_salario * 0.15;
ELSIF v_salario > 1500 THEN
v_comision := v_salario * 0.20;
ELSE
v_comision := 0;
END IF;

UPDATE emp
SET comm = v_comision
WHERE empno = v_codigo;

COMMIT;
END;
/

SET verify ON

SELECT empno, ename, sal, comm
FROM emp
WHERE comm IS NOT NULL;

REM ; Nmero de Empleado:8000
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; EMPNO ENAME SAL COMM
REM ; --------- ---------- --------- ---------
REM ; 7654 MARTIN 1250 1400
REM ; 7499 ALLEN 1600 320
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
52
REM ; 7844 TURNER 1500 0
REM ; 7521 WARD 1250 500
REM ; 7369 SMITH 800 80
REM ; 7934 MILLER 1300 195
REM ; 8000 DOE 0
REM ;
REM ; 7 rows selected.

-------------------------------------------------------------------------------

REM ; p1pgoj.sgl

REM , Modijicc p:qo(.sql pcrc insertcr el texto "Number is odd" or "Number
REM , is eten", dependiendo de si el tclor es pcr o impcr. En lc tcblc
REM , MESSAGES. Consultc lc tcblc MESSAGES pcrc determincr si tu bloque
REM , PL,SQL juncion.

VAR g_char VARCHAR2(16);
VAR g_num NUMBER;
DECLARE
v_char VARCHAR2(16);
v_num NUMBER(2);
BEGIN
v_char := '42 is the answer';
v_num := TO_NUMBER(SUBSTR(v_char,1,2));
IF MOD(v_num,2) = 0 THEN
v_char := 'Number is odd';
ELSE
v_char := 'Number is even';
END IF;
INSERT INTO messages(results)
VALUES (v_char);
END;
/

SELECT * FROM MESSAGES;

REM ; RESULTS
REM ; ----------------
REM ; 1
REM ; 2
REM ; 3
REM ; 4
REM ; 5
REM ; 7
REM ; 9
REM ; 10
REM ; Number is odd
REM ;
REM ; 9 rows selected.

-------------------------------------------------------------------------------

REM ; p1pgoq.sgl

REM , Acde unc nuetc columnc c lc tcblc EMP pcrc clmccencr csterscos().

ALTER TABLE emp
ADD (stars VARCHAR2(100));

DESC emp;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
53

REM ; Name Null? Type
REM ; ------------------------------- -------- ----
REM ; EMPNO NOT NULL NUMBER(4)
REM ; ENAME VARCHAR2(10)
REM ; JOB VARCHAR2(9)
REM ; MGR NUMBER(4)
REM ; HIREDATE DATE
REM ; SAL NUMBER(7,2)
REM ; COMM NUMBER(7,2)
REM ; DEPTNO NOT NULL NUMBER(2)
REM ; STARS VARCHAR2(100)

-------------------------------------------------------------------------------

REM ; p1pgog.sgl

REM , Crec un bloque PL,SQL que recompense cun emplecdo ccdiendo un
REM , csterisco in lc columnc STARS por ccdc $:oo del sclcrio del
REM , emplecdo. Redondec el sclcrio del emplecdo cl nmero entero
REM , mcs cerccno. Grcbc tu bloque c un jichero llcmcdo p:pqo.sql.
REM , c) Aceptc el ID del emplecdo como unc entrcdc con unc tcricble
REM , de sustitucin de SQLPlus.
REM , b) Iniciclizc unc tcricble conteniendo unc ccdenc de csteriscos.
REM , c) Acde un csterisco c lc ccdenc por ccdc $:oo del sclcrio. Por
REM , ejemplo, si el emplecdo tiene un sclcrio de $8oo, lc ccdenc
REM , deberc contener ocho csteriscos.
REM , d) Actuclizc lc columnc STARS pcr el emplecdo con su ccdenc
REM , de csteriscos.
REM , e) CDMMIT.
REM , j) Pruebc el bloque pcrc un emplecdo que no tenc sclcrio
REM , otro que si tenc.

SET verify OFF
VAR g_id NUMBER;
ACCEPT g_id PROMPT 'Nmero de empleado:'
DECLARE
v_cadena emp.stars%TYPE;
v_salario emp.sal%TYPE;
v_id emp.empno%TYPE := &g_id;
BEGIN
SELECT NVL(sal,0)
INTO v_salario
FROM emp
WHERE empno = v_id;

IF SQL%FOUND = TRUE THEN
FOR i IN 1..ROUND(v_salario/100) LOOP
v_cadena := v_cadena || '*';
END LOOP;
UPDATE emp
SET stars = v_cadena
WHERE empno = v_id;
END IF;

COMMIT;
END;
/
SET verify ON

REM , Ejecuto el script probcndo con el emplecdo ;p, ;8; el 8ooo
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
54
REM , el resultcdo es:

SELECT empno, ename, sal, stars
FROM emp
WHERE empno IN (7369,7876,8000)
;

REM ; EMPNO ENAME SAL STARS
REM ; --------- ---------- --------- --------------------
REM ; 8000 DOE
REM ; 7876 ADAMS 1100 ***********
REM ; 7369 SMITH 800 ********

-------------------------------------------------------------------------------















































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
55
PRACTICA 1

REM ; pz1go1.sgl

REM , Crec un bloque PL,SQL que determine un nmero de emplecdos
REM , con mcor sclcrio.
REM , c) Aceptc un nmero n como entrcdc de usucrio con un pcrcmetro
REM , de sustitucin de SQLPlus
REM , b) En un bucle, coe los nombres sclcrios de lcs n personcs
REM , con respecto cl sclcrio de lc tcblc EMP.
REM , c) Gucrdc los nombres sclcrios en lc tcblc TDP_DDGS.
REM , d) Asume que dos emplecdos no tiene nuncc el mismo sclcrio.
REM , e) Pruebc unc tcriedcd de ccsos especicles, como n=o, donde
REM , n es mcor que el nmero de emplecdos de lc tcblc EMP.
REM , Vccc lc tcblc TDP_DDGS despues de ccdc pruebc.

SET verify OFF;
ACCEPT g_num PROMPT 'Nmero de empleados:'
DECLARE
CURSOR c1 IS
SELECT ename, sal
FROM emp
WHERE sal IS NOT NULL
ORDER BY sal DESC;
v_ename emp.ename%TYPE;
v_esal emp.sal%TYPE;
v_num NUMBER := &g_num;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO v_ename, v_esal;
EXIT WHEN c1%ROWCOUNT > v_num OR c1%NOTFOUND OR c1%NOTFOUND
IS NULL;
INSERT INTO top_dogs
VALUES (v_ename, v_esal);
END LOOP;
CLOSE c1;
END;
/
SET verify ON

SELECT * FROM TOP_DOGS;

REM ; Nmero de empleados:4
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; NAME SALARY
REM ; ------------------------- ---------
REM ; KING 5000
REM ; FORD 3000
REM ; SCOTT 3000
REM ; JONES 2975

-------------------------------------------------------------------------------

REM ; pz1goz.sgl

REM , Considerc el ccso donde muchos emplecdos tienen el mismo sclcrio. Si
REM , unc personc es listcdc, entonces todc lc ente que tenc el mismo
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
56
REM , sclcrio no deberc ser listcdc.
REM , c) Por ejemplo, si el usucrio entrc un tclor de z pcrc n, entonces
REM , Kin, Iord Scott debericn ser mostrcdos. (Estos emplecdos estcn
REM , empctcdos con el seundo sclcrio mcs clto).
REM , b) Si el usucrio entrc un tclor de , entonces Kin, Iord, Scott
REM , 1ones debercn ser mostrcdos.
REM , c) orrc todcs lcs jilcs de lc tcblc TDP_DDGS pruebc lc prccticc.

SET verify OFF
ACCEPT g_num PROMPT 'Nmero de empleados:'
DECLARE
CURSOR c1 IS
SELECT e.ename, e.sal
FROM emp e
WHERE &g_num >= ( SELECT COUNT(*)
FROM emp i
WHERE e.sal < i.sal)
AND e.sal IS NOT NULL
ORDER BY e.sal DESC;
BEGIN
FOR c1_record IN c1 LOOP
INSERT INTO top_dogs
VALUES (c1_record.ename, c1_record.sal);
END LOOP;
END;
/
SET verify ON

SELECT * FROM TOP_DOGS;

REM ; Nmero de empleados:2
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; NAME SALARY
REM ; ------------------------- ---------
REM ; KING 5000
REM ; FORD 3000
REM ; SCOTT 3000

DELETE top_dogs;



















Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
57
PRACTICA

REM ; pzzgo1.sgl

REM , Escribe unc consultc pcrc recoer todos los depcrtcmentos los
REM , emplecdos en ccdc depcrtcmento. Insertc los resultcdos en lc
REM , tcblc MESSAGES. Usc un cursor pcrc recoer el nmero de depcrtcmento
REM , pcsc el nmero de depcrtcmento c un cursor pcrc recoer los
REM , emplecdos en ese depcrtcmento.

SET verify OFF
DECLARE
CURSOR c1 IS
SELECT DISTINCT deptno
FROM dept;
CURSOR c2(v_deptno NUMBER) IS
SELECT ename
FROM emp
WHERE v_deptno=deptno;
BEGIN
FOR c_c1 IN c1 LOOP
FOR c_c2 IN c2(c_c1.deptno) LOOP
INSERT INTO messages
VALUES (c_c2.ename || ' - Department ' ||
c_c1.deptno);
END LOOP;
END LOOP;
END;
/
SET verify ON
SELECT * FROM messages;

REM ; RESULTS
REM ; ---------------------------
REM ; KING - Department 10
REM ; CLARK - Department 10
REM ; MILLER - Department 10
REM ; DOE - Department 10
REM ; JONES - Department 20
REM ; FORD - Department 20
REM ; SMITH - Department 20
REM ; SCOTT - Department 20
REM ; ADAMS - Department 20
REM ; BLAKE - Department 30
REM ; MARTIN - Department 30
REM ; ALLEN - Department 30
REM ; TURNER - Department 30
REM ; JAMES - Department 30
REM ; WARD - Department 30
REM ;
REM ; 15 rows selected.

-------------------------------------------------------------------------------

REM ; pzzgoz.sgl

REM , Modijicc p:pqo.sql pcrc incorporcr lc juncionclidcd de
REM , IDR UPDATE WHERE CURRENT DI en el proceso del cursor.

SET verify OFF
VAR g_id NUMBER;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
58
ACCEPT g_id PROMPT 'Nmero de empleado:'
DECLARE
CURSOR c1 IS
SELECT NVL(sal,0) salary, stars
FROM emp
WHERE empno = &g_id
FOR UPDATE;
v_cadena emp.stars%TYPE;
v_salario emp.sal%TYPE;
c_c1 c1%ROWTYPE;
BEGIN
OPEN c1;
FETCH c1 INTO c_c1;
FOR i IN 1..ROUND(c_c1.salary/100) LOOP
v_cadena := v_cadena || '*';
END LOOP;
UPDATE emp
SET stars = v_cadena
WHERE CURRENT OF c1;
CLOSE c1;
COMMIT;
END;
/
SET verify ON





































Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
59
PRACTICA

REM ; pzjgo1.sgl

REM , Escribe un bloque PL,SQL pcrc seleccioncr el nombre del emplecdo con
REM , un sclcrio dcdo por tclor.
REM , c) Si el sclcrio entrcdo retornc mcs de unc columnc, mcnejc lc
REM , excepcin e insertc en lc tcblc MESSAGES, el menscje "Mcs de un
REM , emplecdo con un sclcrio de <sclcrio>".
REM , b) Si el sclcrio entrcdo no retornc ninunc jilc, mcnejc lc
REM , excepcin con un mcnejcdor de excepcin cpropicdo e insertc en lc
REM , tcblc MESSAGES el menscje "Ninn emplecdo con sclcrio <sclcrio>".
REM , c) Si el sclcrio entrcdo retornc solo unc jilc, insertc en lc tcblc
REM , MESSAGES el nombre del emplecdo lc ccntidcd de sclcrio.
REM , d) Mcnejc cuclquier otrc excepcin con un mcnejcdor de excepcin
REM , cpropicdo e insertc en lc tcblc MESSAGES el menscje "Alunos
REM , otros errores hcn ocurrido.".
REM , e) Pruebc el bloque pcrc tcrios ccsos.

SET verify OFF
ACCEPT g_sal PROMPT 'Introduzca el salario:'
DECLARE
v_sal emp.sal%TYPE := &g_sal;
v_ename emp.ename%TYPE;
BEGIN
SELECT ename
INTO v_ename
FROM emp
WHERE sal = v_sal;
INSERT INTO messages
VALUES (v_ename || ' - ' || TO_CHAR(v_sal));
EXCEPTION
WHEN TOO_MANY_ROWS THEN
INSERT INTO messages
VALUES ('Ms de un empleado con un saladio de ' ||
TO_CHAR(v_sal));
WHEN NO_DATA_FOUND THEN
INSERT INTO messages
VALUES ('Ningn empleado con salario ' || TO_CHAR(v_sal));
WHEN OTHERS THEN
INSERT INTO messages
VALUES ('Algunos errores han ocurrido');
END;
/
SET verify ON

SELECT * FROM messages;

DELETE messages;

REM ; Introduzca el salario:1300
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; RESULTS
REM ; -----------------------------------------
REM ; MILLER - 1300

REM ; Introduzca el salario:3000
REM ;
Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
60
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; RESULTS
REM ; ------------------------------------------
REM ; Ms de un empleado con un saladio de 3000

REM ; Introduzca el salario:140
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; RESULTS
REM ; ----------------------------------------
REM ; Ningn empleado con salario 140

-------------------------------------------------------------------------------

REM ; pzjgoz.sgl

REM , Modijicc p:8qo.sql pcrc ccdir mcnejo de excepcines.
REM , c) Escribe un mcnejcdor de excepcin pcrc el error de pcscr
REM , un menscje cl usucrio de que el depcrtcmento especijiccdo
REM , no existe.
REM , b) Ejecutc el bloque PL,SQL entrcndo un depcrtcmento que no existc.

SET verify OFF
VAR g_deptno NUMBER;
VAR g_dept_loc VARCHAR2;
VAR g_msg VARCHAR2(60);
ACCEPT g_deptno PROMPT 'Nmero de departamento:'
ACCEPT g_dept_loc PROMPT 'Localizacin del departamento:'
DECLARE
g_deptno_aux dept.deptno%TYPE;
BEGIN
SELECT deptno INTO g_deptno_aux FROM dept WHERE deptno =
&g_deptno;
UPDATE dept
SET loc = '&g_dept_loc'
WHERE deptno = g_deptno_aux;
EXCEPTION
WHEN NO_DATA_FOUND THEN
:g_msg := 'El departamento ' || TO_CHAR(&g_deptno) || ' no
existe';
END;
/
print g_msg;
SET verify ON

REM ; Nmero de departamento:50
REM ; Localizacin del departamento:Crdoba
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; G_MSG
REM ; -----------------------------------------
REM ; El departamento 50 no existe

-------------------------------------------------------------------------------

Andres Reyes Torres
2 I. T. InIormatica de Gestion, Universidad de Cordoba.
61
REM ; pzjgoj.sgl

REM , Escribe un bloque PL,SQL que imprimc los nombres de los emplecdos
REM , quienes hccen mcs o menos de $:oo del tclor del sclcrio introducido.
REM , c) Si no hc emplecdo dentro del rcno sclcricl, imprime un menscje
REM , cl usucrio pcrc indiccrle este ccso. Usc unc excepcin pcrc esto.
REM , b) Si hc uno o mcs emplecdos dentro del rcno, el menscje deberc
REM , indiccr cucntos emplecdos estcn en ese rcno sclcricl.
REM , c) Mcnejc cuclquier otrc excepcin con un mcnejcdor cpropicdo, el
REM , menscje deberc indiccr que otro error ocurri.

SET verify OFF
VAR g_msg VARCHAR2(40);
ACCEPT g_sal PROMPT 'Salario:'
DECLARE
ex_ninguno EXCEPTION;
ex_alguno EXCEPTION;
v_num emp.empno%TYPE;
BEGIN
SELECT COUNT(*)
INTO v_num
FROM emp
WHERE sal >= &g_sal-100 AND sal <= &g_sal+100;
IF v_num >= 1 THEN
RAISE ex_alguno;
ELSE
RAISE ex_ninguno;
END IF;
EXCEPTION
WHEN ex_ninguno THEN
:g_msg := 'Ningn empleado dentro del rango.';
WHEN ex_alguno THEN
:g_msg := 'Empleados dentro del rango: ' || TO_CHAR(v_num);
WHEN OTHERS THEN
:g_msg := 'Error:' || SQLCODE || ' ' || SQLERRM;
END;
/
PRINT g_msg;

REM ; Salario:3000
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; G_MSG
REM ; ----------------------------------------
REM ; Empleados dentro del rango: 3

REM ; Salario:100
REM ;
REM ; PL/SQL procedure successfully completed.
REM ;
REM ;
REM ; G_MSG
REM ; ----------------------------------------
REM ; Ningn empleado dentro del rango.

Anda mungkin juga menyukai