左右连接+
select a.dptid,name from testone a left outer join testtwo b on a.DPTID=b.dptid;//左连接
select a.dptid,name from testone a,testtwo b where a.DPTID=b.dptid(+);//左连接
备注:"+"在哪边,哪边可有可无,连接名称在"+"号的反方向
LOOP
/* Formatted on 2007/10/30 20:40 (Formatter Plus v4.8.6) */
CREATE OR REPLACE PROCEDURE test_date_while (in_date IN VARCHAR2)
IS
v_start_date DATE;
v_end_date DATE;
BEGIN
SELECT start_date, end_date
INTO v_start_date, v_end_date
FROM td_a_month
WHERE MONTH = TO_NUMBER (SUBSTR (in_date, 1, 6));
DBMS_OUTPUT.ENABLE (255);
--BMS_OUTPUT.DISABLE;
DBMS_OUTPUT.put_line ('test...');
LOOP
EXIT WHEN v_start_date > v_end_date;
DBMS_OUTPUT.put_line (TO_NUMBER (TO_CHAR (v_start_date, 'yyyymmdd')));
DBMS_OUTPUT.put_line (TO_CHAR (v_start_date, 'yyyy-mm-dd'));
v_start_date := v_start_date + 1;
END LOOP;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL; --ROLLBACK;
WHEN OTHERS
THEN
NULL; --ROLLBACK;
END test_date_while;
MERGE
merge into tableX a
using (select * from tableY) c
on( c.calling_brand_code = a.calling_brand_code
AND c.calling_area_code = a.calling_area_code
AND c.calling_tsp_code = a.calling_tsp_code
AND c.calling_code = a.calling_code)
when matched then update SET
a.last_date=decode(sign(last_date - to_date(i_dealdate,'yyyymmdd')),1,last_date,to_date(i_dealdate,'yyyymmdd')),
a.num_cdrs= c.num_cdrs,
a.DURATION= c.DURATION,
a.settlement_duration= c.settlement_duration,
a.sett_fees = c.sett_fees
when not matched then insert (a.calling_code, a.calling_tsp_code, a.calling_area_code,
a.calling_brand_code, a.first_date, a.last_date, a.num_cdrs, a.DURATION,
a.settlement_duration, a.sett_fees)values
(
c.calling_code, c.calling_tsp_code, c.calling_area_code,
c.calling_brand_code, to_date(i_dealdate,'yyyymmdd'), to_date(i_dealdate,'yyyymmdd'), c.num_cdrs,
c.DURATION, c.settlement_duration, c.sett_fees);