2013-01-03 1 views
0

В моем ответе 2 строки отличаются от '.' и будет распечатываться, и должен увеличивать «myCounter».
Но в обоих распечаток 1, как и в MYCounter не получает приращение ...PL/SQL в отчетах oracle, приращение не работает

function R_G_cnFormatTrigger return boolean is 
myCounter number :=0; 
begin 
    -- Automatically Generated from Reports Builder. 
    if (mod(myCounter,2) = 0) 
    then 
    srw.set_foreground_fill_color('gray8'); 
    srw.set_fill_pattern('solid'); 
    else 
    srw.set_foreground_fill_color(''); 
    srw.set_fill_pattern('transparant'); 
    end if; 
if(:CP_WAYBILL_NO <> '.') 
    then 
     myCounter:=(myCounter+1); 
     srw.message(123,'myCounter:'||myCounter); 
     return true; 
    else 
     return false; 
end if; 
end; 
+3

'mycounter' - локальная переменная, поэтому _always_ будет 1, если условие, которое увеличивает его, является истинным. – Ben

+0

вам не нужно читать или писать MyCounter из таблицы temp. Просто создайте в качестве параметра отчета статическое значение. –

ответ

1

При печати myCounter она всегда равна 1, верно? Это потому, что вы return true; в конце if(:CP_WAYBILL_NO <> '.').

Когда вы используете функцию return, она прерывает выполнение. myCounter - локальная переменная, поэтому ее значение не запоминается.

Вы можете попробовать создать пакет с myCounter как глобальную переменную или читать/писать myCounter из/во временную таблицу.