2012-11-25 93 views
0

如何将第一个函数的返回值调用到第二个函数中?这是第一个函数计算客户,使我店的访问量:将Oracle PLSQL函数调用成第二个函数

CREATE OR REPLACE FUNCTION CALCULATE (NUM CUSTOMER.CUST_VISIT%TYPE) 
RETURN NUMBER 
IS 
V_CUST_VISIT NUMBER(3); 
V_COUNT INTEGER; 
BEGIN 
SELECT CUST_VISIT 
INTO V_CUST_VISIT 
FROM CUSTOMER, BOOKING 
WHERE CUSTOMER.CUST_ID = BOOKING.CUST_ID; 
SELECT MAX(COUNT(*)) 
INTO v_count 
FROM BOOKING 
GROUP BY CUST_ID 
HAVING count(*)>=0; 

CASE v_count 
WHEN 3 THEN v_cust_visit:= v_count; 
DBMS_OUTPUT.PUT_LINE('10% DISCOUNT DUE'); 

WHEN 6 THEN v_cust_visit:= v_count; 
DBMS_OUTPUT.PUT_LINE('20% DISCOUNT DUE'); 

WHEN 9 THEN v_cust_visit:= v_count; 
DBMS_OUTPUT.PUT_LINE('30% DISCOUNT DUE'); 

ELSE v_cust_visit:= v_count; 
DBMS_OUTPUT.PUT_LINE('OOPS NO DISCOUNT DUE YET! AFTER THREE BOOKINGS'); 
END CASE; 
END; 
/
Where in the second function: 
CREATE OR REPLACE FUNCTION CALC_BILL 
(BILL_NUM TREATMENT.TREAT_COST%TYPE) 

RETURN NUMBER 

IS 

CUST_ID VARCHAR2(4); 
TREAT_COST NUMBER(10,2); 
v_TREAT_cost TREATMENT.TREAT_COST%TYPE; 
DISCOUNTED_BILL NUMBER(10,2); 
NO_DISCOUNT EXCEPTION; 

BEGIN 

SELECT TREAT_COST 
INTO v_treat_cost 

FROM CUSTOMER C, TREATMENT T, TREAT_SESSION TS 
WHERE C.CUST_ID = TS.CUST_ID 
AND T.TREAT_ID = TS.TREAT_ID; 

IF 计算方法():= 3 - 这是我怎样努力和它未work-- THEN DISCOUNTED_BILL := v_treat_cost-(v_treat_cost * 0.1);

ELSIF CALCULATE:= 6 THEN DISCOUNTED_BILL:= v_treat_cost-(v_treat_cost * 0.2);

ELSIF CALCULATE:= 9 THEN DISCOUNTED_BILL:= v_treat_cost-(v_treat_cost * 0.3); ELSE RAISE NO_DISCOUNT;

END IF; 
END; 
/
+3

你不应该使用在你的''CALCULATE' CALL_BILL'? – bonCodigo

回答

1

分配函数调用一个变量:

some_number_result := calculate(some_input); 

    if some_number_result = 1 then 
     -- do stuff 
    end if; 

等等

+0

感谢Greg,这是我现在所做的,它看起来不错v_CUST_VISIT:= CALCULATE(DISCOUNTED_BILL); IF v_CUST_VISIT = 3 THEN DISCOUNTED_BILL:= v_treat_cost-(v_treat_cost * 0.1); \t End IF; –

相关问题