2017-09-25 4 views
-2

ヒットと好き嫌いに基づいて、毎週のミュージック・ランクを選択する手順を取ろうとしています。Oracle SQLウィークリー・ランク・プロシージャの選択

create or replace procedure select_rank(
    v_title   IN music.title%TYPE, 
    v_release_date IN music.release_date%TYPE, 
    v_hit   IN music.hit%TYPE 
) is 
    v_cnt number := 0; 
    BEGIN 
    select music.title, music.release_date, count(melon_user.user_idx) as likes, music.hit 
    into v_rank, v_title, v_cnt, v_release_date, v_hit 
    from melon_user, user_like_music, music 
    where melon_user.user_idx = user_like_music.user_idx 
     and user_like_music.music_idx = music.music_idx 
    group by music.title, music.hit, music.release_date 
    order by count(melon_user.user_idx) desc, music.hit desc; 

    DBMS_OUTPUT.PUT_LINE('v_title: ' || v_title); 
    DBMS_OUTPUT.PUT_LINE('v_cnt: ' || v_cnt); 
    DBMS_OUTPUT.PUT_LINE('v_release_date: ' || v_release_date); 
    DBMS_OUTPUT.PUT_LINE('v_hit: ' || v_hit);  
END select_rank; 
/

しかし、私はエラーを取得しておくことは

PLS-00403の言葉:式 'V_RELEASE_DATEは' INTO-ターゲットSELECT/FETCH文を

PLS-00403の として使用することはできません。式 'V_RELEASE_DATE'は、SELECT/FETCH文の INTOターゲットとして使用できません。

PLS-00403:式 'V_RELEASE_DATE'はとして使用できませんSELECT/FETCH文のINTO - ターゲット

これはどのように修正できますか?あなたが持っている手順の署名で

+0

これはあなたの前のスレッドのように、多かれ少なかれ、同じ質問です:はいhttps://stackoverflow.com/questions/46404484/oracle-sql-making-procedure-to-show-weekly-ranking –

+0

@GoranStefanović私は本当に申し訳ありませんが、私は本当にこのために苦労しています。私はselect文から複数のテーブルデータを持っているので、一括収集をしようとしましたが、うまくいきません。私はそれを修正する方法については考えていません。 – user19283043

+0

あなたのスレッドに一括収集の言及はありません。最新の変更内容で質問を更新してください。誰かがあなたを助けることができます。 1つの質問:なぜあなたはPL/SQL手続きを主張していますか?なぜあなたは単にビューを作成し、それをこの目的のために使用しないのですか? –

答えて

1

v_release_date IN music.release_date%TYPE, 

​​はINパラメータで、読み取り専用になります。プロシージャーに値を代入して戻す場合は、OUT(またはIN OUT)パラメーターにします。

しかし、あなたはまた、持っている:

  • v_rank変数を宣言していません。
  • クエリが複数の行を返す可能性があります。SELECT .. INTO ..は、単一の行を返すクエリに対してのみ機能します。この場合、BULK COLLECT INTOを使用するか、カーソルを戻します。
関連する問題