Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-14482
JustNew
2002-11-23 20:21
2002.12.05
парсинг строк


1-14541
tv
2002-11-26 18:03
2002.12.05
Плоский TTreView.


14-14755
Slava
2002-11-14 06:31
2002.12.05
А где моя анкета, извините?


3-14461
Брат
2002-11-18 16:20
2002.12.05
Количество записей в таблице...


1-14643
Lili
2002-11-25 13:53
2002.12.05
Как выполнить функцию, закодированную в символьную строку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский