![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите по Ораклу [D5]
ELKa © (2002-11-19 14:18:00)Надо сделать одним селектом выборку из 2-х таблиц (это уже сделано), но так, чтобы потом можно было в обеих таблицах менять данные (просто в одной из них, в которой выбирается с ключевым полем - данные меняются, а во второй, которая выбирается по совпадению ее ключевого поля и ключ. поля главной таблицы - не меняются и при попытке поменять выдается ошибка).
А если короче, то надо в оракле нипасить такое, что в Access выглядит так:
SELECT Главная_таблица.Код,
Главная_таблица.Наименование, Главная_таблица.Дата_корректировки, Подчиненная_таблица.Тип_отчета
FROM Подчиненная_таблица INNER JOINГлавная_таблица ON Подчиненная_таблица.Код_отчета = Главная_таблица.Код
WHERE (((Главная_таблица.Тип_ЭФВ)=5));
Главная и подчиненная таблицы в самом Оракле тоже связаны по полям Код и Код_отчета.
Вся штука в INNER JOIN- без него не работает
А аналога в оракле я не могу найти
Помогите пожалуйста!!!
ELKa (2002-11-19 16:57:00) [1]Sly ОГРОМНЕЙШЕЕ СПАСИБО!!!!!! У МЕНЯ ПОЛУЧИЛОСЬ!!!!!
С мена пиво! Только скажи куда прислать :-)
ELKa (2002-11-19 16:49:00) [2]Сейчас спробую...
Sly (2002-11-19 16:44:00) [3]Про 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;
или (и), конечно же, серверные процедуры
BlackTiger (2002-11-19 16:26:00) [4]Что-то всплывает в памяти при триггера на VIEW, но кажется там было ограничение - такой триггер можно было создать только на "Oracle Enterprise Edition".
В MSSQL такие триггера можно создавать без особых проблем, хотя пока не пользовался ими ни разу.
Есть вариант с "таблицами в памяти". Грузишь туда все, что угодно, но изменения/добавления обрабатываешь сам, изменяя оригинальные данные. Тут только вопрос в производительности и памяти.
ELKa (2002-11-19 16:18:00) [5]Народ, если будет желание и вы что-то придумаете, то напишите пожалуйста мне на мыло. (kea@email.zp.ua)
dimis (2002-11-19 16:18:00) [6]это решается или введением тригеров или (что по-моему лучше)
через хранимую процедуру
ELKa (2002-11-19 16:03:00) [7]Sly, по всей видимости прийдется использовать 1-й вариант из предложенных тобой. Как это сделать? Спасибо заранее
ELKa (2002-11-19 15:42:00) [8]ORA-01776: Нельзя изменить несколько таблиц при помощи одного апдейта.
А мне именно это и надо сделать. Нужно и в подчиненной и в главной таблицах поменять значения на новые.
(Это я пробовала сделать апдейт как мне {bas}подсказал. В компоненте UpdateSQL)
{bas} (2002-11-19 15:24:00) [9]>ELKa
Напиши свой апдейт, на котором Оракул ругается и саму ошибку
ELKa (2002-11-19 15:23:00) [10]Shy : Сейчас попробую еще раз такое сделать, напишу ошибку
Sly (2002-11-19 15:20:00) [11]>ELKa (19.11.02 15:06)
А конкретнее, какая ошибка, пожалуйста, с ORA-xxxx
KDS (2002-11-19 15:17:00) [12]Попробуй использовать компонент UpdateSQL и его св-во ModifySQL
ELKa (2002-11-19 15:06:00) [13]to ShyВ том-то и дело, что...читайте мой ответ в 15:01
ELKa (2002-11-19 15:03:00) [14]Забыла сказать: если в Аксесе написать запрос такой, как я в вопросе написала (с иннер джойн) никаких апдейтов дописывать не требуется. Все делается само-по-себе.
Sly (2002-11-19 15:03:00) [15]В общем, так, если у Вас не Oracle 9i, то про INNER JOIN придется забыть. Тут есть на самом деле два варианта:
1. Создать “Updateable Join View’
2. Использовать компонент Update SQL
Я бы лично остановился на втором варианте.
ELKa (2002-11-19 15:01:00) [16]На апдейт такого типа у меня пишется что-то типа: таблица t2 (подчиненная) только для чтения. Хотя (проверяли) она вполне нормальная, т.е. писабельная :-)
{bas} (2002-11-19 15:00:00) [17]немного не правильно было
update (select t1.* from t1,t2
where t1.id=t2.id
and t2.name = "I can not believe...")
set name = "I can change."
{bas} (2002-11-19 14:54:00) [18]>> 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..."
ELKa (2002-11-19 14:36:00) [19]Извини, но такой запрос нередактируемый нигде (ни в оракле ни в Access).
Sly (2002-11-19 14:34:00) [20]SELECT Главная_таблица.Код,
Главная_таблица.Наименование, Главная_таблица.Дата_корректировки, Подчиненная_таблица.Тип_отчета
FROM Подчиненная_таблица, Главная_таблица
WHERE Подчиненная_таблица.Код_отчета = Главная_таблица.Код
AND (((Главная_таблица.Тип_ЭФВ)=5))