Ошибка обновления оператора с использованием нескольких операторов FOR LOOP - PullRequest
0 голосов
/ 03 ноября 2019
DECLARE
   TYPE Outer_Loop IS TABLE OF VARCHAR2 (4000);
   TYPE Inner_Loop IS VARRAY (50) OF VARCHAR2 (50 Byte)

   OL Outer_Loop := Outer_Loop ('1','2');
   IL Inner_Loop := Inner_Loop ('ONE','TWO','THREE','FOUR')

BEGIN
   FOR I IN 1 .. OL.COUNT
   LOOP
      EXECUTE IMMEDIATE
            'UPDATE User_'
         || OL (I)
         FOR J IN 1 .. IL.COUNTER
         LOOP
         || 'set  Number = '
         || IL (J);

      DBMS_OUTPUT.PUT_LINE (
         'IN User_' || OL(I) || 'set Number AS' || IL (J) );

   END LOOP;

   COMMIT;
END;

Ожидаемый результат: я хочу обновить каждого пользователя ОДИН, ДВА, ТРИ, ЧЕТЫРЕ. Итак, результат, который я ожидаю, будет

IN User_1 set Number AS ONE 
IN User_1 set Number AS TWO
IN User_1 set Number AS THREE
IN User_1 set Number AS FOUR
IN User_2 set Number AS ONE
IN User_2 set Number AS TWO
IN User_2 set Number AS THREE
IN User_2 set Number AS FOUR

1 Ответ

0 голосов
/ 03 ноября 2019

FOR I IN 1 .. OL.COUNT
LOOP ВЫПОЛНИТЬ НЕМЕДЛЕННО 'ОБНОВЛЕНИЕ User_' ||OL (I) для J в 1 .. IL.COUNTER LOOP ||'set Number =' ||IL (J);

Неправильное выполнение цикла внутри цикла. Вы можете сделать это, как показано ниже:

DECLARE
  TYPE outer_loop IS TABLE OF VARCHAR2(4000);
  TYPE inner_loop IS VARRAY ( 50 ) OF VARCHAR2(50 Byte);
  ol   outer_loop := outer_loop('1','2');
  il   inner_loop := inner_loop('ONE','TWO','THREE','FOUR');
  v_sql  varchar2(500);
BEGIN
  FOR i IN 1..ol.count --<-- Outer loop
  LOOP
    for j in 1..il.count  --<--Inner loop
      loop                       
      v_sql:='UPDATE User_' || ol(i)|| ' set  Number = ' || il(j);

      dbms_output.put_line(v_sql); -- Preparing dynamic statement

      EXECUTE IMMEDIATE v_sql; --<--Executing

      dbms_output.put_line('IN User_' || ol(i) || 'set Number AS' || il(j) );
    end loop;
  end loop;    
  commit;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...