2016-01-08 4 views
3

У меня есть табличная форма, где col1 и col2 - числа, а col3 должна содержать разницу между col1 и col2.Динамический расчет в вершине оракула табличная форма: sys.htp.p

col1 уже имеет данные, а col 1 можно редактировать, в зависимости от изменения col1 данные col3 будут динамически изменяться.

Для достижения этой цели я использовал ajax callback процесс и JavaScript, но проблема в том, когда разница 0.xx-0.xx, я получаю ошибку разбора. другие значения, которые я могу напечатать в col3.

Declare  
p_curr number;  
p_prev number;  
p_diff number;  

Begin  
p_prev := to_number(apex_application.g_x01);  
p_curr := to_number(apex_application.g_x02);  

    SELECT p_curr - p_prev into p_diff  
    from dual;  

    -- return calculated value 
    sys.htp.p(p_diff);  
End; 

--JavaScript

function f_CALC_DIFF(pThis) {  

var row_id  = pThis.id.substr(4);  
var s   = $('#f18_'+row_id).val().replace(/[^\d.-]/g, ''); 
var curr  = $(pThis).val().replace(/[^\d.-]/g, ''); 

if(!s){ 
    var s= 0; 
    var prev = s;} 
else{ 
    var prev = s;} 

apex.server.process 
("CALC_DIFF", { x01: prev, x02: curr }, 
{ success: function(pData) { 
$('#f23_'+row_id).val(pData);}} 
);  
} 

Просьба предложить решение для указанной задачи.

Я использую Oracle Apex version 4.2

+0

Что такое ошибка синтаксического анализа и где? Зачем использовать to_number здесь, когда значение уже является числом: 'to_number (p_curr - p_prev)'? Вы должны иметь возможность рассчитать разницу между двумя номерами в Javascript, не требуя дорогого вызова AJAX для базы данных. –

+0

Ошибка анализа: ошибка синтаксиса, неожиданный токен. Проблема в том, что я хочу динамически печатать значение в col3 на основе изменений, сделанных в col2, поскольку это редактируемый столбец. Значение col3 равно (col2-col1). Поэтому я использовал вызов Ajax в базе данных. – ApexDev

ответ

3

Вместо использования дорогой AJAX вызова базы данных, использовать JavaScript.

function f_CALC_DIFF(pThis) {  

var row_id  = pThis.id.substr(4);  
var s   = $('#f18_'+row_id).val().replace(/[^\d.-]/g, ''); 
var curr  = $(pThis).val().replace(/[^\d.-]/g, ''); 

if(!s){ 
var s= 0; 
var prev = s;}  
else{ 
var prev = s;} 

    var diff = 0; 
diff = (curr - prev); 
var n = diff.toFixed(2); 
alert (n); 
$('#f23_'+row_id).val(n); 

// Please remove the AJAX call to database. 
/*apex.server.process 
("CALC_DIFF", { x01: prev, x02: curr }, 
{ success: function(pData) { 
$('#f23_'+row_id).val(pData);}} 
);  
} */