Форум

Data.BG Форуми: UPDATE заявка в ORACLE DB - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

UPDATE заявка в ORACLE DB

#1
Потребителят е неактивен   spawnbg 

  • Photoshop Magician
  • Група: Потребители
  • Мнения: 374
  • Регистриран: 11-August 04
  • Репутация: 9
  • Град:Searching ...
От скоро се занимавам с ORACLE, така че съм напълно начинаещ.
Опитвам се да UPDATE-на колона LOYALTI на таблица CLIENTS със стойности Лоялен / Нелоялен съответно, ако няма неплатени фактури / има неплатени фактури, изостанали повече от 3 месеца. Дали една фактура е платена / неплатена е отбелязано в колона PLATENO (съответно за платена с 1, а за неплатена с 0) на таблица DOCUMENT_GL.


Таблица CLIENTS

Публикувано изображение


Таблица DOCUMENT_GL

Публикувано изображение


С тази заявка се опитвам да UPDATE-на, но получавам грешка за твърде много резултати, а мисля че и условието за времевия диапазон не ми е вярно.

UPDATE CLIENTS
 SET LOYALTI = (SELECT DISTINCT NVL2 (PLATENO, 'ЛОЯЛЕН', 'НЕЛОЯЛЕН') 
                        FROM DOCUMENT_GL 
                        WHERE DOCUMENT_GL.ID_CLIENT = CLIENTS.ID_CLIENT 
                        AND DATAFAKT <= SYSDATE 
                        AND DATAFAKT >= ADD_MONTHS(SYSDATE, -3))

Мнението беше редактирано от spawnbg: 26.10.14 - 13:46


Born in darkness, Sworn to justice
0

#2
Потребителят е неактивен   anex 

  • Група: Потребители
  • Мнения: 2830
  • Регистриран: 27-July 04
  • Репутация: 648
  • Пол:Мъж
  • Град:София
  • Интереси:you can't turn a whore into a housewife
Каква грешка ти дава? Номер?
Chance makes a plaything of a man's life.
0

#3
Потребителят е неактивен   spawnbg 

  • Photoshop Magician
  • Група: Потребители
  • Мнения: 374
  • Регистриран: 11-August 04
  • Репутация: 9
  • Град:Searching ...

Преглед на мнениеanex, на 26.10.14 - 13:48, каза:

Каква грешка ти дава? Номер?


ORA-01427: single-row subquery returns more than one row

Born in darkness, Sworn to justice
0

#4
Потребителят е неактивен   anex 

  • Група: Потребители
  • Мнения: 2830
  • Регистриран: 27-July 04
  • Репутация: 648
  • Пол:Мъж
  • Град:София
  • Интереси:you can't turn a whore into a housewife

Преглед на мнениеspawnbg, на 26.10.14 - 14:02, каза:

ORA-01427: single-row subquery returns more than one row

Виж тук
http://www.techonthe...rs/ora01427.php

в subquery-to вместо where xxx = ... пробвай с where xxx in ('yyy','zzz')...
Chance makes a plaything of a man's life.
0

#5
Потребителят е неактивен   spawnbg 

  • Photoshop Magician
  • Група: Потребители
  • Мнения: 374
  • Регистриран: 11-August 04
  • Репутация: 9
  • Град:Searching ...
Аз пренаписах заявката, но пак изкарва същата грешка.

UPDATE CLIENTS
SET LOYALTI = (SELECT DISTINCT 
                       CASE DOCUMENT_GL.PLATENO
                        WHEN 1 THEN 'ЛОЯЛЕН'
                        WHEN 0 THEN 'НЕЛОЯЛЕН'
                        ELSE 'НЯМА ДАННИ'
                        END
                        FROM DOCUMENT_GL JOIN CLIENTS ON (DOCUMENT_GL.ID_CLIENT = CLIENTS.ID_CLIENT)
                        WHERE DOCUMENT_GL.DATAFAKT <= SYSDATE 
                        AND DATAFAKT >= ADD_MONTHS(SYSDATE, -3))

Мнението беше редактирано от spawnbg: 26.10.14 - 14:23


Born in darkness, Sworn to justice
0

#6
Потребителят е неактивен   pbmarkov 

  • Група: Потребители
  • Мнения: 779
  • Регистриран: 23-May 06
  • Репутация: 78
  • Пол:Мъж
  • Град:Варна
Не разбирам от Oracle и не съм го пробвал този код но...
UPDATE CLIENTS
SET LOYALTI = CASE WHEN EXISTS (
				SELECT * 
				FROM DOCUMENT_GL
				WHERE DOCUMENT_GL.ID_CLIENT = CLIENTS.ID_CLIENT 
				AND DATAFAKT <= SYSDATE 
				AND DATAFAKT >= ADD_MONTHS(SYSDATE, -3)
				AND PLATENO = 0
			) THEN 'НЕЛОЯЛЕН'
			ELSE 'ЛОЯЛЕН'
			END

Мнението беше редактирано от pbmarkov: 26.10.14 - 19:35

0

#7
Потребителят е неактивен   spawnbg 

  • Photoshop Magician
  • Група: Потребители
  • Мнения: 374
  • Регистриран: 11-August 04
  • Репутация: 9
  • Град:Searching ...
nosoft -> Тя грешката е ясна, въпроса е как да се избегне.

pbmarkov -> Май стана :) Само че след CASE-а трябва да има WHEN.

Born in darkness, Sworn to justice
0

#8
Потребителят е неактивен   spawnbg 

  • Photoshop Magician
  • Група: Потребители
  • Мнения: 374
  • Регистриран: 11-August 04
  • Репутация: 9
  • Град:Searching ...
Мерси на всички ;)

Born in darkness, Sworn to justice
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login