traveler_assistance_package.Процедура find_region_and_currency внесение изменений в пользовательскую запись и выбор оператора - PullRequest
0 голосов
/ 04 марта 2019

В настоящее время создается пакет для проекта pl / sql под названием traveller_assistance_package.По одному из вопросов мне было поручено создать пользовательскую запись, в которой были бы найдены имя страны, имя региона и имя валюты для конкретной страны.Вопрос немного неясен относительно того, должен ли я создавать эту запись на основе трех отдельных таблиц, которые предоставляют эту информацию, или из стран с одной таблицей.До сих пор я держал свою запись в одной таблице и смог получить результаты, основанные на этом, однако, если это возможно, я хотел бы попробовать с альтернативой, если есть такие средства.Вместо приведенного ниже примера (начиная с TYPE country_rec IS RECORD) я, если возможно, хотел бы построить запись следующим образом:

TYPE country_rec IS RECORD(
        country_name COUNTRIES.COUNTRY_NAME%TYPE,
        region REGION.REGION_NAME%TYPE,
        currency CURRENCY.CURRENCY_NAME%TYPE);

Однако я немного растерялся относительно того, как бы я это сделализмените оператор select в моем теле пакета после этого, чтобы распечатать желаемый результат.Ниже приведена копия моей упаковки и тела пакета.Любая помощь будет принята с благодарностью.

    CREATE OR REPLACE PACKAGE traveler_assistance_package
IS

TYPE country_rec IS RECORD(
        country_name COUNTRIES.COUNTRY_NAME%TYPE,
        region COUNTRIES.REGION_ID%TYPE,
        currency COUNTRIES.CURRENCY_CODE%TYPE);


 PROCEDURE country_demographic
 (p_country_name IN countries.country_name%TYPE);

PROCEDURE find_region_and_currency
(p_country_name   IN COUNTRIES.country_name%TYPE,
 p_country_rec    OUT country_rec);

END traveler_assistance_package;

    CREATE OR REPLACE package body traveler_assistance_package 

    IS


    --procedure country_demographics

    procedure country_demographic

    (p_country_name IN countries.country_name%TYPE)

    IS
     TYPE ED_TYPE IS TABLE OF countries%ROWTYPE;
     p_country_demo_rec  ED_TYPE;

     BEGIN

SELECT * BULK COLLECT INTO p_country_demo_rec FROM countries
WHERE country_name = p_country_name;
IF SQL%NOTFOUND THEN
    RAISE_APPLICATION_ERROR(-20201, 'This country does not exist.');
END IF;
FOR i IN p_country_demo_rec.FIRST..p_country_demo_rec.LAST 
LOOP
DBMS_OUTPUT.PUT_LINE('Country Name:'||p_country_demo_rec(i).country_name || 
      'Location:' || p_country_demo_rec(i).location || 
      'Capitol:' || p_country_demo_rec(i).capitol || 
      'Population:' || p_country_demo_rec(i).population || 
      'Airports:' || p_country_demo_rec(i).airports || 
      'Climate:' || p_country_demo_rec(i).climate );
END LOOP;

END;

    --procedure find_region_and_currency
      PROCEDURE find_region_and_currency 
(p_country_name   IN countries.country_name%TYPE,
 p_country_rec     OUT country_rec)
    IS

    BEGIN 
      SELECT country_name, region_id, currency_code INTO p_country_rec
      FROM COUNTRIES
      where COUNTRY_NAME = p_country_name;

DBMS_OUTPUT.PUT_LINE('Country Name:'||p_country_rec.country_name ||  
      'Region:' || p_country_rec.region || 
      'Currency:' || p_country_rec.currency);

END;

END traveler_assistance_package;
...