Oracle
 sql >> база данни >  >> RDS >> Oracle

как можем да получим стойността на VARRAY от IN параметър в процедурата

Създадох анонимен блок с процедура dynamic_query_build. Добавен там код, който ще раздели променливата VARCHAR2 на променлива. Мисля, че ключът към въпроса ви е този ред - plan_sku_id.EXTEND(); Можете да разширите променливата динамично, но само докато достигне дефинирания максимум (във вашия случай - 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. създайте Oracle View за сравняване на данни въз основа на условия

  2. DBD::Инсталацията на Oracle причинява грешка

  3. нула за NUMBER_ARRAY не работи

  4. ORA-20001 в R12 Съберете статистически данни за схемата на 11g(FND_HISTOGRAM_COLS)

  5. Декларация на Oracle, обяснена със съвети и примери