лексический параметр оракула - PullRequest
0 голосов
/ 28 января 2019

Я использую отчет оракула и у меня проблема с "ВЫБРАТЬ ВСЕ", вот мой запрос

SELECT * FROM company A, seller B
WHERE a.id = b.id 
&(P)Company_id

и в моем параметре после в отчете оракула я использую

begin 
    if (:(V)Company_id is not null and :(V)Company_id<> '0')
       :(P)Company_id:= ' and a.id ='||:(V)Company_id;
    end if;
    return (true)`
end;

, еслиid - это вся цифра, например 000123, работает нормально, но если id - ([L]00123), в результате отображаются все данные.нужна помощь с моим лексическим параметром.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Информация, которую вы публикуете, вводит в заблуждение.Я использую Oracle Reports целую вечность и никогда не видел синтаксиса, который вы используете.Код, который вы написали, даже не компилируется;как это будет работать (то, что вы утверждаете)?Синтаксиса (V)something нет вообще.

В любом случае, с моей точки зрения, вам нужен не лексический параметр, а простое условие OR, например,

select *
from company a join seller b on b.id = a.id
where (a.id = :par_company_id or :par_company_id is null)
  • первая часть, a.id = :par_company_id вернет строки, чей ID равен значению, которое вы вводите в форму параметра
  • вторая часть, or :par_company_id is null вернет все строки, если вы оставите значение параметра пусто
0 голосов
/ 28 января 2019

Я бы подумал, что вы получите ошибку из этого, а не из всех данных, но, возможно, Reports делает что-то странное в этом сценарии.В любом случае, похоже, что вам просто нужно заключить переданное значение в одинарные кавычки, которые вам нужно будет экранировать;поэтому вместо этой строки:

   :(P)Company_id:= ' and a.id ='||:(V)Company_id;

используйте:

   :(P)Company_id:= ' and a.id = ''' || :(V)Company_id || '''';

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

select *
from company A
join seller B
on a.id = b.id
where &(V)Company_id is null or a.id = &(V)Company_id

(я также переключился на синтаксис соединения ANSI ...)

...