3

現在、ABAP オブジェクトを介して HANA のデータベース プロシージャを作成しています。他の開発者がテーブルから読み取らなければならないテーブルではなく、選択から計算されたスカラー値を返したいと思います。パラメーターのインポート/エクスポートを使用して、ストア プロシージャで使用する変数を宣言しないことをお勧めします。

methods: _amdp_previous_years
    importing value(mandt) type mandt
              value(in_object) type j_objnr
              value(in_year) type gjahr
    exporting value(out_results) type total_table
              value(out_total) type f.

 

method _amdp_previous_years  by database procedure for hdb
    language sqlscript options read-only
    using rpsco.

    declare totals double array;

    declare out_array double array;

    -- begin of totals,
    --    total type float,
    -- end of totals,
    -- out_results = type table of totals
    out_results = select sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
                         sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
                         sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
                         sum( wlp16 ) as total from rpsco
                   where objnr = :in_object
                     and gjahr = :in_year;
    totals := array_agg( :out_results.total );
    out_total := :totals[1];

    -- Type not declared
    -- in sap = wlp01 = curr(15,2)
    -- total is not a decimal
    -- total is not a double
    -- total is not a float
    -- total is not a int
    -- total is not a real
    -- what is total supposed to be then?
    results = select sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
                     sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
                     sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
                     sum( wlp16 ) as total from rpsco
               where objnr = :in_object
                 and gjahr = :in_year;
    out_array := array_agg( :results.total );              


endmethod.

最初のステートメントは問題なく動作します。おそらく、選択の結果が ABAP float として宣言されたフィールドに配置されるからでしょう。

2 番目の選択が機能し、結果が入力されますが、列にアクセスする方法がわかりません。SAP データ要素は CURRENCY フィールド (15,2) です。ドキュメントにあるすべてのスカラー型を試しました。正しいタイプではないという同じエラーを受け取りました。

型が事前に明示的に定義されていないため、これは不可能ですか? チュートリアルでインターネットを見ていると、人々は CREATE TYPE または CREATE TABLE の使用を提案していますが、これらのステートメントを使用しようとすると構文エラーが発生します。

4

1 に答える 1

2

他の誰かがこれに出くわした場合に備えて、私はこれに答えることができます。to_double( )、to_integer( ) などのさまざまな関数を使用して、列を型キャストできます。選択は次のようになります。

    results = select to_double( sum( wlp01 ) + sum( wlp02 ) + sum( wlp03 ) + sum( wlp04 ) + sum( wlp05 ) +
                                sum( wlp06 ) + sum( wlp07 ) + sum( wlp08 ) + sum( wlp09 ) + sum( wlp10 ) +
                                sum( wlp11 ) + sum( wlp12 ) + sum( wlp13 ) + sum( wlp14 ) + sum( wlp15 ) +
                                sum( wlp16 ) ) as total from rpsco
               where objnr = :in_object
                 and gjahr < :in_year;
于 2015-03-25T15:03:13.920 に答える