如何修复我的程序country_demographics?

时间:2017-12-21 14:38:18

标签: oracle plsql

country_demograhics

问题是要我创建一个名为country_name的过程。将CONTRY_NAME作为IN参数传递。显示LOCATIONCAPITOLPOPULATIONAIRPORTSCLIMATEError at line 0: PL/SQL: Compilation unit analysis terminated. 。对select语句的INTO子句使用用户定义的记录结构。如果该国家不存在,则提出例外 现在这里是我的代码的副本,不断返回错误:

{{1}}

2 个答案:

答案 0 :(得分:0)

该错误应该是告诉您的第二个错误,它不会再看了。还应该有另一个错误。我想ed_type并不存在于过程之外,所以它不能将ed_type作为OUT参数。 ed_type在外面是不知道的。

答案 1 :(得分:0)

第一件事 - 看你在声明(p_country_demo_rec)和开始(v_country_demo_rec)部分时使用了不同的变量。我认为这可能是一个错误。

尝试以下脚本: - 它可能对您有帮助。

CREATE OR REPLACE PROCEDURE COUNTRY_DEMOGRAPHICS
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;
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;
IF SQL%NOTFOUND THEN
    RAISE_APPLICATION_ERROR(-20201, 'This country does not exist.');
END IF; 
END;
/

EXECUTE COUNTRY_DEMOGRAPHICS;

注意: - 您可以在过程中使用一个参数(IN参数)来获取特定国家/地区受众特征数据,并在select语句中使用该参数来过滤掉特定国家/地区。

示例:

CREATE OR REPLACE PROCEDURE COUNTRY_DEMOGRAPHICS(p_country_name IN varchar2)

Select语句如下:

SELECT * BULK COLLECT INTO p_country_demo_rec FROM countries where 
country_name = ||p_country_name; 

执行部分:

EXECUTE COUNTRY_DEMOGRAPHICS(p_country_name);