Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом. / 25 сообщений из 52, страница 1 из 3
22.06.2019, 23:27
    #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
23.06.2019, 00:39
    #39829522
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
Код: plsql
1.
 TO_DATE('23.08.1936','DD/MM/YYYY')
...
Рейтинг: 0 / 0
23.06.2019, 04:10
    #39829525
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
LMag,

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


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

А значение данного поля нужно вытащить из другого поля.
...
Рейтинг: 0 / 0
23.06.2019, 10:11
    #39829541
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
LMag, так есть for update )
...
Рейтинг: 0 / 0
23.06.2019, 11:07
    #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
23.06.2019, 12:37
    #39829566
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
LMag, выглядит нормально
...
Рейтинг: 0 / 0
23.06.2019, 12:51
    #39829569
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
Для начинающего сойдет.

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

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

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

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

Спасибо
...
Рейтинг: 0 / 0
23.06.2019, 13:14
    #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
23.06.2019, 13:19
    #39829575
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
LMagdmdmdm,

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

Спасибо
дружище идите читать, у вас в голове каша, ничего хорошего вы сделать на данный момент не в состоянии! Том Кайт, Ферштейн, официальная дока
...
Рейтинг: 0 / 0
23.06.2019, 13:44
    #39829582
SY
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
23.06.2019, 14:17
    #39829585
LMag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
SY,

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

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

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

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

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

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

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

Не покажете как именно в моем запросе использовать OUTER JOIN.
...
Рейтинг: 0 / 0
23.06.2019, 23:26
    #39829657
SY
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
24.06.2019, 02:24
    #39829675
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
Если у ТС таблицы достаточно большие, то запуск такого апдейта может очень качественно подвесить ему базу ))
LMag, кстати, а почему в коде коммита нет?
...
Рейтинг: 0 / 0
24.06.2019, 07:47
    #39829690
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор. Помогите с запросом.
SYНу если тот кто читает не поймeт что формат без FX не требует совпадения разделителей, то и флаг ему в руки.Ты стал писать между строк и заставлять додумывать? - Похвально.
Переход из бездумных разжёвывателей в бездумные трахатели свершился? - Так и там, и там бездумность только вредит. Хоть бы в какой в FM послал бы…
...
Рейтинг: 0 / 0
24.06.2019, 08:55
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом. / 25 сообщений из 52, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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