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 内の単一の値として全体の値を考慮しています。