У меня есть этот логический исходный файл:
A S VALIDFLAG CMP(EQ '1')
A S ITEMPFX CMP(EQ 'PF')
Но кажется, что это работает как OR
, когда я использую логический файл с помощью SQL. Где я могу поставить AND
?
Я проверил эту ссылку, но там нет образца для AND
.
https://www.ibm.com/docs/en/i/7.1?topic=80-comp-comparison-keyword-physical-ological-files
Я попробовал это, но возникла ошибка AND
.
A S VALIDFLAG CMP(EQ '1') AND
A S ITEMPFX CMP(EQ 'PF')
Простой ответ: синтаксис AND
не поддерживается. Предполагая, что я правильно читаю документацию. Но я также думаю, что вы, возможно, что-то неправильно истолковываете, когда говорите: «Но кажется, что это работает как ИЛИ, когда я использую логический файл с помощью SQL». На мой взгляд, это не имеет дизайнерского смысла. Вы не проверяете правильность одного из полей файла. Вы проверяете все поля. Это предполагает наличие неявного И.
Я пометил его как IBM-midrange, потому что делаю это в AS400. Я проверил запись, и ITEMPFX имеет «XX» и все еще находится в логическом файле. Его значение VALIDFLAG равно «1», поэтому я предположил, что это неявное ИЛИ. Я видел, что другие логические файлы могут одновременно обслуживать И/ИЛИ, просто я не могу найти их источник, чтобы использовать его в качестве ссылки.
Но вопрос не >о< [ibm-midrange]
. Это >о< [ibm-information-server]
. Не так ли?
@StephenC Нет, речь идет не о [ibm-информационном-сервере]. Речь идет о логических файлах, определенных DDS на сервере IBM i, поэтому правильный тег здесь — [ibm-midrange]. Этот вопрос не имеет ничего общего с [ibm-information-server]
Объединение условий с OR:
A S VALIDFLAG CMP(EQ '1')
A S ITEMPFX CMP(EQ 'PF')
Объединение условий с помощью AND:
A S VALIDFLAG CMP(EQ '1')
A ITEMPFX CMP(EQ 'PF')
У вас есть ссылка на документацию по этому поводу? Потому что мне просто интересно, может ли он сделать что-то вроде этого: ВЫБЕРИТЕ VALIDFLAG EQ '1' И ПРОПУСТИТЕ ITEMPFX EQ 'XX'. Так как я могу заменить S на O. Хотя это всего лишь гипотетический вопрос.
Неважно, я проверил, это неверный сценарий.
Я лично однажды столкнулся с точно такой же проблемой. Я нашел ответ в документации «Система i Программирование DDS для физических и логических файлов». В разделе «Определение логического файла с использованием DDS» в главе «Простые и многоформатные логические файлы в DDS» говорится:
«При использовании полей выбора/опускания укажите либо S, либо O в позиции 17. При указании либо S, либо O операторы сравнения select и omit соединяются с помощью OR. Система обрабатывает операторы сравнения select и omit, которые соединены оператором OR. независимо друг от друга.
То есть, если условие сравнения выбора или пропуска выполнено, запись либо выбирается, либо опускается. Если условие не выполняется, система переходит к следующему сравнению. При указании пробела в позиции 17 операторы сравнения выбора и пропуска соединяются оператором AND. Комбинированные сравнения должны быть выполнены до того, как запись будет выбрана или опущена».
Вы можете указать как select, так и опустить для одного и того же формата записи. Применяется следующая информация: v Если для формата записи вы указали и select, и опущение, то порядок, в котором вы их задаете, важен. Операторы select/omit обрабатываются в том порядке, в котором они указаны; если запись удовлетворяет оператору, запись либо выбирается, либо опускается, как указано, а остальные операторы выбора/опускания для этой записи не проверяются.
К сожалению, ссылку на этот документ дать не могу - давно нашел его в сети и скачал в формате pdf. Попробуйте поискать. На самом деле их 4: Программирование концепций DDS; Программирование DDS для отображения файлов; Программирование DDS для физических и логических файлов; Программирование DDS для файлов принтера
Хотя нет.. Я их залил в облако - посмотреть можно здесь: disk.yandex.ru/d/ALjgr0GzOMGD-w (смотрите другую документацию)
Вот ссылка на официальную документацию ibm.com/docs/en/i/…
Спасибо всем за вашу помощь. Я очень ценю это.
Это вопрос о IBM Information Server? Если да, отметьте это соответствующим образом.