Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос insert + select + order by / 15 сообщений из 15, страница 1 из 1
27.03.2012, 16:31
    #37725717
I love cche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
Доброго времени суток. Скажу сразу, в каше я почти полный нуб(. Вопрос такой: не работает запрос

Код: sql
1.
insert into aaaa.Table (f1, f2) select f1, f2 from aaaa.Table order by f1



выдает ошибку -25, ругается на ордер в конце инсерта. Можно ли как-то это победить? Версия каше 2008.1.5.Х.
Вообще изначально хотелось отсортировать данные в таблице - скопировать туда отсортированные, затем удалить несортированные. Может есть более простой способ сортировки данных в таблице?
...
Рейтинг: 0 / 0
27.03.2012, 16:57
    #37725773
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
I love cche,

Вы нуб не только в каше :-)
Уберите сортировку из запроса, такого понятия, как сортировка таблицы нет.
Сортировка используется только при выводе.
...
Рейтинг: 0 / 0
27.03.2012, 17:10
    #37725811
I love cche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
Блок А.Н., Это как раз и есть сортировка при выводе. Данные выбираются во временную таблицу, а затем выводятся на печать с помощью одной шарлатанской программы. Её особенность в том, что на входе она получает таблицу в определенном виде, и в этом самом виде выводит в формат пдф. Всю эту систему разрабатывал не я, поэтому ничего изменить не могу(У меня вообще очень много вопросов к разработчику всего этого добра).

Так что все-таки лучше вернуться к тому, как можно отсортировать таблицу.
...
Рейтинг: 0 / 0
27.03.2012, 17:46
    #37725903
I love cche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
Проблема решена 8) Спасибо за помощь
...
Рейтинг: 0 / 0
27.03.2012, 20:29
    #37726202
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
Блок А.Н.Уберите сортировку из запроса, такого понятия, как сортировка таблицы нет.В версии 2012.2 запрос вполне работоспособен даже без TOP x .
Support INSERT ... SELECT TOP N
...
Рейтинг: 0 / 0
27.03.2012, 20:57
    #37726253
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
I love ccheПроблема решена 8) Спасибо за помощь
Как решили?
Почему не можете изменить, в программе нет исходников?
Почему у вас инсерт идет в ту же таблицу, откуда селект? Это не ошибка, просто очень странно.
...
Рейтинг: 0 / 0
28.03.2012, 11:54
    #37727063
bushmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
servitВ версии 2012.2 запрос вполне работоспособен даже без TOP x .
Support INSERT ... SELECT TOP N
Вопрос-то был про order by, а не TOP
...
Рейтинг: 0 / 0
28.03.2012, 12:52
    #37727192
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
Если верить док-ии, ORDER BY в подзапросе SELECT работоспособен без TOP и в более ранних версиях (у меня 2011.1.4). Но без TOP смысла в сортировке, даже если она и работает, особого нет. Разве что заставить подзапрос использовать подходящий индекс, но на простых запросах оптимизатор с этой задачей и так прекрасно справляется.
...
Рейтинг: 0 / 0
28.03.2012, 13:32
    #37727284
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
bushmenВопрос-то был про order by, а не TOPВ рамках контекста ответ верный.
Alexey MaslovЕсли верить док-ии, ORDER BY в подзапросе SELECT работоспособен без TOP и в более ранних версиях (у меня 2011.1.4).Почему бы запросу не работать в версии 2011.1.4?
Согласно документации было два улучшения:
Use Of TOP and ORDER In Subqueries (2010.1)

Support INSERT ... SELECT TOP N (2009.1)

Или Вы нашли в документации упоминание про возможность использования ORDER BY без TOP?
...
Рейтинг: 0 / 0
28.03.2012, 14:07
    #37727374
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
servitИли Вы нашли в документации упоминание про возможность использования ORDER BY без TOP?Нет, я ошибочно понял Ваше упоминание версии 2012.2 как намёк на некое улучшение ))

Никогда не пользовался такими INSERT'ами, и, к стыду своему, даже не подозревал об их существовании. Полезное применение им придумать непросто, 1-ое что приходит в голову: автозаполнение таблицы тестовыми - но близкими к реальным - данными, размножая имеющиеся записи, а потом модифицируя в них некоторые поля. Но как-то задумчиво получается...
...
Рейтинг: 0 / 0
28.03.2012, 14:08
    #37727376
bushmen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
servitИли Вы нашли в документации упоминание про возможность использования ORDER BY без TOP?
Я имел в виду, что вопрос был о выборки ВСЕЙ таблицы. А в этом случает я склоняюсь к

Alexey Maslov Но без TOP смысла в сортировке, даже если она и работает, особого нет.
...
Рейтинг: 0 / 0
28.03.2012, 16:02
    #37727740
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
bushmenЯ имел в виду, что вопрос был о выборки ВСЕЙ таблицы.Есть таблица A
IDf1f2134213
Нужно получить таблицу B
IDf1f2113234
Согласно документации правильней было бы написать:

insert into aaaa."Table" (f1, f2) select TOP ALL f1, f2 from aaaa."Table" order by f1

Тем не менее запрос отработал и без TOP ALL, о чём и было сказано.

Что касается самого запроса (таблица назначения = таблица источник), то полагаю это был пример.
Иначе ТС заключил бы имя таблицы в кавычки, так как "Table" - зарезервированное слово и запрос не прошёл бы проверку парсера.
...
Рейтинг: 0 / 0
29.03.2012, 06:53
    #37728745
I love cche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
Блок А.Н.I love ccheПроблема решена 8) Спасибо за помощь
Как решили?
Почему не можете изменить, в программе нет исходников?
Почему у вас инсерт идет в ту же таблицу, откуда селект? Это не ошибка, просто очень странно.

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

Инсерт идет в ту же таблицу потому, что как я уже говорил, формируется таблица, которая собственно и печатается.

Решил с помощью копипасты - в другом отчете было похожее решение, только слишком хардкорное для меня - класс выбирал нужные данные (несортированные) сам в себя, затем сам из себя выбирал их в %РезултСет, сортируя с помощью order by, дальше в цикле перебирал этот отсортированный %РезултСет. Содержимое цикла: класс получает Ид строки из %РезултСета, находит в себе строку с таким Ид, и в специальное поле ставит параметр цикла. Затем в конце всей этой ботвы выполняется сортировка по этому специальному полю. (Смысл всего этого в том, что необходимо отсортировать по заранее неизвестному полю).

Class SomeClass
{

Property F1 As %String;

Property F2 As %String;

Property SortFlag As %Integer;

Method Report(sortCol = "", sortOrder = "") As %Status
{
set qF1 = "sdfsdfsdf"
set qF2 = "sdgdsfsdfsdf"

// Вставка для примера, реально там довольно сложный алгоритм выбора значений
for i = 1:1:5 {
&sql(
insert into SomeClass
set F1 = :qF1, F2 = :qF2
)
} // end if

// Практически вся пунктуация автора цинично сохранена
if (sortCol'="") {
set qry = "SELECT ID FROM SomeClass ORDER BY " _ sortCol _ " " _ sortOrder
set ResultSet=##class(%ResultSet).%New()
set ResultSet.RuntimeMode=2
do ResultSet.Prepare(qry)
do ResultSet.Execute()
set i=0
while (ResultSet.Next()) {
#DIM sc AS SomeClass
set sc=##class(SomeClass).%OpenId(ResultSet.GetData(1))
// Вот она, та самая сортирока. Правда гениально?
set sc.SortFlag = i
do sc.Save()
set i=i+1
} // end while
} // end if

quit $$$OK
} // end Report()

}
...
Рейтинг: 0 / 0
29.03.2012, 07:00
    #37728747
I love cche
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
servitbushmenЯ имел в виду, что вопрос был о выборки ВСЕЙ таблицы.Есть таблица A
IDf1f2134213
Нужно получить таблицу B
IDf1f2113234
Согласно документации правильней было бы написать:

insert into aaaa."Table" (f1, f2) select TOP ALL f1, f2 from aaaa."Table" order by f1

Тем не менее запрос отработал и без TOP ALL, о чём и было сказано.

Что касается самого запроса (таблица назначения = таблица источник), то полагаю это был пример.
Иначе ТС заключил бы имя таблицы в кавычки, так как "Table" - зарезервированное слово и запрос не прошёл бы проверку парсера.

У меня каше 2008.1.5

Запрос: insert into test (test_id, test_name) select top all test_id, test_name from test order by test_id

Результат: ОШИБКА #5001: 1: SQL ERROR #1: LITERAL ('ALL') expected, ALL found^ INSERT INTO test ( test_id , test_name ) SELECT TOP ALL action = (parse) rtn = () $ze = (<SYNTAX>errdone+2^%qaqqt) err = (qaqperr)
...
Рейтинг: 0 / 0
29.03.2012, 09:14
    #37728802
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос insert + select + order by
I love ccheУ меня каше 2008.1.5

Запрос: insert into test (test_id, test_name) select top all test_id, test_name from test order by test_id

Результат: ОШИБКА #5001: 1: SQL ERROR #1: LITERAL ('ALL') expected, ALL found^ INSERT INTO test ( test_id , test_name ) SELECT TOP ALL action = (parse) rtn = () $ze = (<SYNTAX>errdone+2^%qaqqt) err = (qaqperr)Да, я видел Вашу версию Caché ещё в первом сообщении.
Выше я указал версии СУБД, в которых появились соответствующие возможности. Решили перепроверить?

PS: обычно при ответе я указываю контекст вопроса и кому он предназначен.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Запрос insert + select + order by / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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