Sql oracle 10g报告中的错误计算
我们在oracle 10g report builder中创建了两个公式列,当我们减去这些公式列时,答案是错误的 1:第一个公式列Sql oracle 10g报告中的错误计算,sql,oracle,plsql,Sql,Oracle,Plsql,我们在oracle 10g report builder中创建了两个公式列,当我们减去这些公式列时,答案是错误的 1:第一个公式列 function sale_formulaFormula return Number is begin DECLARE BALANCE NUMBER; n number; BEGIN SELECT NVL(SUM(PLD.DR),0)-NVL(SUM(PLD.CR),0) INTO BALANCE
function sale_formulaFormula return Number is
begin
DECLARE
BALANCE NUMBER;
n number;
BEGIN
SELECT NVL(SUM(PLD.DR),0)-NVL(SUM(PLD.CR),0)
INTO BALANCE
FROM
LEDGER PLD
WHERE
(PLD.d_ID in (9)) AND PLD.LD_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE;
return balance;
end;
end;
2:第二个公式列
function expence_formulaFormula return Number is
begin
DECLARE
BALANCE NUMBER;
n number;
BEGIN
SELECT NVL(SUM(PLD.DR),0)-NVL(SUM(PLD.CR),0)
INTO BALANCE
FROM
LEDGER PLD
WHERE
(PLD.d_ID in (10,19,20,5,18)) AND PLD.LD_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE;
return balance;
end;
end;
当我在其他公式列中减去这些公式列,但答案不是真的
3:
从你的代码开始,我想说函数创建本身是错误的,它不会遵守 其次,我按照你的步骤,检查我得到了什么结果
create table LEDGER(d_ID number,dr number, cr number,LD_DATE date);
--------------------------------------------------------------
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 12, 43, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 100, 200, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (18, 899, 786, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (19, 665, 77, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 354, 35, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (5, 43.43, 89.4, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (10, 77, 654, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 75, 97, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 59.45, 69.3, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;
--------------------------------------------------------
--1: first formula column
create or replace function sale_formulaFormula
return Number is
BALANCE NUMBER;
n number;
BEGIN
SELECT NVL(SUM(PLD.DR),0)- NVL(SUM(PLD.CR),0)
INTO BALANCE
FROM LEDGER PLD
WHERE (PLD.d_ID in (9)) ;
--Commenting since am taking only 1 day data
--AND PLD.LD_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE;
Return balance;
end;
--Call
select sale_formulaFormula from dual;
--Got result -- 156.15
--------------------------------------------------------------------------------
--2: second formula column
create or replace function expence_formulaFormula
return Number is
BALANCE NUMBER;
n number;
BEGIN
SELECT NVL(SUM(PLD.DR),0)-NVL(SUM(PLD.CR),0)
INTO BALANCE
FROM LEDGER PLD
WHERE (PLD.d_ID in (10,19,20,5,18));
--Commenting since am taking only 1 day data
--AND PLD.LD_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE;
Return balance;
end;
------------------------------------------------
--Call
select expence_formulaFormula from dual;
--Got result -- 78.03
----------------------------------------------------
--3 Function 3
create or replace function CF_4Formula
return Char is
begin
--return type is char so converting the result to char
return to_char(nvl(sale_formulaFormula,0) - nvl(expence_formulaFormula,0));
end;
--Call
select CF_4Formula from dual;
得到的结果-->156.15-78.03=78.12,这是正确的
从你的代码开始,我想说函数创建本身是错误的,它不会遵守 其次,我按照你的步骤,检查我得到了什么结果
create table LEDGER(d_ID number,dr number, cr number,LD_DATE date);
--------------------------------------------------------------
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 12, 43, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 100, 200, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (18, 899, 786, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (19, 665, 77, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 354, 35, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (5, 43.43, 89.4, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (10, 77, 654, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 75, 97, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into LEDGER (D_ID, DR, CR, LD_DATE)
Values (9, 59.45, 69.3, TO_DATE('08/30/2016 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;
--------------------------------------------------------
--1: first formula column
create or replace function sale_formulaFormula
return Number is
BALANCE NUMBER;
n number;
BEGIN
SELECT NVL(SUM(PLD.DR),0)- NVL(SUM(PLD.CR),0)
INTO BALANCE
FROM LEDGER PLD
WHERE (PLD.d_ID in (9)) ;
--Commenting since am taking only 1 day data
--AND PLD.LD_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE;
Return balance;
end;
--Call
select sale_formulaFormula from dual;
--Got result -- 156.15
--------------------------------------------------------------------------------
--2: second formula column
create or replace function expence_formulaFormula
return Number is
BALANCE NUMBER;
n number;
BEGIN
SELECT NVL(SUM(PLD.DR),0)-NVL(SUM(PLD.CR),0)
INTO BALANCE
FROM LEDGER PLD
WHERE (PLD.d_ID in (10,19,20,5,18));
--Commenting since am taking only 1 day data
--AND PLD.LD_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE;
Return balance;
end;
------------------------------------------------
--Call
select expence_formulaFormula from dual;
--Got result -- 78.03
----------------------------------------------------
--3 Function 3
create or replace function CF_4Formula
return Char is
begin
--return type is char so converting the result to char
return to_char(nvl(sale_formulaFormula,0) - nvl(expence_formulaFormula,0));
end;
--Call
select CF_4Formula from dual;
得到的结果-->156.15-78.03=78.12,这是正确的
你能不能也提供一些样本数据。向我们展示您的函数返回的值以及此处期望的值。该函数不会返回
True
,您的公式将返回一个数值,该数值将由函数转换为Char
。您能否同时提供一些示例数据。显示您的函数返回的值以及此处的预期值。该函数不会返回True
,您的公式将返回一个数值,该数值将由函数转换为Char
。