2016-12-07 3 views
0

IDを入力として与えられたときにデータベースに名前が表示される回数を表示する手続きを書くのに問題があります。たとえば、1を入力すると、データベースで2回発生する姓に対応するので、 '2'が出力されます。私の質問は、名前が最後に出現する回数を表示する方法がわかりません。ベローは私がこれまで持っていたコードです。変数を宣言し、プロシージャを呼び出して入力と出力を表示する匿名プログラムを作成します。

CREATE OR REPLACE PROCEDURE ZRBIDInput (StudentID IN VARCHAR2) 
IS 
numberOfStudents NUMBER; 
var_lastname varchar2(10); 
BEGIN 
DBMS_OUTPUT.ENABLE; 

SELECT Lastname INTO var_lastname  
FROM ZRB_STUDENT 
WHERE ID = StudentID; 

SELECT COUNT (*) 
INTO numberOfStudents 
FROM ZRB_STUDENT 
WHERE Lastname = var_lastname; 

dbms_output.put_line('Num Of Students - '||numberOfStudents); 

END ZRBIDInput; 
/

BEGIN 
ZRBIDInput('1'); 
ZRBIDInput('6'); 
ZRBIDInput('7'); 
END; 
/

答えて

0

Oracleに手続きを書くことができます。これは入力として1をとり、Id=1の学生と同じ姓のすべてのstuedntsをリストダウンします。

CREATE OR REPLACE PROCEDURE ZRBIDInput (StudentID IN VARCHAR2) 
IS 
    numberOfStudents NUMBER; 
BEGIN 
    SELECT COUNT (*) 
    INTO numberOfStudents 
    FROM ZRB_STUDENT 
    WHERE Lastname = (SELECT Lastname  
         FROM ZRB_STUDENT 
         WHERE ID = StudentID); 

    dbms_output.put_line('Num Of Students - '||numberOfStudents); 


END ZRBIDInput; 

実行;

SQL> exec ZRBIDInput('1'); 
     2 
+0

私に正しい方向を教えていただきありがとうございます。これは私が今働いているコードです。 私は上記のコードを更新して動作します。 – rdend

0

Q:「最後に表示する方法...」

DBMS_OUTPUTバッファの内容を表示するには、クライアントがバッファから読み込み、表示を行う必要があります。

我々はSQL * Plusのコマンドライン・クライアントから実行している場合、我々は、匿名ブロックを実行する前に、我々は

set serverout on 

文を発行することができます。これを実現するには、ストアドプロシージャを呼び出す前に、実際のシンプルなものに書き留めておきます。

SQL> set serverout on 

SQL> begin dbms_output.put_line('Hello World!); end; 
    >/

期待どおりに機能していることを確認してください。次に、何かを表示し、ストアドプロシージャを呼び出すなど、何かをより便利に表示することに移ります。

参考:http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve040.htm#SQPUG099

注:これは、SQL * Plusのコマンドライン・クライアントに適用されます。他のクライアント(例えば、T.O.A.D)は、DBMS_OUTPUTバッファの内容を表示するための他の機構を有する。

+0

正確にはわかりませんが、それに応じてコードを編集しました。 – rdend

+0

'put_line'プロシージャは' DBMS_OUTPUT'バッファに行を挿入します。バッファからデータを取得するための対応する 'get_lines'プロシージャがあります。したがって、クライアントプログラムは 'dbms_output.get_lines'プロシージャの呼び出しを実行し、出力を取り出して表示する必要があります。その機能はSQL * Plusクライアントに組み込まれており、 'SET SERVEROUTPUT ON'コマンドで有効にすることができます。注:これは、クライアントの動作に影響を与えるSQL \ * Plusコマンドです。それはSQL文ではありません。 (この答えは、 'dbms_output.put_line'を表示するという質問にのみ対応しています。) – spencer7593

関連する問題