0

PL/SQLのVARRAY関数で変数を介して文字列値を渡す方法。

コーディング:

create or replace
PROCEDURE dynamic_query_build
(
    vr_plan_sku_id     IN VARCHAR2
)
IS
  type plan_sku_id_array IS VARRAY(999) OF VARCHAR2(5000);
  plan_sku_id plan_sku_id_array;
  total integer;
  vrx_plan_sku_id VARCHAR2(3000);

BEGIN
  vrx_plan_sku_id:= replace(vr_plan_sku_id,',',chr(39)||','||chr(39));
  vrx_plan_sku_id:=chr(39)||vrx_plan_sku_id||chr(39);
  --plan_sku_id := plan_sku_id_array('Apple','Apple','Orange','Banana');
  dbms_output.put_line(vrx_plan_sku_id);
  plan_sku_id := plan_sku_id_array(vrx_plan_sku_id);

  total := plan_sku_id.count;
  dbms_output.put_line('Array count: 'total);

EXCEPTION
    WHEN OTHERS THEN
    raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END dynamic_query_build;

実行:

set serveroutput on;
declare
vr_plan_sku_id varchar2(200) := 'Apple,Apple,Orange,Banana';
BEGIN
   dynamic_query_build(vr_plan_sku_id);
END;
/

私の出力:

配列数: 1

期待される出力:

配列数: 4

説明: "plan_sku_id_array('Apple','Apple','Orange','Banana')" のような文字列値を渡すと、カウント値が 4 になります。しかし、同じ文字列を変数に渡すと、 varray 内の単一の値として全体の値を考慮しています。

4

2 に答える 2

0

入力パラメーターを ( に基づいて) サブストリング化し、この投稿,のようなことを行う必要があります(たとえば、 then を呼び出します)。入力パラメーターにまだ何らかの値がある限り、拡張と追加を続けますEXTEND();ary(count)= value

于 2013-07-30T14:24:38.363 に答える