-1

私はオラクルの広大な世界に不慣れです。私がやろうとしているのは、ストアド プロシージャを作成し、その結果を取得することです。私の手順は次のようになります

Create or Replace Procedure usp_RotaPlateProductie_Select(
afdelingId in varchar2,
productTypeId in varchar2,
productieData out sys_refcursor)
IS 
Begin
Open productieData for
Select Rotaplateproductie.Batchnummer, Cpiplusproductieorder.Productnummer,
    Product.Omschrijving, Productieresultaatrtplrol.Bruto_In_Meters
    From Rotaplateproductie inner join Productieresultaatrtplrol on
    Rotaplateproductie.Batchnummer = Productieresultaatrtplrol.Batchnummer 
    inner join Cpiplusproductieorder on 
    Productieresultaatrtplrol.ProductieNummer =  Cpiplusproductieorder.ProductNummer 
    inner join Product on
    Cpiplusproductieorder.Productnummer = Product.Productnummer
    Where Rotaplateproductie.Afdelingid = '3144' and Rotaplateproductie.producttype = 'PT005'   
END;

そして、以下のコードを使用して実行しようとしています。

var rc REFCURSOR
EXEC usp_RotaPlateProductie_Select('3144','PT005', :rc);

上記の行を実行すると、Ora:00900 エラーが発生します。

プロシージャのクエリ部分を実行すると、正常に実行されますが、プロシージャを使用するとエラーが発生します。

4

2 に答える 2

1

Shareef が指摘したように、プロシージャ内のステートメントにセミコロンがありませんが、実際に適切に作成しているようには見えません。/オラクルにコードを実行して実際に作成するように指示するには、手順の後に必要です。varandexecステートメントを単一の呼び出しの一部と見なしていると思いますが、これは正しくありません。しかし、これをどのように実行しているのかもわかりません。SQL Developer の場合は、単に「実行」するのではなく、「スクリプトを実行」(F5) する必要があります。

Create or Replace Procedure usp_RotaPlateProductie_Select(
    p_afdelingId in varchar2,
    p_productTypeId in varchar2,
    p_productieData out sys_refcursor)
IS 
Begin
    Open p_productieData for
        Select Rotaplateproductie.Batchnummer, Cpiplusproductieorder.Productnummer,
            Product.Omschrijving, Productieresultaatrtplrol.Bruto_In_Meters
        From Rotaplateproductie
        inner join Productieresultaatrtplrol on
            Rotaplateproductie.Batchnummer = Productieresultaatrtplrol.Batchnummer 
        inner join Cpiplusproductieorder on 
            Productieresultaatrtplrol.ProductieNummer = Cpiplusproductieorder.ProductNummer 
        inner join Product on
            Cpiplusproductieorder.Productnummer = Product.Productnummer
        Where Rotaplateproductie.Afdelingid = p_afdelingId
        and Rotaplateproductie.producttype = p_productTypeId; 
END;
/
var rc REFCURSOR
EXEC usp_RotaPlateProductie_Select('3144','PT005', :rc);
print :rc

IN パラメーターを使用するように切り替えました。パラメーターと列名を区別できるように、自由に名前を変更しました。それらは同じであり、混乱を招く可能性があります。

テーブルに別名を付けると便利な場合もあります。機能的な違いはありませんが、読みやすいかもしれません:

Create or Replace Procedure usp_RotaPlateProductie_Select(
    p_afdelingId in varchar2,
    p_productTypeId in varchar2,
    p_productieData out sys_refcursor)
IS 
Begin
    Open p_productieData for
        Select rp.Batchnummer, cppo.Productnummer,
            p.Omschrijving, pra.Bruto_In_Meters
        From Rotaplateproductie rp
        inner join Productieresultaatrtplrol par
            on rp.Batchnummer = pra.Batchnummer 
        inner join Cpiplusproductieorder cppo
            on pra.ProductieNummer = cppo.ProductNummer 
        inner join Product p
            on cppo.Productnummer = p.Productnummer
        Where rp.Afdelingid = p_afdelingId
        and rp.producttype = p_productTypeId; 
END;
/

プロシージャが警告付きでコンパイルされたというメッセージが表示された場合は、「エラーを表示」を実行して詳細を取得します。

于 2012-06-28T11:28:15.420 に答える
0

コードを実行しましたか

Select Rotaplateproductie.Batchnummer, Cpiplusproductieorder.Productnummer,
    Product.Omschrijving, Productieresultaatrtplrol.Bruto_In_Meters
    From Rotaplateproductie inner join Productieresultaatrtplrol on
    Rotaplateproductie.Batchnummer = Productieresultaatrtplrol.Batchnummer 
    inner join Cpiplusproductieorder on 
    Productieresultaatrtplrol.ProductieNummer =  Cpiplusproductieorder.ProductNummer 
    inner join Product on
    Cpiplusproductieorder.Productnummer = Product.Productnummer
    Where Rotaplateproductie.Afdelingid = '3144' and Rotaplateproductie.producttype = 'PT005'

私はそれが動作します 返信してください 最後にセミコロンを見逃していると思います

;

@Mavrik編集

クエリの最後にセミコロンを追加すると、プロシージャが正しく作成されます。ありがとうございますが、以下のコードを使用して実行しようとすると、同じエラーコードが返されます

var rc REFCURSOR EXEC usp_RotaPlateProductie_Select('3144','PT005', :rc);

更新 1: ora 00900 がある場合、それが原因である可能性があります

Oracle/PLSQL: ORA-00900 エラー

于 2012-06-28T10:12:09.463 に答える