私は以下の問題を解決しようとしています: 3列: user_id、 月 値で構成されるテーブルを準備する必要があります。 200人以上の各ユーザーは、LOB、CHANNEL、SUBSIDIARYの期待値を決定するパラメータの値が異なります。そこでテーブルASYSTENT_GOALS_SETに格納することにしました。しかし、私は行を掛けないようにしたいので、すべての条件を "Where"節でさらに使うコードの一部として入れてもいいと思っていました。したがって 、一例として - の代わりに複数行の:私はこのようなエントリを作成プロシージャ内で使用するために、コードの一部をテーブルに文字列として入れる方法はありますか?
:
これまでのところ、私は(私は特定のユーザのため月と値を収集する)テストテーブルASYSTENT_TESTを作成。私はBULK COLLECTを使った手続きを書いた。
declare
type test_row is record
(
month NUMBER,
value NUMBER
);
type test_tab is table of test_row;
BULK_COLLECTOR test_tab;
p_lob varchar2(10) :='GOSP';
p_sub varchar2(14);
p_ch varchar2(10) :='BR';
begin
select subsidiary into p_sub from ASYSTENT_GOALS_SET where user_id='40001001';
execute immediate 'select mc, sum(ppln_wartosc) plan from prod_nonlife.mis_report_plans
where report_id = (select to_number(value) from prod_nonlife.view_parameters where view_name=''MIS'' and parameter_name=''MAX_REPORT_ID'')
and year=2017
and month between 7 and 9
and ppln_jsta_symbol in (:subsidiary)
and dcs_group in (:lob)
and kanal in (:channel)
group by month order by month' bulk collect into BULK_COLLECTOR
using p_sub,p_lob,p_ch;
forall x in BULK_COLLECTOR.first..BULK_COLLECTOR.last insert into ASYSTENT_TEST values BULK_COLLECTOR(x);
end;
だから今、テーブルASYSTENT_GOALS_SET列子会社(varchar型)に(子会社の一つのコードである)文字列12_00_00すべてが正常に動作する構成されていたとき。しかし問題は、ユーザーが2つの子会社で働いている場合です。たとえば、12_00_00と13_00_00です。私はそれを書き留める方法を知りません。子会社の列が構成される必要があります: 「12_00_00」、「13_00_00」 または 「12_00_00」、「13_00_00」私はシングルでDeling」のようなトピックに掘った後、多くのオプションを試してみました13_00_00 または多分 12_00_00' を、 '/エスケープ/ダブルqoutes "。 おそらく実行時に何かを変更する必要がありますか?
おそらく私のアプローチは、最初から完全に間違っています(うまくいけば:))。 私はサポートに感謝します。私は表関数を作成していない
私が正しく理解していれば、動作していない部分は 'ppln_jsta_symbol in(:subsidiary)'でしょうか? – Dessma
はいDessma、まさに。上記のASYSTENT_GOALS_SET列のサブセットの試行とは別に、私はppln_jsta_symbolのコードをsubsidiaryに入れて、 '12_00_00'、 '13_00_00'をSUBSIDIARYに入れようとしました。私はまた、regexp_substrを使用して、私の文字列からSUBSIDIARY列を読み込み、行を作成しようとしましたが、成功しませんでした。 –
現時点でデータベースにアクセスできないため、実際の例を書くことはできませんが、答えの大部分は「TABLE関数を使用する」ヘッダーのセクションにあります。https:// www.oratechinfo.co.uk/delimited_lists_to_collections.html#plsql_function 基本的には、要素の文字列をTABLEに変換し、NOT IN(SELECT * FROM TABLE(f_convert(yourString))))を使用することができます。希望は意味をなさない。 – Dessma