Oracle
 sql >> Baza danych >  >> RDS >> Oracle

jak możemy uzyskać wartość VARRAY z parametru IN w procedurze?

Stworzyłem anonimowy blok za pomocą procedury dynamic_query_build. Dodany tam kod, który podzieli zmienną VARCHAR2 na varray.Myślę, że kluczem do twojego pytania jest ta linia - plan_sku_id.EXTEND();Możesz rozszerzać varray dynamicznie, ale tylko do określonego maksimum (w twoim przypadku - 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. Jak opisać tabelę w Oracle bez użycia polecenia DESCRIBE?

  2. ORA-02287:numer sekwencji jest tutaj niedozwolony

  3. Wybierz dwie kolumny z tej samej tabeli z różnymi warunkami WHERE

  4. Używanie STAREGO i NOWEGO obiektu do dynamicznych operacji wewnątrz wyzwalacza

  5. ora-06553 pls-306 zła liczba lub typy argumentów w wywołaniu 'ogc_x'