powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом.
52 сообщений из 52, показаны все 3 страниц
Курсор. Помогите с запросом.
    #39829518
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Вот запрос:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SET SERVEROUTPUT ON;
DECLARE 
  CURSOR bornRec IS 
     SELECT * FROM BORN
        WHERE DATREG between TO_DATE('23.08.1936','DD/MM/YYYY') AND TO_DATE('29.03.1955', 'DD/MM/YYYY');
  rec BORN%ROWTYPE; 
  KDR_FIRST_ID INTEGER;
BEGIN
  OPEN bornRec;
  LOOP    
    fetch bornRec into rec;
    exit when bornRec%NOTFOUND;
    SELECT KODRA_FIRST INTO KDR_FIRST_ID FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;   
    dbms_output.put_line(KDR_FIRST_ID);
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Progress END....');
END



Выдает ошибку следующую, но в конце ошибки информация выходит, в чем может быть причина, что делаю не так, не пойму???

Код: plsql
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.
Error starting at line : 4 in command -
DECLARE 
  CURSOR bornRec IS 
     SELECT * FROM BORN
        WHERE DATREG between TO_DATE('23.08.1936','DD/MM/YYYY') AND TO_DATE('29.03.1955', 'DD/MM/YYYY');
  rec BORN%ROWTYPE; 
  KDR_FIRST_ID INTEGER;
BEGIN
  OPEN bornRec;
  LOOP    
    fetch bornRec into rec;
    exit when bornRec%NOTFOUND;
    SELECT KODRA_FIRST INTO KDR_FIRST_ID FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;   
    dbms_output.put_line(KDR_FIRST_ID);
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Progress END....');
END;
Error report -
ORA-01403: no data found
ORA-06512: at line 12
01403. 00000 -  "no data found"
*Cause:    
*Action:
51454
51454
51454
50098
50098
........
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829522
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
 TO_DATE('23.08.1936','DD/MM/YYYY')
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829525
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

авторORA-01403: no data found
забей это в гугл и читай
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829529
AserYZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так много вопросов, так мало ответов...
Зачем нужен вложенный запрос? Чем не подходит обьединение (какое, решите сами)?
Тип объединения автоматически определит вам логику, что делать если вложенный запрос не возвращает ни одной записи (как он и делает в начале) . А вдруг вернёт 2?
И т.д.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829535
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Код: plsql
1.
2.
3.
4.
OPEN bornRec;
  LOOP    
    fetch bornRec into rec;
    exit when bornRec%NOTFOUND;


И охото же каждый раз писать всё это,вметого одного FOR ))
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829538
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том что мне нужно обновить определенное поле в таблице BORN.

А значение данного поля нужно вытащить из другого поля.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829541
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag, так есть for update )
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829554
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic,

Я извиняюсь, как примерно будет выглядеть на моем коде.

Я сделал так :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SET SERVEROUTPUT ON;
DECLARE 
  CURSOR bornRec IS 
     SELECT * FROM BORN
        WHERE DATREG between TO_DATE('23.08.1936','DD/MM/YYYY') AND TO_DATE('29.03.1955', 'DD/MM/YYYY') for update;
  KDR_FIRST_ID INTEGER;
  COUNT_REC NUMBER;
BEGIN 
  for rec IN bornRec LOOP
      SELECT count(*) INTO COUNT_REC FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;
      IF COUNT_REC > 0 THEN
         SELECT KODRA_FIRST INTO KDR_FIRST_ID FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;
         dbms_output.put_line(rec.AZ_AGS_ID || ', ' ||  KDR_FIRST_ID);
        IF KDR_FIRST_ID IS NOT NULL THEN
          UPDATE BORN SET KODRA = KDR_FIRST_ID where current of bornRec;
        END IF;
      END IF;    
  END LOOP;
  DBMS_OUTPUT.PUT_LINE('Progress END....');
END;
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829566
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag, выглядит нормально
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829569
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начинающего сойдет.

А дальше можно вместо count(*) читать про OUTER JOIN и тренироваться дальше.

И понимать, что такое FOR UPDATE. Нужен ли он тут - большой вопрос.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829570
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic,

Но почему то выполняется долго данный запрос
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829571
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

Не могли бы показать как именно с помощью outer join сделать.

Спасибо
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829574
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t1(id, str) as 
(
select 1, 'qwe' from dual union all
select 2, 'asd' from dual union all
select 3, 'asd' from dual
), t2(id) as (select 1 from dual)
/*
select t1.id, t1.str, t2.id
  from t1, t2
 where t1.id = t2.id (+)
*/
select t1.id, t1.str, t2.id
  from t1 left outer join t2 on t1.id = t2.id
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829575
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagdmdmdm,

Не могли бы показать как именно с помощью outer join сделать.

Спасибо
дружище идите читать, у вас в голове каша, ничего хорошего вы сделать на данный момент не в состоянии! Том Кайт, Ферштейн, официальная дока
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829582
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel
Код: plsql
1.
 TO_DATE('23.08.1936','DD/MM/YYYY')




Опять чушь.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> SELECT TO_DATE('23.08.1936','DD/MM/YYYY') DT FROM DUAL;

DT
---------
23-AUG-36

SQL> SELECT TO_DATE('23.08.1936','FXDD/MM/YYYY') DT FROM DUAL;
SELECT TO_DATE('23.08.1936','FXDD/MM/YYYY') DT FROM DUAL
               *
ERROR at line 1:
ORA-01861: literal does not match format string


SQL> 



SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829585
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Почему именно чушь, что именно я неправильно сделал.

Не судите строго, ибо я только начинаю изучать PL/SQL
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829588
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagSY,

Почему именно чушь?

А ты тут причем? Сие послание адресовано Fogel.

SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829591
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,
Извини
Не внимательно прочел
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829603
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYОпять чушь.
Соломон, это ты в последнее время порешь.
И выглядит так, будто ты назло какому-то фогелю рекомендуешь другим не попадать в формат.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829627
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicИ выглядит так, будто ты назло какому-то фогелю рекомендуешь другим не попадать в формат.

Ну если тот кто читает не поймeт что формат без FX не требует совпадения разделителей, то и флаг ему в руки.

SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829647
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

Не покажете как именно в моем запросе использовать OUTER JOIN.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829657
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

Похоже весь этот код можно заменить одним SQL( при условии ALL_AZ_AGS.AZ_AGS_ID уникален - в противном случае ни твой код, ни мой UPDATE работать не будут):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
UPDATE BORN B
   SET KODRA = (
                SELECT  KDR_FIRST_ID
                        FROM  ALL_AZ_AGS A
                        WHERE A.AZ_AGS_ID = B.AZ_AGS_ID
                          AND A.KDR_FIRST_ID IS NOT NULL
               )
  WHERE B.DATREG between DATE '1936-08-23' AND DATE '1955-03-29'
    AND EXISTS (
                SELECT  1
                  FROM  ALL_AZ_AGS A
                  WHERE A.AZ_AGS_ID = B.AZ_AGS_ID
                    AND A.KDR_FIRST_ID IS NOT NULL
               )
/



SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829675
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у ТС таблицы достаточно большие, то запуск такого апдейта может очень качественно подвесить ему базу ))
LMag, кстати, а почему в коде коммита нет?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829690
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНу если тот кто читает не поймeт что формат без FX не требует совпадения разделителей, то и флаг ему в руки.Ты стал писать между строк и заставлять додумывать? - Похвально.
Переход из бездумных разжёвывателей в бездумные трахатели свершился? - Так и там, и там бездумность только вредит. Хоть бы в какой в FM послал бы…
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829699
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag ибо я только начинаю изучать PL/SQL
автор... DATREG between TO_DATE('23.08.1936','DD/MM/YYYY') AND TO_DATE('29.03.1955', 'DD/MM/YYYY') ...

DATREG если DATREG будет со временем то у Вас выпадет почти весь день 29.03.1955 (кроме первой секунды)

.....
stax
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829740
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic,

Коммит я специально не делал...
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829875
UPDATE (select B.KODRA , A.KDR_FIRST_ID
from BORN B,
ALL_AZ_AGS A
WHERE A.AZ_AGS_ID = B.AZ_AGS_ID
AND A.KDR_FIRST_ID IS NOT NULL)
set KODRA = KDR_FIRST_ID
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830023
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticЕсли у ТС таблицы достаточно большие, то запуск такого апдейта может очень качественно подвесить ему базу ))
LMag, кстати, а почему в коде коммита нет?

Какую базу? Все что он сделает это row level lock да еще и на возможно меньшее число строк чем SELECT FOR UPDATE в оригинале и на меньшее время (в большинстве случаев SQL быстрее чем соответствующий PL/SQL script). А вопрос про коммит вообще показывает что ты не понимаешь как работает SELECT FOR UPDATE.

SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830042
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, чёт фигню какую-то написал. Всё в кучу собрал ))
Попробуй сделать апдейт одним запросом на таблице гигов так тысячи на 2, с обновлением строк миллионов в 10 в высоконагруженной системе. Думаю, DBA кильнёт твою сессию гораздо раньше, чем ты думаешь ))
К чему тут for update - совсем не понял.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830048
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic гигов так тысячи на 2Обычное дело, апдейт таблиц в пару терабайт всегда поручают тем, кто не знает sql.
SynopticК чему тут for update - совсем не понял.Что имел ввиду СЯ, очевидно. К месту или невпопад, но "совсем не понять" нельзя.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830069
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticSY, чёт фигню какую-то написал. Всё в кучу собрал ))
Попробуй сделать апдейт одним запросом на таблице гигов так тысячи на 2, с обновлением строк миллионов в 10 в высоконагруженной системе. Думаю, DBA кильнёт твою сессию гораздо раньше, чем ты думаешь ))
К чему тут for update - совсем не понял.

Боюсь ты так ничего и не понял.
1. При всех равных условиях (10 строк или 10 миллионов строк) PL/SQL script отработает (в большинстве случаев) медленнее чем одним SQL.
2. Как только ты всунешь commit так сразу ты потеряешь транзакционность (имеет ли это значение в данном конкретном случае это другой вопрос).
3. Как только ты всунешь commit так сразу получишь:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> DECLARE 
  2    CURSOR v_cur IS 
  3       SELECT * FROM emp for update;
  4  BEGIN 
  5    for rec IN v_cur LOOP
  6        COMMIT;
  7    END LOOP;
  8  END;
  9  /
DECLARE
*
ERROR at line 1:
ORA-01002: fetch out of sequence
ORA-06512: at line 5
ORA-06512: at line 5


SQL> 



4. Eсли уберешь for update то рискуешь потерять данные (ты select, кто-то update+commit, ты update поверх).

SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830116
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, извини, но ты пишешь очевидные вещи.
Никто не спорит с тем, что SQL быстрее PL/SQL.
Никто не говорит, что про то, что можно будет продолжить фечить курсор после коммита.
Речь вообще о другом.
Заранее извиняюсь за банальщину, но я говорил только про то, что применяя апдейты без ограничения по объёму блокировок и без оглядки на последствия, можно встрять на лёгкий паралич БД. И это будет и в случае чистого SQL и в случае PL/SQL. Сколько данных у ТС в таблице, сколько он обновляет и на сколько критичны блокировки мы не знаем. Но в высоконагруженных системах выборки лучше проводить с rownum<X, и выполнять коммиты для каждых Y строк.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830118
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synopticты пишешь очевидные вещи
...
Заранее извиняюсь за банальщину...Для понимания, почему об одном "никто не говорит", а другое ты повторяешь который раз, озвучь, как ты отличаешь банальщину от очевидных вещей.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830126
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-, если ты переформулируешь свой вопрос в вид, доступный для понимания, я постараюсь на него ответить.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830349
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticНикто не спорит с тем, что SQL быстрее PL/SQL.
Это, скажем так, не совсем правда, причем в обеих частях утверждения, т.е. как найдутся люди, которые данный тезис оспорят, так и найдутся ситуации, в которых pl/sql справится быстрее/лучше.
Что касается "update повесит базу" - то это очень дурной термин, близко не отражающий сути происходящего.
Да и не каждый админ будет рубить блокирующую сессию, не разобравшись тщательно с прогнозируемым временем отката уже произведенных сессий изменений.
По крайней мере, бывалый dba - не будет, сберовские подтвердят ;)
Ибо встрять можно намного жестче в сравнении с невмешательством.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830419
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousSynopticНикто не спорит с тем, что SQL быстрее PL/SQL.
Это, скажем так, не совсем правда, причем в обеих частях утверждения, т.е. как найдутся люди, которые данный тезис оспорят, так и найдутся ситуации, в которых pl/sql справится быстрее/лучше.
Речь шла про конкретные скрипты SQL и PL/SQL

[quote andrey_anonymous]SynopticЧто касается "update повесит базу" - то это очень дурной термин, близко не отражающий сути происходящего.
Да и не каждый админ будет рубить блокирующую сессию, не разобравшись тщательно с прогнозируемым временем отката уже произведенных сессий изменений.
По крайней мере, бывалый dba - не будет, сберовские подтвердят ;)
Ибо встрять можно намного жестче в сравнении с невмешательством.Понятно что есть особенности. Например у нас, если DBA видит что кто-то отъел 500 Гб SGA, и это не "разрешённые" - продуктовые логины, то в адрес инициатора сессии, а также к его руководителю летит вопрос, всё ли у него хорошо ))
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830423
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic кто-то отъел 500 Гб SGAВ buffer cache?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830463
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Synopticвыборки лучше проводить с rownum<Xлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.

Synopticи выполнять коммиты для каждых Y строкпрощайте транзакционность, консистентность и возможность нормального роллбэка...

SynopticЗаранее извиняюсь за банальщинуэто не "банальщина", а искаженный и перевранный набор недомолвок и мифов.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830534
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.
В индекс нельзя передать параметр, в то время как в rownum - без проблем. Или как-то можно?

xtenderпрощайте транзакционность, консистентность и возможность нормального роллбэка....Какие роллбэки на проде? И что не так с транзакционностью, консистентностью?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830536
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticКакие роллбэки на проде? И что не так с транзакционностью, консистентностью?
надеюсь Вы притворяетесь? commit ставится там, где надо по логике. если ставить его раньше, то вся логика полетит в случае сбоя, ведь сохранится лишь часть логической транзакции.
классический пример перевод денег между банковскими счетами, если поставить промежуточный комит, после которого произойдет сбой, то деньги снимутся с одного счета, а на другом не появятся
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830552
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-lsнадеюсь Вы притворяетесь? commit ставится там, где надо по логике. А где было заявлено иное?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830556
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synopticalex-lsнадеюсь Вы притворяетесь? commit ставится там, где надо по логике. А где было заявлено иное?Ты балабол?
Synopticкстати, а почему в коде коммита нет?Логика тебя не колышет.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830565
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderSynopticвыборки лучше проводить с rownum<Xлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.



о каком first_rows() идет речь ? режиме оптимизатора?

....
stax
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830576
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSynopticпропущено...
А где было заявлено иное?Ты балабол?
Synopticкстати, а почему в коде коммита нет?Логика тебя не колышет.
заканчивай уже придумывать и начни думать. А если не понимаешь, спроси.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET SERVEROUTPUT ON;
DECLARE 
  CURSOR bornRec IS 
     SELECT * FROM BORN
        WHERE DATREG between TO_DATE('23.08.1936','DD/MM/YYYY') AND TO_DATE('29.03.1955', 'DD/MM/YYYY') for update;
  KDR_FIRST_ID INTEGER;
  COUNT_REC NUMBER;
BEGIN 
  for rec IN bornRec LOOP
      SELECT count(*) INTO COUNT_REC FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;
      IF COUNT_REC > 0 THEN
         SELECT KODRA_FIRST INTO KDR_FIRST_ID FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;
         dbms_output.put_line(rec.AZ_AGS_ID || ', ' ||  KDR_FIRST_ID);
        IF KDR_FIRST_ID IS NOT NULL THEN
          UPDATE BORN SET KODRA = KDR_FIRST_ID where current of bornRec;
        END IF;
      END IF;    
  END LOOP;
   commit;
  DBMS_OUTPUT.PUT_LINE('Progress END....');
END;



Какую транзакционность, консистентность нарушает коммит в данном месте?

Кстати, как выделить часть кода на форуме?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830580
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticКакую транзакционность, консистентность нарушает коммит в данном месте?Для утверждений про констистентность фрагмента кода не достаточно, нужно знать бизнес-правила. Одно определенно можно сказать про этот код - в нем не определено значение Y:Synopticвыполнять коммиты для каждых Y строк.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830583
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Для утверждений про констистентность фрагмента кода не достаточно, нужно знать бизнес-правила. Согласен.

-2-Одно определенно можно сказать про этот код - в нем не определено значение YЭто код ТС. Да и понятно, что нужно переписывать код, чтобы "выполнять коммиты для каждых Y строк"
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830793
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticДа и понятно, что нужно переписывать код, чтобы "выполнять коммиты для каждых Y строк"
не надо переписывать! в этом и смысл, что commit там, где должен быть по логике.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830923
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-ls, речь немного о другом
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830926
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Synopticxtenderлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.
В индекс нельзя передать параметр, в то время как в rownum - без проблем. Или как-то можно?что за бред... Какой ещё параметр в индекс?
SynopticКакие роллбэки на проде? И что не так с транзакционностью, консистентностью?ох, рановато тебе ещё такие темы обсуждать.. Ты всерьёз считаешь, что роллбэки только для тестовых или девелоперских сред?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830927
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synopticalex-ls, речь немного о другом
"да как же тебя понять, если ты ничего не говоришь?"
Заметьте, никто не понял, что Вы хотите, Вам стоит посидеть подумать и только потом писать :)
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830933
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-ls"да как же тебя понять, если ты ничего не говоришь?"
Заметьте, никто не понял, что Вы хотите, Вам стоит посидеть подумать и только потом писать :)Картинка сложится, если прочитать от и до. Если же выдирать фразы из контекста, то получаем как раз то, что имеем
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830935
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderчто за бред... Какой ещё параметр в индекс?Опечатка. "Параметр в хинт" имелся в виду.

xtenderох, рановато тебе ещё такие темы обсуждать.. Ты всерьёз считаешь, что роллбэки только для тестовых или девелоперских сред?Почему же? Всё зависит от задачи. Если у тебя есть куча шагов, которые нужно пройти и получить "Ок" на каждом, понятно что в таком БП роллбек может пригодится. Но опять же, есть два подхода:
1. Выполняем все операции процесса и только в конце комитим.
2. Выполняем последовательность операций, с фиксацией результата каждой. В случае неуспеха на каком-то из этапов, выполняем обратные операции.
Как путь использовать, решает РП.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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