2010-02-10 3 views
0

Я в настоящее время базы данных объекта Command в моем Crystal Report, который выглядит что-то вродеКристалл/Oracle параметризованных запросов использовать переменную

SELECT * 
    FROM table 
    WHERE field = {?EndDate} 

Я хочу изменить его, чтобы он больше похож

IF {?EndDate} = DATE '1900-01-01' 
    MyVariable = ADD_MONTHS(LAST_DAY(SYSDATE), -1) 
ELSE 
    MyVariable = {?EndDate} 

SELECT * 
    FROM table 
    WHERE field = MyVariable 

Я как бы понимаю, как построить динамический запрос для этого, но я не знаю, действительно ли это то, что я хочу сделать. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста? Благодарю.

ответ

1
Select * 
from table 
where field = decode 
     (myvariable,'1900-01-01',ADD_MONTHS(LAST_DAY(SYSDATE), -1) 
        ,myvariable) 

[Читает: выберите * из моего стола, где поле равно .. Decode myvariable; если это 1-1-1900, то получите месяц до текущего sysdate, в противном случае используйте переменную]

Что-то в этом роде.

+0

А, это делает его немного легче. Wordy, так как я использую его примерно 5 раз, но выполнимо. Благодаря! – SarekOfVulcan

+0

Таким образом, вам не нужно беспокоиться о объявлениях переменных, поэтому вам может быть немного легче. Дублирование не так плохо, как кажется, но, тем не менее, это дублирование. – glasnt

+0

Ну, я не против беспокоиться о объявлениях переменных, если это сделает код более эффективным ... – SarekOfVulcan

Смежные вопросы