В настоящее время создается пакет для проекта 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;