Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
Есть поле Property IsDeleted As %Boolean; Нужно выбрать все объекты, у которых IsDeleted не равно 1 (true). По идее, это все существующие строки, потому как это поле было добавлено к уже существующему классу с кучей экземпляров в базе. Пишу запрос: Select * from docs where isdeleted <> 1 Результат: ноль строк. Не, оно понятно, что надо писать: Select * from docs where is deleted is null or isdeleted = 0 Но не хотелось бы в куче запросов (а это поле добавлено в родительском классе) писать длинное условие, да и на будущее хочется знать, нельзя ли как-то исключить null из получаемых значений? Пытался сделать так: Property IsDeleted As %Boolean [ InitialExpression = 0, SqlComputeCode = {s {*} = ({*}=1)}, SqlComputed, SqlFieldName = IsDeleted ]; или какие-то другие условия. Ноль строк. Причём sqlcomputecode не выполняется, видимо, вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 04:08 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. Хотя я бы на вашем месте просто ручками в базе проапдейтила все существующие NULL'ы, заменив их на 0, т.к. в случае использования функции ISNULL в некоторых случаях это может приводить к потере в скорости, поэтому сначала: Код: sql 1. затем: Код: sql 1. ну или Код: sql 1. как вам удобнее.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 04:29 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
ну и для вновь создаваемых записей [InitialExpression = 0] обязательно должно быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2012, 04:31 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
Подниму темку... Есть ли какая-то возможность получить ID екземпляра в этой конструкции? Код: vbnet 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 11:05 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
У меня на Cache 2011.1.3 (Build 800U) получилось двумя способами: Код: plaintext 1. 2. Но значение в вычисляемое поле запишется только после сохранения объекта. Возможно, у Вас значение keyId проверяется до вызова %Save , а не после вызова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 12:23 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
У меня Код: vbnet 1. andrew_tswУ меня на Cache 2011.1.3 (Build 800U) получилось двумя способами: Код: vbnet 1. Таккой способ не даёт ошибок но записывал пусто... andrew_tsw Код: vbnet 1. Тако тоже пробовал - давал ошибку компилляции... andrew_tswНо значение в вычисляемое поле запишется только после сохранения объекта. Это-то понятно. andrew_tswВозможно, у Вас значение keyId проверяется до вызова %Save , а не после вызова. Это вроде как невозможно... Т.к. сама конструкция SqlComputeCode вызывается именно после %Save ... Я просто даю команду %New() и %Save или %OpenId() и %Save... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 12:58 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
Сделал тестовый пример... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Дал соответствующие команды в терминале... Код: vbnet 1. 2. 3. 4. 5. 6. 7. Но данных по ID нет. # ID key keyAbn keyId tmp1 7 abn abn 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 13:31 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
По этому вопросу открыли ВРЦ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2012, 19:55 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
В и тоге в {ID} что-то будет только после записи. Т.о. данная конструкция для фиксации изменений нам не подходит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 10:48 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
krvsaВ и тоге в {ID} что-то будет только после записи. Т.о. данная конструкция для фиксации изменений нам не подходит...Вы можете гарантированно определить автоматически генерируемый ID до физической записи объекта, который он получит? s o=##class(soi.tmp).%New() s o.tmp=4 w o.%Id() ; ? // ... d o.%Save() Если можете, то проблем не должно быть даже сейчас. Если нет, то какой другой конструкцией Вы собираетесь воспользоваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 11:34 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
servitВы можете гарантированно определить автоматически генерируемый ID до физической записи объекта, который он получит? У нас будет использоваться не только "классовый" подход, но и SQLный... Т.ч. частное решение не устраивает. Про тот метод мы знали, правда всегда использовали его только после %Save()... servitЕсли нет, то какой другой конструкцией Вы собираетесь воспользоваться? Просто будем использовать произвольный счетчик для получения уникальной идентификации. И процедуру записи данных об изменении в "журнал"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 14:14 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
krvsaПро тот метод мы знали, правда всегда использовали его только после %Save()...Это был пример вопроса, а не решения. krvsaПросто будем использовать произвольный счетчик для получения уникальной идентификацииВ таком случае проблем с получением псевдо Id быть не должно: Class test.B Extends %Persistent { Index ikeyId1 On keyId1 [ Unique ]; Index ikeyId2 On keyId2 [ Unique ]; Property x As %Integer; /// Местный ID #1 Property keyId1 As %String [ InitialExpression = {$system.Util.CreateGUID()}, ReadOnly ]; /// Местный ID #2 Property keyId2 As %Numeric [ InitialExpression = {$i(^sequenceKeyId)}, ReadOnly ]; /// Используем местный ID #1 Property auditkeyId1 As %String [ SqlComputeCode = { Set {*}={x}_"_"_{keyId1}}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ]; /// Используем местный ID #2 Property auditkeyId2 As %String [ SqlComputeCode = { Set {*}={x}_"_"_{keyId2}}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ]; ClassMethod Test() { d ..%KillExtent() s b=..%New() s b.x=4 d b.%Save() &sql(insert into test.B(x) values(4)) zw ^test.BD s b=..%OpenId(1) s b.x=5 d b.%Save() &sql(update test.B set x=5 where %ID=2) zw ^test.BD } } Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 16:03 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
servitВ таком случае проблем с получением псевдо Id быть не должно Спасибо за примерчик! Очень познавательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 16:09 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
servit , но, если я правильно понял, без свойства Код: vbnet 1. 2. Никак не получится сделать. Просто нам-то оно без надобности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 16:11 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
servitЭто был пример вопроса, а не решения. При нашей (кустарной) системе хранения данных, после команды "New" мы уже имели счётчик "ID"... Т.о. да, я могу гарантировать наличие уникального "ID" без "Save"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 16:15 |
|
||
|
Вопрос по SqlComputedCode
|
|||
|---|---|---|---|
|
#18+
krvsa , Если получение значения ID можете оформить в метод класса, то не вижу проблем: Property auditkeyId As %String [ SqlComputeCode = { Set {*}=##class(package.class).GetKeyId()}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2012, 16:33 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=37705888&tid=1557497]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 219ms |
| total: | 398ms |

| 0 / 0 |
