EX1 เป็นการ select ค่าที่มีเงื่อนไข โดยที่ค่าหนึ่งเกี่ยวพันกะอีกค่าต้องใช้ || มาช่วย
เช่น req_no กับ req_no_seq ถ้า req_no = A, req_no_req = 1 2 3 อะไรก็แล้วแต่ ที่เกี่ยวพันกันจะ check ว่าค่าไหนมากกว่า เวลา ทำ criteria ก็ใช้ || ต่อกัน ในกรณีนี้อาจมีช่องว่างเกิดขึ้น จะใช้ replace ร่วมด้วยก็ได้ แต่ที่เอามาเป็นตัวอย่างไม่ replace ' ','' ให้ดูเพราะมีตัวอย่างอันเก่าอยู่แล้ว
SELECT a.req_no ,a.req_no_seq
FROM ma_request a
WHERE a.req_status = 'N' AND
a.ou_code = :parameter.ou_code AND
a.req_no||a.req_no_seq BETWEEN
NVL(:criteria.s_req_no||:criteria.s_req_no_seq,'!') AND
NVL(:criteria.e_req_no||:criteria.e_req_no_seq,chr(250))
order by a.req_no, a.req_no_seq
ようこそ (Jyokoso) MY BLOG
いらっしゃいませ (hajimemashite) สำหรับผู้เข้าใหม่นะค่ะ ^^V
29 มิถุนายน 2553
28 มิถุนายน 2553
oracle:date
การเก็บ number ของ date ในฐานข้อมูลจะ เก็บข้อมูลเป็น number เราต้องการแปลงให้เป็น
วันที่ถ้าใช้ format ไม่ได้ให้ใช้ formular แทน
function CF_1Formula return varchar is
hr number;
mm number;
vTmp_ret varchar2(100);
BEGIN
hr := trunc( :measure_time / 3600 ) ;
mm := trunc( mod( :measure_time , 3600 ) / 60 ) ;
if nvl(hr+mm,0) > 0 then
vTmp_ret := replace(to_char(hr,'00')||':'||to_char(mm,'00'),' ','');
end if;
return(vTmp_ret);
END;
วันที่ถ้าใช้ format ไม่ได้ให้ใช้ formular แทน
function CF_1Formula return varchar is
hr number;
mm number;
vTmp_ret varchar2(100);
BEGIN
hr := trunc( :measure_time / 3600 ) ;
mm := trunc( mod( :measure_time , 3600 ) / 60 ) ;
if nvl(hr+mm,0) > 0 then
vTmp_ret := replace(to_char(hr,'00')||':'||to_char(mm,'00'),' ','');
end if;
return(vTmp_ret);
END;
24 มิถุนายน 2553
ORACLE:to_char
การแปลงค่าที่เป็น number หรืออื่นๆ ให้เป็น character จะใช้ to_char และเมื่อแปลงจาก numberเป็น char จะมีช่องว่างเกิดขึ้นจคงควรให้ REPLACE เข้ามาช่วย
EX
REPLACE(TO_CHAR(NVL(S.TEST_OLD,0.00), '990.00'),' ','')
เช่นเดิมเป็น 45
จะได้ค่าใหม่เป็น45.00
EX
REPLACE(TO_CHAR(NVL(S.TEST_OLD,0.00), '990.00'),' ','')
เช่นเดิมเป็น 45
จะได้ค่าใหม่เป็น45.00
23 มิถุนายน 2553
ORACLE:report
function F_MACHINE_TECH2FormatTrigger return boolean is
begin
if :machine_tech2 is null then
return(false);
else
return (TRUE);
end if;
end;
ไว้ check ว่ามีค่ารึป่าวถ้าไม่มีค่าก็ไม่ต้องแสดงใน report
begin
if :machine_tech2 is null then
return(false);
else
return (TRUE);
end if;
end;
ไว้ check ว่ามีค่ารึป่าวถ้าไม่มีค่าก็ไม่ต้องแสดงใน report
ORACLE:NVL
H.SUBJ_CODE BETWEEN NVL( :P_SUBJ_CODE,'!') AND NVL( :P_SUBJ_CODE,CHR(250))
เป็นการเปรียบเทียบว่าค่าของ subj_code ให้อยู่ระหว่าง character ที่มีค่าน้อยที่สุด ถึง ค่าที่มีค่ามากสุด NVL เป็นการแทนค่า NULL ให้หลับ record นั้นๆที่ไม่ได้ระบุค่า
เป็นการเปรียบเทียบว่าค่าของ subj_code ให้อยู่ระหว่าง character ที่มีค่าน้อยที่สุด ถึง ค่าที่มีค่ามากสุด NVL เป็นการแทนค่า NULL ให้หลับ record นั้นๆที่ไม่ได้ระบุค่า
17 มิถุนายน 2553
SQL-DECODE
FUNCTION FPU_GET_STATUS (vParam_Status VARCHAR2,
vParam_LinID VARCHAR2) RETURN VARCHAR2 IS
vTmp_Status VARCHAR(10);
BEGIN
BEGIN
SELECT DECODE ( vParam_Status,'N',DECODE(vParam_LinID,'EN','Normal','ปกติ'),
DECODE(vParam_LinID,'EN','Cancel','ยกเลิก'))
INTO vTmp_Status
FROM dual;
/* IF (NVL(:tr_group.status,'N') = 'N') THEN
IF (:parameter.lin_id = 'EN') THEN
vTmp_Status := 'Normal';
ELSIF (:parameter.lin_id = 'TH') THEN
vTmp_Status := 'ปกติ';
END IF;
ELSIF (NVL(:tr_group.status,'N') = 'C') THEN
IF (:parameter.lin_id = 'EN') THEN
vTmp_Status := 'Cancel';
ELSIF (:parameter.lin_id = 'TH') THEN
vTmp_Status := 'ยกเลิก';
END IF;
END IF;
*/
END;
RETURN (vTmp_Status);
END;
vParam_LinID VARCHAR2) RETURN VARCHAR2 IS
vTmp_Status VARCHAR(10);
BEGIN
BEGIN
SELECT DECODE ( vParam_Status,'N',DECODE(vParam_LinID,'EN','Normal','ปกติ'),
DECODE(vParam_LinID,'EN','Cancel','ยกเลิก'))
INTO vTmp_Status
FROM dual;
/* IF (NVL(:tr_group.status,'N') = 'N') THEN
IF (:parameter.lin_id = 'EN') THEN
vTmp_Status := 'Normal';
ELSIF (:parameter.lin_id = 'TH') THEN
vTmp_Status := 'ปกติ';
END IF;
ELSIF (NVL(:tr_group.status,'N') = 'C') THEN
IF (:parameter.lin_id = 'EN') THEN
vTmp_Status := 'Cancel';
ELSIF (:parameter.lin_id = 'TH') THEN
vTmp_Status := 'ยกเลิก';
END IF;
END IF;
*/
END;
RETURN (vTmp_Status);
END;
สมัครสมาชิก:
บทความ (Atom)