GreysitoErPutoAmo

PL/SQL AC 9

May 4th, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 3.74 KB | None | 0 0
  1. --  Escribir un procedimiento que reciba dos números y visualice su suma.
  2. CREATE OR REPLACE PROCEDURE sumar_numeros (
  3.     num1 NUMBER,
  4.     num2 NUMBER)
  5. AS
  6.     suma NUMBER(6);
  7. BEGIN
  8.     suma := num1 + num2;
  9.     DBMS_OUTPUT.PUT_LINE('Suma: '|| suma);
  10. END sumar_numeros;
  11. /
  12.  
  13. -- Codificar un procedimiento que reciba una cadena y la visualice al revés.
  14.  
  15. CREATE OR REPLACE PROCEDURE cadena_reves(
  16.     vcadena VARCHAR2)
  17. AS
  18.     vcad_reves VARCHAR2(80);
  19. BEGIN
  20.     FOR i IN REVERSE 1..LENGTH(vcadena) LOOP
  21.         vcad_reves := vcad_reves || SUBSTR(vcadena,i,1);
  22.     END LOOP;
  23.     DBMS_OUTPUT.PUT_LINE(vcad_reves);
  24. END cadena_reves;
  25. /
  26.  
  27. -- Escribir una función que reciba una fecha y devuelva el año, en número, correspondiente a esa fecha.
  28.  
  29. CREATE OR REPLACE FUNCTION anio (fecha DATE)
  30.     RETURN NUMBER
  31. AS
  32.     v_anio NUMBER(4);
  33. BEGIN
  34.     v_anio := TO_NUMBER(TO_CHAR(fecha, 'YYYY'));
  35.     RETURN v_anio;
  36. END anio;
  37. /
  38.  
  39. -- Escribir un bloque PL/SQL que haga uso de la función anterior.
  40.  
  41. DECLARE
  42.     n NUMBER(4);
  43. BEGIN
  44.     n := anio(SYSDATE);
  45.     DBMS_OUTPUT.PUT_LINE('AÑO : '|| n);
  46. END;
  47. /
  48. -- Desarrollar una función que devuelva el número de años completos que hay entre dos fechas que se pasan como argumentos.
  49.  
  50. CREATE OR REPLACE FUNCTION anios_dif (
  51.     fecha1 DATE,
  52.     fecha2 DATE)
  53.     RETURN NUMBER
  54. AS
  55.     v_anios_dif NUMBER(6);
  56. BEGIN
  57.     v_anios_dif := ABS(TRUNC(MONTHS_BETWEEN(fecha2,fecha1) / 12));
  58.     RETURN v_anios_dif;
  59. END anios_dif;
  60.  
  61. --  Escribir una función que, haciendo uso de la función anterior devuelva los trienios que hay entre dos fechas. (Un trienio son tres años completos).
  62.  
  63. CREATE OR REPLACE FUNCTION trienios (
  64.     fecha1 DATE,
  65.     fecha2 DATE)
  66.     RETURN NUMBER
  67. AS
  68.     v_trienios NUMBER(6);
  69. BEGIN
  70.     v_trienios := TRUNC(anios_dif(fecha1,fecha2) / 3);
  71.     RETURN v_trienios;
  72. END;
  73. /
  74.  
  75. --  Codificar un procedimiento que reciba una lista de hasta 5 números y visualice su suma.
  76.  
  77.  
  78. CREATE OR REPLACE PROCEDURE sumar_5numeros (
  79.     Num1 NUMBER DEFAULT 0,
  80.     Num2 NUMBER DEFAULT 0,
  81.     Num3 NUMBER DEFAULT 0,
  82.     Num4 NUMBER DEFAULT 0,
  83.     Num5 NUMBER DEFAULT 0)
  84. AS
  85. BEGIN
  86.     DBMS_OUTPUT.PUT_LINE(Num1 + Num2 + Num3 + Num4 + Num5);
  87. END sumar_5numeros;
  88.  
  89. -- Escribir una función que devuelva solamente caracteres alfabéticos sustituyendo cualquier otro carácter por blancos a partir de una cadena que se pasará en la llamada.
  90.  
  91. CREATE OR REPLACE FUNCTION sust_por_blancos(
  92.     cad VARCHAR2)
  93.     RETURN VARCHAR2
  94. AS
  95.     nueva_cad VARCHAR2(30);
  96.     car CHARACTER;
  97. BEGIN
  98.     FOR i IN 1..LENGTH(cad) LOOP
  99.         car:=SUBSTR(cad,i,1);
  100.             IF (ASCII(car) NOT BETWEEN 65 AND 90)
  101.             AND (ASCII(car) NOT BETWEEN 97 AND 122) THEN
  102.             car :=' ';
  103.             END IF;
  104.         nueva_cad := nueva_cad || car;
  105.     END LOOP;
  106.     RETURN nueva_cad;
  107. END sust_por_blancos;
  108. /
  109.  
  110. -- Codificar un procedimiento que permita borrar un empleado cuyo número se pasará en la llamada.
  111.  
  112. CREATE OR REPLACE PROCEDURE borrar_emple(
  113.     num_emple emple.emp_no%TYPE)
  114. AS
  115. -- v_row ROWID;
  116. BEGIN
  117. -- SELECT ROWID INTO v_row FROM EMPLE
  118. -- WHERE EMP_NO = num_emple;
  119.     DELETE FROM emple WHERE emp_no = num_emple;
  120. -- WHERE ROWID = v_row;
  121. END borrar_emple;
  122. /
  123.  
  124. -- Escribir un procedimiento que modifique la localidad de un departamento. El procedimiento recibirá como parámetros el número del departamento y la localidad nueva.
  125.  
  126. CREATE OR REPLACE
  127. PROCEDURE modificar_localidad(
  128.     num_depart NUMBER,
  129.     localidad VARCHAR2)
  130. AS
  131. -- v_row ROWID;
  132. BEGIN
  133. -- SELECT ROWID INTO v_row FROM DEPART
  134. -- WHERE DEPT_NO = num_depart;
  135.     UPDATE depart SET loc = localidad
  136.     WHERE dept_no = num_depart;
  137. -- WHERE ROWID = v_row;
  138. END modificar_localidad;
  139. /
  140.  
  141. -- Visualizar todos los procedimientos y funciones del usuario almacenados en la base de datos y su situación (valid o invalid).
  142.  
  143. SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
  144. FROM USER_OBJECTS
  145. WHERE OBJECT_TYPE IN ('PROCEDURE','FUNCTION');
Add Comment
Please, Sign In to add comment