【发布时间】:2018-03-16 09:40:47
【问题描述】:
我想显示 country_id、country_name、region_id、highest_elevation、date_of_independence、population 的值 其中highest_elevation >1000 AND 5000000 也是有独立日的国家。 重要的是,region_id 的输出必须大于 1。
到目前为止,我已经尝试对其进行 PL/SQL 查询。但是,我发现了错误。我对查询进行了 2 种变体。带参数的游标使用 LOOP 和 FETCH 带有参数的游标也使用子查询和 FOR LOOP。
这是子查询的代码:
--pakai subqueries tp gak bisa
v_regid countries.region_id%TYPE;
CURSOR cur_con (pregid NUMBER) IS
SELECT country_id,country_name,region_id,highest_elevation,date_of_independence, population
FROM countries
WHERE region_id = pregid
AND highest_elevation >1000 AND highest_elevation<1000 AND population >5000000 AND date_of_independence IS NOT NULL;
BEGIN
FOR con_rec IN cur_con (v_regid) LOOP
DBMS_OUTPUT.PUT_LINE ( ' ' );
DBMS_OUTPUT.PUT_LINE ( ' ============================================= ' );
DBMS_OUTPUT.PUT_LINE ( ' ID Negara : ' || con_rec.country_id );
DBMS_OUTPUT.PUT_LINE ( ' Nama Negara : ' || con_rec.country_name );
DBMS_OUTPUT.PUT_LINE ( ' ID Region : ' || con_rec.region_id );
DBMS_OUTPUT.PUT_LINE ( ' Ketinggian yang tertinggi : ' || con_rec.highest_elevation );
DBMS_OUTPUT.PUT_LINE ( ' Hari kemerdekaan : '|| con_rec.date_of_independence );
DBMS_OUTPUT.PUT_LINE ( ' Populasi : ' ||con_rec.population );
DBMS_OUTPUT.PUT_LINE ( ' ============================================= ' );
DBMS_OUTPUT.PUT_LINE ( ' ' );
END LOOP;
END;
第一次查询的错误:ORA-00900: invalid SQL statement
这里是带有参数的游标代码使用 LOOP 和 FETCH
--pakai cursor n parameter biasa
DECLARE
v_conid countries.country_id%TYPE;
v_coname countries.country_id%TYPE;
v_regid countries.region_id%TYPE;
v_he countries.highest_elevation%type;
v_doi countries.date_of_independence%TYPE;
v_pop countries.population%TYPE;
CURSOR cur_con (pregid NUMBER) IS
SELECT country_id,country_name,region_id,highest_elevation,date_of_independence, population
FROM countries
WHERE region_id = pregid
AND highest_elevation >1000 AND highest_elevation<1000 AND population >5000000 AND date_of_independence IS NOT NULL;
reccon cur_con%ROWTYPE;
BEGIN
SELECT country_id,country_name,region_id,highest_elevation,date_of_independence, population INTO v_conid,v_coname,v_regid,v_he,v_doi,v_pop
FROM countries;
OPEN cur_con(v_regid);
LOOP
FETCH cur_con INTO reccon;
EXIT WHEN cur_con%NOTFOUND;
DBMS_OUTPUT.PUT_LINE ( ' ' );
DBMS_OUTPUT.PUT_LINE ( ' ============================================= ' );
DBMS_OUTPUT.PUT_LINE ( ' ID Negara : ' || reccon.country_id );
DBMS_OUTPUT.PUT_LINE ( ' Nama Negara : ' || reccon.country_name );
DBMS_OUTPUT.PUT_LINE ( ' ID Region : ' || reccon.region_id );
DBMS_OUTPUT.PUT_LINE ( ' Ketinggian yang tertinggi : ' || reccon.highest_elevation );
DBMS_OUTPUT.PUT_LINE ( ' Hari kemerdekaan : '|| reccon.date_of_independence );
DBMS_OUTPUT.PUT_LINE ( ' Populasi : ' ||reccon.population );
DBMS_OUTPUT.PUT_LINE ( ' ============================================= ' );
DBMS_OUTPUT.PUT_LINE ( ' ' );
END LOOP;
CLOSE cur_con;
end;
第二个查询的错误:ORA-01422:精确提取返回的行数超过了请求的行数
我的查询有什么问题?请帮帮我
【问题讨论】:
标签: oracle plsql parameters cursor oracle-apex