用户定义的记录作为OUT参数

用户定义的记录作为OUT参数

问题描述:

这是我当前的代码。我的错误是必须声明COUNTRY_REC。我明白所有我只是无法找到任何在线,谈论记录作为输出参数。这是问题的要求。我必须非常接近解决方案,但我不明白。用户定义的记录作为OUT参数

CREATE OR REPLACE PROCEDURE find_region_and_currency_sp(
    p_country_name IN COUNTRIES.COUNTRY_NAME%TYPE, 
    p_country_rec OUT country_rec) 
    IS 
     TYPE country_rec IS RECORD(
     country_name COUNTRIES.COUNTRY_NAME%TYPE, 
     region COUNTRIES.REGION_ID%TYPE, 
     currency COUNTRIES.CURRENCY_CODE%TYPE); 
    country_record country_rec; 
    BEGIN 
     SELECT COUNTRY_NAME, REGION_ID, CURRENCY_CODE INTO country_rec 
     FROM COUNTRIES 
     where COUNTRY_NAME = p_country_name; 
    END; 

任何帮助将不胜感激......

+2

返回数据类型的签名必须是可用来调用程序。由于您目前在proc中声明了'COUNTRY_REC',因此它只能在proc中使用。如果您需要使用RECORD作为返回,只需将其定义在包中,并在proc和调用代码中将其引用为“PACKAGE_NAME.COUNTRY_REC”。 –

你记录TYPECOUNTRY_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; 
/