私のテーブルベローは、別の色をプレイしてポイントを獲得したさまざまな色のチームで構成されています。
CREATE TABLE COLOURS
(C_ID VARCHAR2 (4) NOT NULL,
HC VARCHAR2 (4),
AC VARCHAR2 (4),
TOTAL NUMBER (2),
SCORES NUMBER (2));
INSERT INTO COLOURS VALUES
('C1', 'RED', 'BLUE',8,'');
INSERT INTO COLOURS VALUES
('C2', 'RED', 'BLUE', 9,'');
INSERT INTO COLOURS VALUES
('C3','BLUE', 'RED', 10,'');
INSERT INTO COLOURS VALUES
('C4','BLUE', 'RED', 11,'');
次に、チームの合計ポイントを計算する関数を作成しました。
CREATE OR REPLACE FUNCTION TOTAL (i_HC COLOURS.HC%TYPE)
RETURN NUMBER
IS
v_COLOURS_total COLOURS.total%TYPE;
BEGIN
SELECT SUM (TOTAL)
INTO v_COLOURS_total
FROM COLOURS
WHERE
HC = i_HC;
IF v_COLOURS_total IS NULL THEN
v_COLOURS_total:=0;
END IF;
RETURN v_COLOURS_total;
END;
最後に、その関数を呼び出して、各チームの結果を 1 つずつ表示する手順:
CREATE OR REPLACE PROCEDURE COLOURS_SCORES (dnum VARCHAR2)
IS
W_HC COLOURS.HC%TYPE;
W_C_ID COLOURS.C_ID%TYPE;
W_TOTAL COLOURS.TOTAL%TYPE;
W_SCORES NUMBER(2);
TOTALSCORES NUMBER(5,2);
CURSOR COLOURS_CURSOR IS
SELECT HC,C_ID,TOTAL,SCORES
FROM COLOURS
WHERE HC = dnum;
BEGIN
DBMS_OUTPUT.PUT_LINE(' '||'COLOURS POINTS '||' ');
OPEN COLOURS_CURSOR;
TOTALSCORES :=TOTAL(dnum);
LOOP
FETCH COLOURS_CURSOR INTO W_HC,W_C_ID,W_TOTAL, W_SCORES;
EXIT WHEN COLOURS_CURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(W_C_ID || '----'|| W_TOTAL ||' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('---------------------------------------');
DBMS_OUTPUT.PUT_LINE(W_HC||' '||'FINAL SCORE = '||TO_CHAR(TOTALSCORES));
DBMS_OUTPUT.PUT_LINE('---------------------------------------');
CLOSE COLOURS_CURSOR;
END;
さて、手順の実行後、たとえばEXECUTE COLOURS_SCORES ('RED');
、色の結果が得られます。
引数がREDの場合は
(17)
.引数がBLUEの場合は
(21)
.
私の質問は:
両チームの結果を表示して合計の多い順に並べることはできますか?
それとも、これには関数だけが必要ですか?
事前に感謝します。