Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Помогите по Ораклу   Найти похожие ветки 

 
ELKa   (2002-11-19 14:18) [0]

Надо сделать одним селектом выборку из 2-х таблиц (это уже сделано), но так, чтобы потом можно было в обеих таблицах менять данные (просто в одной из них, в которой выбирается с ключевым полем - данные меняются, а во второй, которая выбирается по совпадению ее ключевого поля и ключ. поля главной таблицы - не меняются и при попытке поменять выдается ошибка).

А если короче, то надо в оракле нипасить такое, что в Access выглядит так:
SELECT Главная_таблица.Код,
Главная_таблица.Наименование, Главная_таблица.Дата_корректировки, Подчиненная_таблица.Тип_отчета
FROM Подчиненная_таблица INNER JOIN Главная_таблица ON Подчиненная_таблица.Код_отчета = Главная_таблица.Код
WHERE (((Главная_таблица.Тип_ЭФВ)=5));

Главная и подчиненная таблицы в самом Оракле тоже связаны по полям Код и Код_отчета.

Вся штука в INNER JOIN - без него не работает

А аналога в оракле я не могу найти
Помогите пожалуйста!!!


 
Sly ©   (2002-11-19 14:34) [1]

SELECT Главная_таблица.Код,
Главная_таблица.Наименование, Главная_таблица.Дата_корректировки, Подчиненная_таблица.Тип_отчета
FROM Подчиненная_таблица, Главная_таблица
WHERE Подчиненная_таблица.Код_отчета = Главная_таблица.Код
AND (((Главная_таблица.Тип_ЭФВ)=5))


 
ELKa   (2002-11-19 14:36) [2]

Извини, но такой запрос нередактируемый нигде (ни в оракле ни в Access).


 
{bas} ©   (2002-11-19 14:54) [3]

>> ELKa (19.11.02 14:36)
это же почему
update (select * from t1,t2 where t1.id=t2.id) set t1.name = "I can change." where t1.name = "I can not believe..."


 
{bas} ©   (2002-11-19 15:00) [4]

немного не правильно было
update (select t1.* from t1,t2
where t1.id=t2.id
and t2.name = "I can not believe...")
set name = "I can change."


 
ELKa   (2002-11-19 15:01) [5]

На апдейт такого типа у меня пишется что-то типа: таблица t2 (подчиненная) только для чтения. Хотя (проверяли) она вполне нормальная, т.е. писабельная :-)


 
Sly ©   (2002-11-19 15:03) [6]

В общем, так, если у Вас не Oracle 9i, то про INNER JOIN придется забыть. Тут есть на самом деле два варианта:
1. Создать “Updateable Join View’
2. Использовать компонент Update SQL
Я бы лично остановился на втором варианте.


 
ELKa   (2002-11-19 15:03) [7]

Забыла сказать: если в Аксесе написать запрос такой, как я в вопросе написала (с иннер джойн) никаких апдейтов дописывать не требуется. Все делается само-по-себе.


 
ELKa   (2002-11-19 15:06) [8]

to Shy В том-то и дело, что...читайте мой ответ в 15:01


 
KDS ©   (2002-11-19 15:17) [9]

Попробуй использовать компонент UpdateSQL и его св-во ModifySQL


 
Sly ©   (2002-11-19 15:20) [10]

>ELKa (19.11.02 15:06)
А конкретнее, какая ошибка, пожалуйста, с ORA-xxxx


 
ELKa   (2002-11-19 15:23) [11]

Shy : Сейчас попробую еще раз такое сделать, напишу ошибку


 
{bas} ©   (2002-11-19 15:24) [12]

>ELKa
Напиши свой апдейт, на котором Оракул ругается и саму ошибку


 
ELKa   (2002-11-19 15:42) [13]

ORA-01776: Нельзя изменить несколько таблиц при помощи одного апдейта.
А мне именно это и надо сделать. Нужно и в подчиненной и в главной таблицах поменять значения на новые.
(Это я пробовала сделать апдейт как мне {bas} подсказал. В компоненте UpdateSQL)


 
ELKa   (2002-11-19 16:03) [14]

Sly, по всей видимости прийдется использовать 1-й вариант из предложенных тобой. Как это сделать? Спасибо заранее


 
dimis   (2002-11-19 16:18) [15]

это решается или введением тригеров или (что по-моему лучше)
через хранимую процедуру


 
ELKa   (2002-11-19 16:18) [16]

Народ, если будет желание и вы что-то придумаете, то напишите пожалуйста мне на мыло. (kea@email.zp.ua)


 
BlackTiger   (2002-11-19 16:26) [17]

Что-то всплывает в памяти при триггера на VIEW, но кажется там было ограничение - такой триггер можно было создать только на "Oracle Enterprise Edition".

В MSSQL такие триггера можно создавать без особых проблем, хотя пока не пользовался ими ни разу.

Есть вариант с "таблицами в памяти". Грузишь туда все, что угодно, но изменения/добавления обрабатываешь сам, изменяя оригинальные данные. Тут только вопрос в производительности и памяти.


 
Sly ©   (2002-11-19 16:44) [18]

Про Updateable View.
{bas} ©, как раз их и использовал, только это называется Inline View.
Чтобы для View c JOIN можно было сделать Update, должны быть определены соответствующем образом все PRIMARY и FOREIGN KEYS, более того, Update можно делать, только для Key-Preserved таблиц (см. Oracle Administrator’s Guide).

Так что, лучше не мучится, а написать нормальный Update SQL, для того чтобы написать, не один, а несколько Update, можно использовать PL/SQL блок:
BEGIN
UPDATE t1…SET c1 = :newc1;
UPDATE t2…;
END;
или (и), конечно же, серверные процедуры


 
ELKa   (2002-11-19 16:49) [19]

Сейчас спробую...


 
ELKa   (2002-11-19 16:57) [20]

Sly ОГРОМНЕЙШЕЕ СПАСИБО!!!!!! У МЕНЯ ПОЛУЧИЛОСЬ!!!!!

С мена пиво! Только скажи куда прислать :-)



Страницы: 1 вся ветка

Текущий архив: 2002.12.05;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
1-14634
Lucifer2002
2002-11-18 12:19
2002.12.05
Архивация


14-14797
LordOfSilence
2002-11-15 14:06
2002.12.05
Сегодня пятница. Извините, не удержался...


1-14552
Peroon
2002-11-27 02:44
2002.12.05
Как динамически создать/уничтожить метод-обработчик


1-14681
Beginner
2002-11-25 22:35
2002.12.05
как в SaveDialog узнать имя файла без пути?


3-14446
Alex_Sudakov
2002-11-15 13:44
2002.12.05
SQLDMO