Форум: "Базы";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизПомогите по Ораклу Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c