powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перевод из MS SQL Server в ORACLE
20 сообщений из 120, страница 5 из 5
Перевод из MS SQL Server в ORACLE
    #39260289
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые форумчани, у меня снова возникла проблема.
Есть простейший запрос в MS SQL Server, необходимо перевести его в ORACLE:
Код: sql
1.
2.
3.
SELECT A, B,
SUBSTRING((SELECT ', ' + SalePointCode FROM Table2 T2 WHERE T1.ID = T2.ID FOR XML PATH ('')), 3, 8000) AS SPC
FROM Table1 T1


Что делает этот запрос?
Допустим "Table1" главная таблица, а "Table2" подчинённая. Подзапрос (отмеченный красным цветом) перечисляет через запятой все коды торговых точек в одной так сказать "ячейке".
Как это сделать в ORACLE? Мне бы синтаксис.
Хотел погуглить, но не знаю как объяснить гуглу что хочу искать. :)
Попробовал искать "конкатенация", но гугл даёт совсем не то, что хочу. :(
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39260298
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenперечисляет через запятой все коды торговых точек в одной так сказать "ячейке".RTFM LISTAGG
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39260401
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Thanks!!!
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261596
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередной вопрос.

В начале я создал юзера, чтобы создать параллельно схему что-то вроде этого:
Код: plsql
1.
CREATE User dbo IDENTIFIED EXTERNALLY;


Создал несколько объектов для данной схемы.
А как добавить пароль юзеру "dbo"? Как я понимаю, я могу удалить юзера и заново создать так как надо. Но его удалить мне не нужно, т.к. я потеряю все его объекта. Можно ли добавить пароля не пересоздав юзера в ORACLE?
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261642
studierenМожно ли добавить паролячтоб добавить пароля, нужно кодить до ... прочесть sqlя
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261661
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenне пересоздавВ этом грёбаном MS нет ALTER?!
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261676
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то про ALTER USER не подумал. Сорри.
Получилось.
Код: plsql
1.
alter user dbo identified by 12345678


Только вот при подключении ругается
ORA-01045: user lacks CREATE SESSION privilege; logon denied
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261686
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenuser lacks CREATE SESSIONИ GRANT-а тоже нет?!
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261711
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

А что надо написать вместо "X" и "Y"?
Код: sql
1.
alter user dbo grant connect THROUGH X WITH ROLE Y;


Что означает здесь "X"?
А как узнать какие роли есть в базе? Как-нибудь список можно вытащить?
Я ещё не успел создать.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39261722
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форумом Oracle не выучишь. Читай документацию, наглец.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39287838
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую форумчан!

Я в MS SQL Server при обновлении UPDATE использовал FROM, а там и INNER JOIN. Вот примерчик:
Код: sql
1.
2.
3.
4.
5.
UPDATE Table1
Set Field1 = T2.Field1
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID
    LEFT JOIN Table3 T3 ON ...
WHERE ... (здесь условия для фильтра данных)


Увы, в ORACLE такая конструкция не работает. Попробовал вот так.
Код: plsql
1.
2.
3.
4.
5.
UPDATE (SELECT T1.Field1, T2.Field1 X
    FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID
        LEFT JOIN Table3 T3 ON ...
    WHERE ... )
SET Field1 = X


Вроде бы работает, но на практике оказалось, что чрезвычайно капризная конструкция. Часто ругается, что не может так.
Приходится выкручиваться вот таким образом:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
UPDATE Table1 T
SET Field1 = (SELECT T2.Field1
    FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID
        LEFT JOIN Table3 T3 ON ...
   WHERE ... )
WHERE EXISTS (SELECT T2.Field1
    FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID
        LEFT JOIN Table3 T3 ON ...
   WHERE ... )


Конечно работать то работает, но у меня в таблице порядка больше миллиона записей, поэтому "двойной" подзапрос, т.е. и в SELECTе, и в WHERE работает невозможно медленно! Просто невыносимо! То, что в MS SQL Server обновляется буквально за 5-10 минут, в ORACLE уходит часы.
Может есть идея как-нибудь улучшить запрос на обновление? Оптимизировать как-то? Есть ещё какая-нибудь более лучшая конструкция?

Спасибо заранее.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39287848
мердж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
studierenна практике оказалосьне надоело делать абы как, методом тыка разве что дети родятся. Но их ведь еще вырастить надо.
С 2010, задавая "Вопросы начинающего" уже можно было освоить документацию.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39287856
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenЕсть ещё какая-нибудь более лучшая конструкция?
MERGE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39288056
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Спасибки! Реально помогло.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39373703
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, что опять задаю вопрос про MERGE.
Как с помощью MERGE удалить записи, но при этом не обновлять записи?
Вот здесь FAQ есть такой примерчик:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
MERGE INTO person p
   USING (   SELECT tabn, name, age FROM person1) p1
   ON (p.tabn = p1.tabn)
   WHEN MATCHED THEN UPDATE SET p.age = p1.age     
     DELETE WHERE (p1.tabn = 18)
   WHEN NOT MATCHED THEN INSERT (p.tabn, p.name, p.age)
    VALUES (p1.tabn, p1.name, p1.age)


Но мне не нужно обновлять. Попробовал убрать "UPDATE SET ...". ORACLE ругается:
ORA-00905: missing keyword
Прочёл несколько раз документацию, но так и не понял как надо правильно написать.
Вот так не получается.
Код: plsql
1.
2.
3.
4.
5.
6.
MERGE INTO Тут_название_таблицы T USING
(SELECT ...
FROM ...
WHERE ...) U ON (тут условие)
WHEN MATCHED THEN 
  DELETE WHERE (а здесь условие удаления записи);
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39373714
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,
delete. не надо забивать микроскопом гвозди. удаляй предназначенным для этого инструментом.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39373716
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь 12105899 пишут, что DELETE без UPDATE не бывает. Печально!
Ну выкрутился так:
Код: plsql
1.
2.
3.
4.
5.
6.
MERGE INTO Тут_название_таблицы T USING
(SELECT ...
FROM ...
WHERE ...) U ON (тут условие)
WHEN MATCHED THEN UPDATE SET T.Любое_поле = T.Любое_поле
  DELETE WHERE (а здесь условие удаления записи);


Т.е. включил бестолковую инструкцию "UPDATE SET T.Любое_поле = T.Любое_поле" и вроде бы заработало.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39373718
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintstudieren,
delete. не надо забивать микроскопом гвозди. удаляй предназначенным для этого инструментом.
А как удалить данные сравнивая 2 таблицы? Конечно можно в условие WHERE EXISTS как-нибудь включить подзапрос, но тогда работает оооооочень медленно.
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39373719
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studieren,

Жги дальше. Жду вопросов на автофоруме "Раньше у меня был ваз 2104, и я чистил карбюратор ветошью. Как почистить ветошью инжектор?"

MERGE statement
Specify the DELETE where_clause to clean up data in a table while populating or updating it. The only rows affected by this clause are those rows in the destination table that are updated by the merge operation
...
Рейтинг: 0 / 0
Перевод из MS SQL Server в ORACLE
    #39373721
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenА как удалить данные сравнивая 2 таблицы?

Завести признак удаления и обновлять по известному тебе правилу.
...
Рейтинг: 0 / 0
20 сообщений из 120, страница 5 из 5
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перевод из MS SQL Server в ORACLE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]