你記錄TYPE
COUNTRY_REC
的內部程序定義的不是過程參數範圍內的訪問。
您有以下選擇。
創建並存儲一個TYPE OBJECT COUNTRY_REC
,其結構與查詢結果和兼容數據類型的結構相同。
CREATE OR REPLACE TYPE country_rec AS OBJECT (
country_name VARCHAR2(10),
region VARCHAR2(10),
currency VARCHAR2(5)
);
然後,您不需要另一個地方記錄variable.But,您需要使用NEW
關鍵字如圖所示進行初始化。然後您可以簡單地將值提取到相應的記錄元素中。
CREATE OR REPLACE PROCEDURE find_region_and_currency_sp (
p_country_name IN countries.country_name%TYPE,
p_country_rec OUT country_rec
)
IS
BEGIN
p_country_rec := NEW country_rec(NULL,NULL,NULL); --Initialization
SELECT
country_name,
region_id,
currency_code
INTO
p_country_rec.country_name,p_country_rec.region,p_country_rec.currency
FROM
countries
WHERE
country_name = p_country_name;
END;
另一個選項是在包規範中定義包範圍中的記錄。
CREATE OR REPLACE PACKAGE pkg_country_op
AS
TYPE country_rec IS RECORD(
country_name COUNTRIES.COUNTRY_NAME%TYPE,
region COUNTRIES.REGION_ID%TYPE,
currency COUNTRIES.CURRENCY_CODE%TYPE);
PROCEDURE find_region_and_currency_sp (
p_country_name IN COUNTRIES.country_name%TYPE,
p_country_rec OUT country_rec
);
END;
/
然後在PACKAGE BODY
裏面包含相同的程序。
CREATE OR REPLACE PACKAGE BODY pkg_country_op..
..
..
PROCEDURE find_region_and_currency_sp (
p_country_name IN countries.country_name%TYPE,
p_country_rec OUT country_rec
)
IS
..
調用過程。您可以按照以下方式調用該過程。
案例1:
DECLARE
v_country_rec country_rec; --Global Scope
BEGIN
find_region_and_currency_sp('India',v_country_rec);
END;
/
案例2:
DECLARE
v_country_rec pkg_country_op.country_rec; --Package Global variable
BEGIN
pkg_country_op.find_region_and_currency_sp('India',v_country_rec);
END;
/
返回數據類型的簽名必須是可用來調用程序。由於您目前在proc中聲明瞭'COUNTRY_REC',因此它只能在proc中使用。如果您需要使用RECORD作爲返回,只需將其定義在包中,並在proc和調用代碼中將其引用爲「PACKAGE_NAME.COUNTRY_REC」。 –