Re: копирование колонки | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> я не знаю какие поля указывать если имя поле динамические и сегодyя оно будет m000092
Открой для себя макросы, скобки... m.a = "Cur2" m.f = "Поле1" && или FIELD(1), или FILELD(1, m.a) ... Можно строить вот такие конструкции (после амперсанда и переменной и точки может потребоваться еще точка, все время путем подбора подбираю...) Select &f, &a.&f FROM cur1, (m.a) |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Чтобы не было повторяющихся, проще всего перечислить с указаниим алиаса для них.
А для подобных случаев как раз и можно использовать либо макроподстановку, либо EVALUATE(), где переменная - как раз то самое, меняющееся по условию выражение. Последняя фунция правда не во всех случаях срабатывает, просто надо проверять, если не годится где-то - делать там макроподстановку. Кстати в привведенном ранее коде вообще непонятно - зачем там-то макроподстановка?? Там вроде просто обычного присваивания хватало бы. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 2 раз(а). Последнее : Crispy, 30.07.20 12:35 |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
если честно понятней не стало, мне кажется я вообще не понимаю что происходит в твоем select, что выбирается и зачем и как можно конкретный пример привести как объеденить такие курсоры, или как то объяснить для самых одаренных? а и еще что значит m. в m.a = "Cur2" уже не в первый раз сталкиваюсь но что такое так и не смог найти в гугле Исправлено 2 раз(а). Последнее : axeum, 30.07.20 12:58 |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну если под "объеденить" имеется в виду то, что выше, то просто указанием своего алиаса для каждого поля каждой таблицы. Для сокарщения записи можно назначать свое временное (оно только внутренее для запроса) имя каждому алиасу Как-то так например:
------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Это применяется для указания, что m.a - переменнная. Чтобы не было путаницы, если есть скажем открытая таблица с одноименным полем. Для которого обычно указывается tabl1.a, но если писать просто "а" - все равно оно будет читаться, если таблица открыта. Поэтому, скажем забыв приписать m. к имени переменной при всяких действиях с ней - можно вот так напороться, что будет считываться не она, а вместо нее - поле таблицы. Как бы для подстраховки и приписывают к ней обычно m с точкой. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
ну под объединить имею ввиду взять поле cur1.M000092 и вставить его в cur1
Исправлено 1 раз(а). Последнее : axeum, 30.07.20 13:18 |
Re: копирование колонки | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну дык про это же там выше уже целый лист написали! Макроподстановкой. Если имя поля неизвестно заранее, задаем его переменной. А потом через макроподстановку подставляется нужное выражение. Что-то вроде:
Что-то такого рода имелось в виду? Или что? ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 30.07.20 15:01 |
Re: копирование колонки | |
---|---|
akvvohinc Сообщений: 4202 Откуда: Москва Дата регистрации: 11.11.2008 |
Когда-то это, действительно, было так, но уже давно, еще с Доса, появились некоторые отличия: при любом выходе из SCAN-цикла, куда бы вас не забросила судьба внутри цикла, вы гарантированно находитесь в той же рабочей области, что и сканируемая таблица, а при выходе из любого обычного цикла такой гарантии нет. Например:
SCAN существенно быстрее, но заметно (в секундах) это будет лишь при количестве записей порядка 10^8 (на обычном компе и диске). Еще в чем разница - я написал выше. Сюда же можно еще добавить про отсутствие необходимости следить за рабочей областью и перед LOOP.
|
Re: копирование колонки | |
---|---|
axeum Автор Сообщений: 107 Дата регистрации: 07.07.2020 |
Исправлено 2 раз(а). Последнее : axeum, 31.07.20 07:54 |
Re: копирование колонки | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> str1 = 'create cursor cur1 (kkd N(10),fio C(60),adres C(100)'
нет закрывающей скобки нужно так str1 = 'create cursor cur1 (kkd N(10),fio C(60),adres C(100))' &str1 или так str1 = 'create cursor cur1 (kkd N(10),fio C(60),adres C(100)' &str1) |
Re: копирование колонки | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
То есть при 100 млн. записей разница во времени будет заметна. Например, у меня "за всё время" лишь в одном проекте была таблица под 2 млн. записей. Да и то не было необходимости сканировать её - только индексный поиск. Думается, что разница между SCAN и DO WHILE не только в том, что было написано выше. В DO WHILE по сути невозможно "отработать" сложное условие FOR при перемещении по таблице. SCAN же отработает сложные условия FOR без проблем. |
Re: копирование колонки | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
В до вхиле не надо встраивать другие условия кроме !EOF(), вместо SCAN FOR перед до вхиле надо поставить SET FILTER условие
Естественно, в SCAN есть типовые фильтры и фишки (как и в REPORT FORM например) - REST, WHILE, еще чего-то - это все "обвязка" вокруг DO WHILE, реализуется тривиально (например, REST - значит не надо делать GO TOP, и т.п.) |
Re: копирование колонки | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Ставить фильтр перед DO WHILE совсем не комильфо. Так думаю, что условие FOR в SCAN будет исполняться быстрее, нежели команда SET FILTER TO <условие> Хотя не уверен,есть ли разница по скорости...
|
Re: копирование колонки | |
---|---|
akvvohinc Сообщений: 4202 Откуда: Москва Дата регистрации: 11.11.2008 |
Все верно. Я успел поработать на версиях, в которых скана еще не было - глобальных проблем не было, все решалось. Но со сканом стало гораздо удобнее и "прозрачнее". |
Re: копирование колонки | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
SET FILTER работает мгновенно, т.к. он ничего "тяжёлого" не делает - просто запоминает условие, которое ПОТОМ будет применяться при GO/SKIP (кстати, и при SCAN тоже). Является ли SCAN FOR более быстрым чем аналогичная комбинация из SET FILTER/DO WHILE/SKIP - при том ещё и для различных условий (с активным индексом, с фильтрованным индексом, с разной степени селективности условиями) - это надо тестировать - если кому-то это реально интересно ------------------ WBR, Igor |
Re: копирование колонки | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Однако я припоминаю, что команда SKIP (после SET FILTER) очень медленно работает на "границах", где начинается первая запись по условию или заканчивается последняя запись по условию. Исправлено 1 раз(а). Последнее : Simple777, 31.07.20 16:19 |
Re: копирование колонки | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Зависит от множества факторов - в частности от наличия активного индексного тега, оптимизированности условия, совпадения активного индексного тега с тем индексом, который используется для оптимизации. Учитывая, для лучшего понимания "нюансов", что SET DELETED ON тоже является своего рода фильтром, тоже может иметь оптимизирующий индексный тег и соответственно оптимизироваться, и что в некоторых случаях это условие создаёт "перекосы" в распределении подходящих/неподходящих записей в порядке выбора - ну если очень грубо, то вынуждает пропустить миллион записей, прежде чем будет достигнута искомая.
Хелп вообще недвусмысленно советует отключать индексный тег перед использованием любых команд с FOR/WHILE условием. ------------------ WBR, Igor |
Re: копирование колонки | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Реально ли учесть это множество факторов? - вот в чем вопрос. |
Re: копирование колонки | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Реально ли написать идеальную программу? - это не вопрос.
|
Re: копирование колонки | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да. Тем более что провести тестирование на репрезентативой модели реальных данных и выбрать наилучший вариант не так то и сложно. Другое дело, что до вопросов оптимизации доходят лишь в немногих случаях - это и правильно, зачем тратить дорогое время разработчика на приближение к идеалу, если и так всё приемлемо быстро работает. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |