0

私のテーブルベローは、の色をプレイしてポイントを獲得したさまざまな色のチームで構成されています。

   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).

私の質問は:

  • チームの結果を表示して合計の多いに並べることはできますか?

  • それとも、これには関数だけが必要ですか?

事前に感謝します。

4

1 に答える 1

0

この情報を提供するクエリでカーソルを開くだけを使用しないのはなぜですか? 何かのようなもの:

SELECT HC, SUM (TOTAL) as Total
FROM COLOURS            
GROUP BY HC
ORDER BY SUM(TOTAL) DESC

このクエリでは、関数は必要ありません。

アップデート

関数を使用したい場合は、次のようなものを試すことができます。

SELECT HC, C_ID, TOTAL, SCORES, TOTAL(HC) as TOTALSCORES
FROM  COLOURS
ORDER BY TOTAL(HC);

私は PC の近くにいないため、これをテストしていませんが、動作するはずです。

于 2013-04-20T11:03:18.410 に答える