我還是 PLSQL 的新手,目前正在使用 TPCH Dataset 進行練習。我已經嘗試了一段時間了,但我似乎無法理解它并且可以使用一些建議。此處對資料集的粗略概述 。
到目前為止,這是我的代碼
DECLARE
countNationkey number (5);
BEGIN
FOR QRow IN ( SELECT r_name, n_name, s_nationkey, r_regionkey, count(s_nationkey) INTO countNationkey
FROM region, nation, supplier
WHERE r_regionkey = n_regionkey
AND n_nationkey = s_nationkey
GROUP BY r_name, n_name, s_nationkey, r_regionkey
HAVING count(s_nationkey) > 130
ORDER BY r_name )
LOOP
dbms_output.put_line( rpad('R_NAME', 15) || rpad('N_NAME', 15) ||
rpad('COUNT(S_NATIONKEY)', 20) || chr(10) );
dbms_output.put_line('----------------------------------------------------------');
dbms_output.put_line( rpad(QRow.r_name, 15) || rpad(QRow.n_name, 15) || rpad(countNationkey, 15) );
END LOOP;
END;
但是,當我僅嘗試選擇查詢時,出現錯誤
SELECT r_name, n_name, s_nationkey, r_regionkey, count(s_nationkey) INTO countNationkey
*
ERROR at line 1:
ORA-00905: missing keyword
如果我洗掉INTO countNationkey,我知道它countNationkey沒有價值,因此我將獲得如下所示的輸出。
R_NAME N_NAME COUNT(S_NATIONKEY)
----------------------------------------------------------
ASIA CHINA
R_NAME N_NAME COUNT(S_NATIONKEY)
----------------------------------------------------------
ASIA INDONESIA
R_NAME N_NAME COUNT(S_NATIONKEY)
----------------------------------------------------------
EUROPE GERMANY
R_NAME N_NAME COUNT(S_NATIONKEY)
----------------------------------------------------------
MIDDLE EAST SAUDI ARABIA
這是我想要的預期結果
R_NAME N_NAME COUNT(S_NATIONKEY)
------------------------- ------------------------- ------------------
ASIA INDONESIA 131
ASIA CHINA 145
MIDDLE EAST SAUDI ARABIA 132
EUROPE GERMANY 132
真的可以使用一些幫助!提前致謝!
uj5u.com熱心網友回復:
只需洗掉INTO. 它在 PL/SQL 中是必需的,但不是 whenselect是游標的一部分(在您的情況下,這是一個游標FOR回圈)。
此外,您將countNationkey使用游標變數的名稱 ( QROW.countNationkey)進行參考,這也意味著您不需要區域變數。
所以:
BEGIN
FOR QRow IN ( SELECT r_name,
n_name,
s_nationkey,
r_regionkey,
COUNT (s_nationkey) countNationkey
FROM region, nation, supplier
WHERE r_regionkey = n_regionkey
AND n_nationkey = s_nationkey
GROUP BY r_name,
n_name,
s_nationkey,
r_regionkey
HAVING COUNT (s_nationkey) > 130
ORDER BY r_name)
LOOP
DBMS_OUTPUT.put_line (
RPAD ('R_NAME', 15)
|| RPAD ('N_NAME', 15)
|| RPAD ('COUNT(S_NATIONKEY)', 20)
|| CHR (10));
DBMS_OUTPUT.put_line (
'----------------------------------------------------------');
DBMS_OUTPUT.put_line (
RPAD (QRow.r_name, 15)
|| RPAD (QRow.n_name, 15)
|| RPAD (QROW.countNationkey, 15));
END LOOP;
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/354044.html
上一篇:從1行3列制作3行1列
下一篇:PostgreSQL外鍵陣列
