powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом.
25 сообщений из 52, страница 1 из 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
25 сообщений из 52, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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