sql >> Databasteknik >  >> RDS >> Oracle

exekvera omedelbar ändringssekvens fungerar inte

Båda alter sequence uttalanden fungerar, det är ökningen däremellan som inte händer. nextval anropet i din loop utvärderas inte eftersom select-satsen inte skickar sin utdata någonstans. Från dokumentationen , en anteckning som råkar hänvisa till exakt vad du gör:

Så du måste välja det värdet till något:

declare
 st VARCHAR(1024);
 val number;
begin
  for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1000';
      execute immediate st;
      st := 'select ' || x.sequence_name ||  '.nextval from dual';
      execute immediate st into val;
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1';
      execute immediate st;
  end loop;
end;
/

Jag har lagt till ett val variabel och en into val sats på den andra exekvera omedelbart.

För att visa att det fungerar nu:

create sequence s42;

Sequence s42 created.

declare
 st VARCHAR(1024);
 n number;
begin
  for x in (SELECT sequence_name FROM USER_SEQUENCES) loop
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1000';
      execute immediate st;
      st := 'select ' || x.sequence_name ||  '.nextval from dual';
      execute immediate st into n;
      st := 'ALTER SEQUENCE ' || x.sequence_name ||  ' INCREMENT BY 1';
      execute immediate st;
  end loop;
end;
/

anonymous block completed

select s42.nextval from dual;

   NEXTVAL
----------
      1001 

Utan into klausul, detta kom tillbaka med 1 istället för 1001, vilket är vad du ser.



  1. Hur får man MySQL Connector/J att fungera på Android?

  2. Hur begränsar man en databastabell så att bara en rad kan ha ett visst värde i en kolumn?

  3. Krävs normalt MySql-index när vi har Composite-index

  4. Kontrollera Oracle RAC Network och IP-information