powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с Seq.currval
25 сообщений из 73, страница 1 из 3
Проблема с Seq.currval
    #33059789
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть такова : есть процедура , в которой поочерёдно делаются insert ....select ....
из основной базы в архив .... в архиве есть последовательность , так вот
запросы в процедуре создаются динамически и выполняются через
EXECUTE IMMEDIATE , в одном запросе выполняется
select rmo.vk_wav_seq.nextval@
,а в другом select rmo.vk_wav_seq.currval@

так вот во втором запросе возникает EXCEPTION и процедура обламывается с ORA-08002: последоват. VK_WAV_SEQ.CURRVAL ещё не определён в этом сеансе
ORA-02063: предшествующий line из [имя].[домен]
result = -8002


как можна побороть эту ошибку ? помогите советом .... мож чё нить не так делаю
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33059891
Pavel Zenkevich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
ORA- 08002  sequence string.CURRVAL is not yet defined in this session

Cause: Sequence CURRVAL has been selected before sequence NEXTVAL.

Action: Select NEXTVAL from the sequence before selecting CURRVAL.

Вывод: нельзя делать select seq.currval, если в этой сессии ни разу не выполнялось select seq.nextval

-------------------------------------------------------
Кто людям помогает - тот тратит время зря. (с) Шапокляк
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33059894
grom66
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для того чтобы выполнилось SQ_CONTRACT.NEXTVAL
необходимо в текущей сесии выполнить хотя бы один раз
SQ_CONTRACT.nextval
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33059941
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel Zenkevich
Код: plaintext
1.
2.
3.
4.
5.
ORA- 08002  sequence string.CURRVAL is not yet defined in this session

Cause: Sequence CURRVAL has been selected before sequence NEXTVAL.

Action: Select NEXTVAL from the sequence before selecting CURRVAL.

это я тоже читал .... но тогда чем характеризуется сессия ? одним запросом (динамическим) ?

Pavel Zenkevich
Вывод: нельзя делать select seq.currval, если в этой сессии ни разу не выполнялось select seq.nextval


или всё таки пределами процедуры ?
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060029
grom66
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пределами сесии.
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060060
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Connected to Oracle8i Enterprise Edition Release  8 . 1 . 6 . 0 . 0  
Connected as igor


SQL> create sequence s1;

Sequence created

SQL> 
SQL> declare
   2   i int;
   3   begin
   4   select s1.currval into i from dual;
   5   end;
   6   /

declare
i int;
begin
select s1.currval into i from dual;
end;

ORA- 08002 : последов. S1.CURRVAL еще не определен в  этом сеансе
ORA- 06512 : íà  line  4 

SQL> 
SQL> declare
   2   i int;
   3   begin
   4   select s1.nextval into i from dual;
   5   end;
   6   /

PL/SQL procedure successfully completed

SQL> 
SQL> declare
   2   i int;
   3   begin
   4   select s1.currval into i from dual;
   5   end;
   6   /

PL/SQL procedure successfully completed

SQL> 

То есть curval определен во всей сессии, а не локально в процедуре
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060061
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grom66Пределами сесии.

логично , а сессия чем определяется ? разве хранимая процедура -- это не одна сессия ????
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060072
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
waspwortТо есть curval определен во всей сессии, а не локально в процедуре

я об этом и говорю , поэтому и не могу понять причину ошибки ..... :-?
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060099
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosiakвозникает EXCEPTION и процедура обламывается с ORA-08002: последоват. VK_WAV_SEQ.CURRVAL ещё не определён в этом сеансе
ORA-02063: предшествующий line из [имя].[домен]как можна побороть эту ошибку ? помогите советом И что постоянно "обламывается"?
Суть в том, что последовательность удалённая . Возможно, между двумя запросами соединение с удалённой БД было разорвано и автоматически восстановлено.
В качестве workaraund-а: nextval можно сохранить в переменной, с которой впоследствии и работать.
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060101
Pavel Zenkevich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
SQL*Plus: Release  9 . 2 . 0 . 5 . 0  - Production on Thu May  12   14 : 09 : 01   2005 

Copyright (c)  1982 ,  2002 , Oracle Corporation.  All rights reserved.

Connected to:
Oracle9i Enterprise Edition Release  9 . 2 . 0 . 5 . 0  - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release  9 . 2 . 0 . 5 . 0  - Production

SQL > set serveroutput on
SQL > declare
   2     a number;
   3   begin
   4     dbms_output.enable;
   5     execute immediate 'select seq_product.nextval@db13 from dual' into a;
   6     dbms_output.put_line('next='||a);
   7     execute immediate 'select seq_product.currval@db13 from dual' into a;
   8     dbms_output.put_line('curr='||a);
   9   end;
  10   /
next= 341 
curr= 341 

PL/SQL procedure successfully completed.

SQL > declare
   2     a number;
   3   begin
   4     dbms_output.enable;
   5     execute immediate 'select seq_product.nextval@db13 from dual' into a
   6     dbms_output.put_line('next='||a);
   7     rollback;
   8     execute immediate 'alter session close database link db13';
   9     execute immediate 'select seq_product.currval@db13 from dual' into a
  10     dbms_output.put_line('curr='||a);
  11   end;
  12   /
next= 346 
declare
*
ERROR at line  1 :
ORA- 08002 : sequence SEQ_PRODUCT.CURRVAL is not yet defined in this session
ORA- 02063 : preceding line from DB13
ORA- 06512 : at line  9 

SQL >

Может есть смысл показать текст процедуры?

-------------------------------------------------------
Кто людям помогает - тот тратит время зря. (с) Шапокляк
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060103
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, в рамках сессии все должно работать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
SQL> connect instructor/instructor@v901
Connected.
SQL> begin
   2     execute immediate 'create table test as select departments_seq.nextval as name, object_name from user_objects';
   3     execute immediate 'update test set name = departments_seq.currval';
   4     commit;
   5   end;
   6   /

PL/SQL procedure successfully completed.

SQL> select * from test;

      NAME OBJECT_NAME
---------- -----------------------------------------------------------------------------------------
     718190  ADD_JOB_HISTORY
     718190  COUNTRIES
     718190  COUNTRY_C_ID_PK
     718190  DEPARTMENTS
     718190  DEPARTMENTS_SEQ
     718190  DEPT_ID_PK
     718190  DEPT_LOCATION_IX
     718190  EMPLOYEES
     718190  EMPLOYEES_SEQ
     718190  EMP_DEPARTMENT_IX
     718190  EMP_DETAILS_VIEW

      NAME OBJECT_NAME
---------- -----------------------------------------------------------------------------------------
     718190  EMP_EMAIL_UK
     718190  EMP_EMP_ID_PK
     718190  EMP_JOB_IX
     718190  EMP_MANAGER_IX
     718190  EMP_NAME_IX
     718190  JHIST_DEPARTMENT_IX
     718190  JHIST_EMPLOYEE_IX
     718190  JHIST_EMP_ID_ST_DATE_PK
     718190  JHIST_JOB_IX
     718190  JOBS
     718190  JOB_HISTORY

      NAME OBJECT_NAME
---------- -----------------------------------------------------------------------------------------
     718190  JOB_ID_PK
     718190  LOCATIONS
     718190  LOCATIONS_SEQ
     718190  LOC_CITY_IX
     718190  LOC_COUNTRY_IX
     718190  LOC_ID_PK
     718190  LOC_STATE_PROVINCE_IX
     718190  REGIONS
     718190  REG_ID_PK
     718190  SECURE_DML
     718190  SECURE_EMPLOYEES

      NAME OBJECT_NAME
---------- -----------------------------------------------------------------------------------------
     718190  TEST
     718190  UPDATE_JOB_HISTORY
У вас подобный код или что-то иное? Может приведете нам полный текст процедуры?
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060155
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм, кстати да, странная фишка с этим динамическим sql. вот ясоздаю 2 процедуры

Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace procedure p is
i INT;
begin
  --execute immediate 'select s1.nextval from dual';
  select s1.nextval INTO i from dual;
end p;

Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace procedure p1 is
i INT;
begin
  --execute immediate 'select s1.currvall from dual';
  select s1.nextval INTO i from dual;
end p1;

далее по очереди вызываю их в одном сеансе сначала p потом p1. так вот, в этом виде все работает нормально, а если раскомментариваю строку с динамическим вызовом, то ругается что curval не определен в данной сессии. Из-за чего такое могет быть???
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060162
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
waspwortхм, кстати да, странная фишка с этим динамическим sql. вот ясоздаю 2 процедуры

Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace procedure p is
i INT;
begin
  --execute immediate 'select s1.nextval from dual';
  select s1.nextval INTO i from dual;
end p;

Код: plaintext
1.
2.
3.
4.
5.
6.
create or replace procedure p1 is
i INT;
begin
  --execute immediate 'select s1.currvall from dual';
  select s1.nextval INTO i from dual;
end p1;

да, во второй процедуре, там nextval читать как currval...

далее по очереди вызываю их в одном сеансе сначала p потом p1. так вот, в этом виде все работает нормально, а если раскомментариваю строку с динамическим вызовом, то ругается что curval не определен в данной сессии. Из-за чего такое могет быть???
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060190
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel Zenkevich Может есть смысл показать текст процедуры?

всю не могу, сорри, но этого куска должно хватить

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Create Or Replace PROCEDURE PROC_NAME
   ( wav_id IN number,
     global_archname IN varchar2,  
     tabname IN varchar2,   
     result   out number 
          )
   IS
   sql_stmt0    VARCHAR2( 255 );
   sql_stmt1    VARCHAR2( 255 );
   sql_stmt2    VARCHAR2( 255 );
   sql_stmt3    VARCHAR2( 255 );
   vk_wav_seq   number;
   ftablename   VARCHAR2( 255 );
   wavlog_name  VARCHAR2( 255 );
   awav_date    date;
   res_wavid    number;
BEGIN
 result:= 0 ; 

--insert to vk_wav
 sql_stmt0:='insert into rmo.vk_wav@'||global_archname||' (wav_id,oldwav_id,hid,';
 sql_stmt1:='imsi,imei,msisdn,wav_date,wav_type,rec_time,fsize,prior1,cnt_sms,rtc,resume1,result,obj_idm,dnrs,cnrs,cells1,cells_time,cells2,cells3,cells4,cells5,cells6,cells7,cells8,cells9,cells10,fcl,dtmf) ';
 sql_stmt2:='select rmo.vk_wav_seq.nextval@'||global_archname||','||TO_Char(wav_id)||',hid,imsi,imei,msisdn,wav_date,wav_type,rec_time,fsize,prior1,cnt_sms,rtc,resume1,result,obj_idm,dnrs,cnrs,cells1,cells_time,';
 sql_stmt3:='cells2,cells3,cells4,cells5,cells6,cells7,cells8,cells9,cells10,fcl,dtmf from rmo.'||tabname||' where  wav_id='||TO_CHAR(wav_id);
 EXECUTE IMMEDIATE sql_stmt0||sql_stmt1||sql_stmt2||sql_stmt3;

--insert to vk_act
   ftablename:=sysadm.convertname('WAV','ACT',tabname);
   sql_stmt0:='insert into rmo.vk_act@'||global_archname||' (wav_id,act,usr_gr) ';
   sql_stmt1:='select rmo.vk_wav_seq.currval@'||global_archname||',act,usr_gr ';
   sql_stmt2:='from rmo.'||ftablename||' where wav_id='||TO_CHAR(wav_id);
  EXECUTE IMMEDIATE sql_stmt0||sql_stmt1||sql_stmt2;
.................................................................
.................................................................
.................................................................
<<U>>
null; 

 COMMIT WORK;
EXCEPTION
    WHEN others THEN
    begin
        DBMS_OUTPUT.put_line (SUBSTR(SQLERRM,  1 ,  150 ));
        result:=SQLCODE;   
        ROLLBACK WORK;
    end;    
END; -- Procedure

надеюсь вы рассмотрите последовательность .....
вот где-то так .....
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060256
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эээ...
Проще поюзать RETURNING INTO.
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060285
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
он жеЭээ...
Проще поюзать RETURNING INTO.

с этого места поподробнее пожалуйста
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060304
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kosiak он жеЭээ...
Проще поюзать RETURNING INTO.

с этого места поподробнее пожалуйста

матчасть.....

Код: plaintext
1.
2.
3.
4.
5.
begin
  -- Test statements here
  INSERT INTO t1 VALUES (s1.nextval) RETURNING id INTO :i;
  INSERT INTO t1 VALUES (:i);
end;
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060338
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема в том , что запросы строятся динамически ...... а инкремент нужен .....
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060347
он же
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kosiakпроблема в том , что запросы строятся динамически ...... а инкремент нужен .....
Насколько я понял, первый инсерт у вас вставляет одну строку?
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060405
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, там вставляется по строке в каждую таблицу за один вызов процедуры
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060410
Фотография Vadim_Maximov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
!
ElicСуть в том, что последовательность удалённая . Возможно, между двумя запросами соединение с удалённой БД было разорвано и автоматически восстановлено.
В качестве workaraund-а: nextval можно сохранить в переменной, с которой впоследствии и работать.
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060430
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть нужно искать другой путь ?
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060442
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kosiakто есть нужно искать другой путь ?

А чем returning или select into не устраивает то???
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060561
kosiak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
waspwortА чем returning или select into не устраивает то???

я объясню ..... путь к базе передаётся в виде переменной , то есть строка запроса формируется динамически , для того чтобы сделать select into нужно в динамическую строку вплести переменную ,или же создавать курсор, поэтому я и прошу мне помочь , так как не до конца понимаю , как правильно это сделать ......
...
Рейтинг: 0 / 0
Проблема с Seq.currval
    #33060621
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kosiak waspwortА чем returning или select into не устраивает то???

я объясню ..... путь к базе передаётся в виде переменной , то есть строка запроса формируется динамически , для того чтобы сделать select into нужно в динамическую строку вплести переменную ,или же создавать курсор, поэтому я и прошу мне помочь , так как не до конца понимаю , как правильно это сделать ......

и судя по всему global_archname и есть та самая переменная? А сколько она может принимать значений? Если немного, то почему бы не написать в лоб, что нить вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
case global_archname
      'db1': insert into t1@db1....
      'db2': insert into t1@db2....
       .....
      'dbn': insert into t1@dbn....
end case;


или я опять чего не понял?
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с Seq.currval
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]