Advertisement
joloos

TA1 - Database

Feb 5th, 2025
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.51 KB | None | 0 0
  1. SET SERVEROUTPUT ON;
  2. SET VERIFY OFF;
  3. -- Part 1
  4. DECLARE
  5.     V_AIRPORTS COUNTRIES.AIRPORTS%TYPE;
  6.     V_CNTRYNAME COUNTRIES.COUNTRY_NAME%TYPE := 'Canada';
  7.     V_MESSAGE VARCHAR(70);
  8. BEGIN
  9.     SELECT AIRPORTS
  10.     INTO V_AIRPORTS
  11.     FROM COUNTRIES
  12.     WHERE COUNTRY_NAME = V_CNTRYNAME;
  13.  
  14. V_MESSAGE := CASE
  15.     WHEN V_AIRPORTS BETWEEN 0 AND 100 THEN 'There are 100 or fewer airports.'
  16.     WHEN V_AIRPORTS BETWEEN 101 AND 1000 THEN 'There are between 101 and 1,000 airports.'
  17.     WHEN V_AIRPORTS BETWEEN 1001 AND 10000 THEN 'There are between 1,001 and 10,000 airports.'
  18.     WHEN V_AIRPORTS > 10000 THEN 'There are more than 10,000 airports.'
  19.     ELSE 'Airport Count not Available.'
  20.     END;
  21. DBMS_OUTPUT.PUT_LINE('SELECTED COUNTRY: ' || V_CNTRYNAME);
  22. DBMS_OUTPUT.PUT_LINE(V_MESSAGE);
  23. END;
  24. /
  25.  
  26.  
  27. DROP TABLE WF_COUNTRIES;
  28. CREATE TABLE WF_COUNTRIES AS SELECT * FROM COUNTRIES WHERE 1 = 0;
  29. INSERT INTO WF_COUNTRIES SELECT * FROM COUNTRIES;
  30.  
  31.  
  32. DECLARE
  33. V_CNTRYID WF_COUNTRIES.COUNTRY_ID%TYPE;
  34. V_CNTRYNAME WF_COUNTRIES.COUNTRY_NAME%TYPE;
  35. BEGIN
  36. FOR CNTRY_ITE IN (SELECT COUNTRY_ID, COUNTRY_NAME FROM WF_COUNTRIES WHERE COUNTRY_ID BETWEEN 51 AND 55 ORDER BY COUNTRY_ID)
  37. LOOP
  38.     V_CNTRYID := CNTRY_ITE.COUNTRY_ID;
  39.     V_CNTRYNAME := CNTRY_ITE.COUNTRY_NAME;
  40.  
  41.     DBMS_OUTPUT.PUT_LINE('COUNTRY ID: ' || V_CNTRYID || ' | COUNTRY NAME: ' || V_CNTRYNAME);
  42.  
  43.     IF V_CNTRYID = 55 THEN
  44.     EXIT;
  45.     END IF;
  46.     END LOOP;
  47. END;
  48. /
  49.  
  50.  
  51.  
  52. -- Part2
  53. DECLARE
  54.  
  55. CURSOR emp_cursor IS
  56. SELECT first_name, last_name, job_id, salary
  57. FROM EMPLOYEES
  58. ORDER BY salary DESC;
  59.  
  60.  
  61. emp_record emp_cursor%ROWTYPE;
  62. BEGIN
  63. OPEN emp_cursor;
  64.  
  65. FOR i IN 1..6 LOOP
  66. FETCH emp_cursor INTO emp_record;
  67. EXIT WHEN emp_cursor%ROWCOUNT = 0;
  68. DBMS_OUTPUT.PUT_LINE('First Name: ' || emp_record.first_name || ', Last Name: ' || emp_record.last_name ||
  69. ', Job ID: ' || emp_record.job_id || ', Salary: ' || emp_record.salary);
  70. END LOOP;
  71.  
  72. CLOSE emp_cursor;
  73. END;
  74. /
  75.  
  76. DECLARE
  77.     TYPE COUNTRY_RECORD IS RECORD (
  78.         COUNTRY_NAME COUNTRIES.COUNTRY_NAME%TYPE,
  79.         NATIONAL_HOLIDAY_DATE COUNTRIES.NATIONAL_HOLIDAY_DATE%TYPE,
  80.         NATIONAL_HOLIDAY_NAME COUNTRIES.NATIONAL_HOLIDAY_NAME%TYPE
  81.     );
  82.        
  83.     V_COUNTRY COUNTRY_RECORD;
  84.     V_INPUT_COUNTRY_NAME COUNTRIES.COUNTRY_NAME%TYPE;
  85.     V_ROW_COUNT NUMBER := 0; -- Counter for rows found
  86. BEGIN
  87.     V_INPUT_COUNTRY_NAME := '&ENTER_COUNTRY_NAME'; -- user input
  88.    
  89.     FOR COUNTRY_ROW IN (
  90.         SELECT COUNTRY_NAME, NATIONAL_HOLIDAY_DATE, NATIONAL_HOLIDAY_NAME
  91.         FROM COUNTRIES
  92.         WHERE REGION_ID = 5 AND LOWER(COUNTRY_NAME) = LOWER(V_INPUT_COUNTRY_NAME)
  93.     )
  94.     LOOP
  95.         V_COUNTRY.COUNTRY_NAME := COUNTRY_ROW.COUNTRY_NAME;
  96.         V_COUNTRY.NATIONAL_HOLIDAY_DATE := COUNTRY_ROW.NATIONAL_HOLIDAY_DATE;
  97.         V_COUNTRY.NATIONAL_HOLIDAY_NAME := COUNTRY_ROW.NATIONAL_HOLIDAY_NAME;
  98.        
  99.         DBMS_OUTPUT.PUT_LINE('Country Name: ' || V_COUNTRY.COUNTRY_NAME);
  100.         DBMS_OUTPUT.PUT_LINE('National Holiday Date: ' || V_COUNTRY.NATIONAL_HOLIDAY_DATE);
  101.         DBMS_OUTPUT.PUT_LINE('National Holiday Name: ' || V_COUNTRY.NATIONAL_HOLIDAY_NAME);
  102.         DBMS_OUTPUT.PUT_LINE('----------------------------------------');
  103.        
  104.         V_ROW_COUNT := V_ROW_COUNT + 1;
  105.     END LOOP;
  106.    
  107.     IF V_ROW_COUNT = 0 THEN
  108.         DBMS_OUTPUT.PUT_LINE('Country "' || V_INPUT_COUNTRY_NAME || '" not found in region 5 (South America).');
  109.     END IF;
  110. END;
  111. /
  112.  
  113.  
  114. --Part 4
  115. DECLARE
  116.     v_language_id languages.language_id%TYPE;
  117.     v_language_name languages.language_name%TYPE;
  118. BEGIN
  119.     SELECT language_id, language_name
  120.     INTO v_language_id, v_language_name
  121.     FROM languages
  122.     WHERE LOWER(language_name) LIKE 'al%'; -- for example 'ab%';
  123.     --ba, ce. There are several language_names beginning with “Ba,” but none beginning with “Ce”.
  124.     --al. There is exactly one language_name beginning with“Al”. Note that language_id 80 (Arabic) already exists
  125.     --Now (keeping the substring as “al”), add a non_predefined exception handler to trap then encountered oracle exception code
  126.     INSERT INTO languages (language_id, language_name)
  127.     VALUES (80, NULL);
  128.  
  129. EXCEPTION
  130.     WHEN NO_DATA_FOUND THEN
  131.         DBMS_OUTPUT.PUT_LINE('Error: Language not found.');
  132.  
  133.     WHEN TOO_MANY_ROWS THEN
  134.         DBMS_OUTPUT.PUT_LINE('Error: More than one language found.');
  135.  
  136.     WHEN DUP_VAL_ON_INDEX THEN
  137.         DBMS_OUTPUT.PUT_LINE('Error: Duplicate language_id insertion attempt.');
  138.  
  139.     WHEN OTHERS THEN
  140.         DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
  141. END;
  142. /
  143.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement