Я не уверен, как отобразить мое утверждение выбора в моей процедуре. Это мой код в моей процедуре:
CREATE OR REPLACE PROCEDURE numberOfSupplier (X INT:=0)
AS
rName REGION.R_NAME%TYPE;
nName NATION.N_NAME%TYPE;
sNKeyC SUPPLIER.S_NATIONKEY%TYPE;
BEGIN
FOR rec IN(
SELECT R.R_NAME, N.N_NAME, COUNT(S.S_NATIONKEY)
INTO rName, nName, sNKeyC
FROM REGION R, NATION N, SUPPLIER S
WHERE R.R_REGIONKEY = N.N_REGIONKEY
AND S.S_NATIONKEY = N.N_NATIONKEY
GROUP BY R.R_NAME, N.N_NAME
HAVING COUNT(S.S_NATIONKEY) > X)
LOOP
dbms_output.put_line('R_NAME'||rName);
dbms_output.put_line('N_NAME'||nName);
dbms_output.put_line('COUNT(S_NATIONKEY)'||sNKeyC);
END LOOP;
END;
/
--executing numberOfSupplier
EXECUTE numberOfSupplier(130);
Это то, что я получаю, без ошибок, но не то, что я хочу:
SQL> EXECUTE numberOfSupplier(130);
R_NAME
N_NAME
COUNT(S_NATIONKEY)
R_NAME
N_NAME
COUNT(S_NATIONKEY)
R_NAME
N_NAME
COUNT(S_NATIONKEY)
R_NAME
N_NAME
COUNT(S_NATIONKEY)
То, что я хочу получить, это:
R_NAME N_NAME COUNT(S.S_NATIONKEY)
------------------------- ------------------------- --------------------
ASIA INDONESIA 131
ASIA CHINA 145
MIDDLE EAST SAUDI ARABIA 132
EUROPE GERMANY 132
Я могу получить вышеуказанный результат, если я просто выполню оператор select, однако я не знаю, как поместить этот оператор select в мою процедуру и получить приведенную выше таблицу:
SELECT R.R_NAME, N.N_NAME, COUNT(S.S_NATIONKEY)
FROM REGION R, NATION N, SUPPLIER S
WHERE R.R_REGIONKEY = N.N_REGIONKEY
AND S.S_NATIONKEY = N.N_NATIONKEY
GROUP BY R.R_NAME, N.N_NAME
HAVING COUNT(S.S_NATIONKEY) > 130;
Может кто-нибудь объяснить мне, почему и как это исправить. Спасибо большое.