Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

bagaimana kita bisa mendapatkan nilai VARRAY dari IN Parameter dalam prosedur

Saya membuat blok anonim dengan prosedur dynamic_query_build. Menambahkan kode di sana, yang akan membagi variabel VARCHAR2 menjadi varray. Saya pikir, kunci pertanyaan Anda adalah baris ini - plan_sku_id.EXTEND();Anda dapat memperluas varray secara dinamis, tetapi hanya sampai mencapai maksimum yang ditentukan (dalam kasus Anda - 999) .

DECLARE
vr_plan_sku_id varchar2(200) := '5863314,5863315';
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;

position PLS_INTEGER := 0;
last_position PLS_INTEGER := 1;
tmp VARCHAR2(5000);
counter PLS_INTEGER := 1;
BEGIN
  plan_sku_id := plan_sku_id_array();
  LOOP
    position := INSTR(vr_plan_sku_id, ',', last_position);
    IF position > 0 THEN
      tmp := SUBSTR(vr_plan_sku_id, last_position, position - last_position);
      last_position := position + 1;
    ELSE
      tmp := SUBSTR(vr_plan_sku_id, last_position);
    END IF;
    plan_sku_id.EXTEND();
    plan_sku_id(counter) := tmp;
    counter := counter + 1;
    EXIT WHEN position = 0 OR counter > 10;
  END LOOP;
  total          := plan_sku_id.count;
  FOR i          IN 1 .. total
  LOOP
    dbms_output.put_line(plan_sku_id(i));
  END LOOP;
EXCEPTION
WHEN OTHERS THEN
  raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END dynamic_query_build;
BEGIN
   dynamic_query_build(vr_plan_sku_id);
END;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan subquery dalam pernyataan Periksa di Oracle

  2. Kesalahan Ketidakcocokan Set Karakter di Oracle

  3. Rails 3.0.3 - Oracle_enhanced tidak berfungsi

  4. Simpan data tanggal-waktu sebagai angka

  5. Pemicu hanya untuk nilai yang diubah