2016-08-18 8 views
0

以下のprocを作成して、1つのテーブルからすべてのデータを読み取り、それを.net形式のグリッドに読み込むようにしました。oracleバルクを収集してデータを読み取る

DECLARE 
    v_batchstatus XEVMPD_SUBMITTEDBATCH%ROWTYPE; 
    BEGIN 

    EVMPDADM.GETALLBATCHES_ARTICLE_57(v_batchstatus); 
    DBMS_OUTPUT.PUT_LINE(v_batchstatus.Batch_id || ' ' || v_batchstatus.BATCH_DESCRIPTION || ' ' || v_batchstatus.STATUS || ' ' ||v_batchstatus.RECORD_STATUS || ' ' ||v_batchstatus.NUMBER_OF_RECORDS); 

    END; 
/

しかし、このプロセスから、私は最後の行のみを取得しています:procは罰金、私はPL-SQLブロックの下に使用してデータを印刷しようとした実行されているかどうかをテストするために

CREATE OR REPLACE PROCEDURE EVMPDADM.GETALLBATCHES_ARTICLE_57(p_batchstatus OUT XEVMPD_SUBMITTEDBATCH%ROWTYPE) 
IS 

TYPE batch_status IS TABLE OF XEVMPD_SUBMITTEDBATCH%ROWTYPE INDEX BY PLS_INTEGER; 
l_batchstatus batch_status; 

BEGIN 

SELECT * BULK COLLECT INTO l_batchstatus FROM XEVMPD_SUBMITTEDBATCH ; 

    FOR i IN 1..l_batchstatus.count LOOP 

    p_batchstatus:= l_batchstatus(i); 

    END LOOP; 

END GETALLBATCHES_ARTICLE_57; 

。 テーブルにあるすべてのレコードを印刷したいとします。 上記のコードで何が間違っているか把握してください。

+0

まず、プロシージャは取得した任意の最終行のデータのみを返します。結果セットを生成して1つの行以外のすべてを破棄し、どの行が保持されているかは気にしないようにデータをフェッチすることに苦労することはほとんどありません。第二に、 '%rowtype'変数を' dbms_output.put_line'に渡すことはできません。あなたは(v_batchstatus.col1 ||「」|| || v_batchstatus.col2 ...)特定のスカラ属性、すなわち 'DBMS_OUTPUT.PUT_LINEを渡すことができ;'しかし、あなたは、あなたが見たい属性を列挙する必要があると思います。 –

答えて

0

エラーメッセージは非常に明白です。

  1. EVMPDADM.GETALLBATCHES_ARTICLE_57の引数が間違っています:1つのOUTパラメータがあります。したがって、そのパラメータを渡す必要があります。
  2. DBMS_OUTPUT.PUT_LINEの引数の型が間違っています:XEVMPD_SUBMITTEDBATCH%ROWTYPEではなく、VARCHAR2というパラメータが1つあります。だから、それがあるべきこの方法をhere

を読む:

DECLARE 
    v_batchstatus XEVMPD_SUBMITTEDBATCH%ROWTYPE; 
    BEGIN 

    v_batchstatus:= EVMPDADM.GETALLBATCHES_ARTICLE_57(v_batchstatus); 
    --use DBMS_OUTPUT.PUT_LINE for every column of XEVMPD_SUBMITTEDBATCH separately after you convert them to varchar2 if they are not. 

END; 
/

また、手順はこの方法が唯一の最後の行が返されます。だからあなたはそれを変更したいかもしれません。

あなたがテーブルからすべてのレコードを印刷したい場合は、ループ内DBMS_OUTPUT.PUT_LINEを追加する必要があり、それは次のようになります:

col1, col2, ...は、彼らがである与えられた XEVMPD_SUBMITTEDBATCHの列名です
FOR i IN 1..l_batchstatus.count LOOP 

p_batchstatus:= l_batchstatus(i); 

dbms_output.put_line(p_batchstatus.col1 || ' ' || p_batchstatus.col2 || ...); 

END LOOP; 

VARCHAR2型。または、余分な処理が必要です

+0

私はpl-sqlブロックを修正しました。 outパラメータを正しく処理することを忘れて、印刷中に属性名を使用していなかったのは間違いでした。 – Jig232

+0

質問を更新しました。テーブルからすべてのレコードを印刷する方法を教えてください。 – Jig232

+0

おかげホーク:) は、実は問題は、我々は、.NETフォーム でグリッドビューでこのデータを表示したいので、私は.NETを知らないと私はどのように確認していない私は、パラメータとして、すべてのデータが必要です私のチームメイトは、このデータをグリッドとして表示する予定です。彼はちょうど私にデータを読んで、それをoutパラメータとして送るprocを書くように頼んだ。 – Jig232

関連する問題