2017-11-20 11 views
-2
create or replace PROCEDURE find_Doctor (p_SSN in number) AS 

    BEGIN 
    select drName, drPhone 
    from clients 
    where SSN = p_SSN; 

END find_Doctor; 

私はこのストアドプロシージャを持っており、その呼び出しから結果のテーブルを出力したいだけです。一時テーブルを宣言することなくこれを行う簡単な方法はありますか?私はそれをJavaプログラムから呼び出さなければならないので、通常のSQLクエリであることはできません。エラー(4,5):PLS-00428:このSELECT文でINTO句が必要です

+0

問題は、Javaコンソールに出力する必要があることです。 – WMS

+1

Javaプログラムから 'preparedStatenent'と' resultSet'を使って通常のSQLクエリを呼び出せないのはなぜですか? –

答えて

0

Procedureの場合、resultの出力をSQLにするには、variableが必要です。その後、変数を使用することができます。これを使用します。

CREATE OR REPLACE PROCEDURE find_Doctor (p_SSN IN NUMBER) 
AS 
    var_nm VARCHAR2 (100); 
    var_ph NUMBER; 
BEGIN 
    SELECT drName, drPhone 
    INTO var_nm, var_ph 
    FROM clients 
    WHERE SSN = p_SSN; 

DBMS_OUTPUT.put_line ('Doc Name - ' || var_nm || 'Doc Ph. No-' || var_ph); 
END find_Doctor; 

編集:私は Javaプログラムからそれを呼び出す必要がありますので、私はちょうどすることはできません

は、通常のSQLクエリです。

次に、SYS_REFCUSORを使用して結果を返すことができます。この結果は、JDBC ResultSetにマップできます。

CREATE OR REPLACE PROCEDURE find_Doctor (p_SSN IN  NUMBER, 
             VAR  OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN VAR FOR 
     SELECT drName, drPhone 
     FROM clients 
     WHERE SSN = p_SSN; 
END find_Doctor; 
+0

downvoteの理由。あなたの意見をここで表現してください。 – XING

+0

varをResultSetにどのようにマップするのですか?それは 'ResultSet rs = call.executeQuery()'ではないのですか? – WMS

+0

@WMSこのhttps://stackoverflow.com/questions/3572626/calling-stored-procedure-from-java-jpaまたはgoogleダウンを読むことができます。 – XING

0

あなたは、パラメータdrNameとdrPhoneを定義する必要があります。

create or replace PROCEDURE find_Doctor (p_SSN in number, p_drName OUT 
VARCHAR2, p_drPhone OUT VARCHAR2) AS 
BEGIN 
    select drName, drPhone 
    into p_drName, p_drPhone 
    from clients 
    where SSN = p_SSN; 
END find_Doctor; 
0

簡単な方法は、それのためにあなたが使用しているツールやベストプラクティスを学ぶことです。

私にとっては、無意味な手順を削除し、必要なデータだけを選択することをお勧めします。しかし、「SPのみ」のアプローチを遵守している場合は、REPLカーソルを使用して必要なデータを取得できます。

create or replace function find_Doctor (p_SSN in number) 
    return sys_refcursor as 

    v_result sys_refcursor; 

BEGIN 
    open v_result for 
    select drName, drPhone 
    from clients 
    where SSN = p_SSN; 
    return v_result; 
END find_Doctor; 
関連する問題