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

изпълнение на незабавна промяна последователност не работи

И двете alter sequence изявленията работят, това е увеличението между тях, което не се случва. nextval повикването във вашия цикъл не се оценява, защото командата select не изпраща изхода си никъде. От документацията , бележка, която се отнася точно до това, което правите:

Така че трябва да изберете тази стойност в нещо:

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;
/

Добавих val променлива и into val клауза на второто изпълнение незабавно.

За да демонстрирате, че работи сега:

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 

Без into клауза, това се върна с 1, а не с 1001, което виждате.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Можем ли да имаме множество WITH AS в един sql - Oracle SQL

  2. Мога ли да копирам псевдозаписи :OLD и :NEW в/в съхранена процедура на Oracle?

  3. Интегриране на ServiceNow с Oracle Identity Cloud Service (IDCS)

  4. Oracle Database 20c Нови функции

  5. JCombobox не се показва