å˜å‚¨˜q‡ç¨‹é‡Œä¸èƒ½ç›´æŽ¥ä‹É用DDLè¯å¥åQŒæ‰€ä»¥åªèƒ½ä‹É用动æ€SQLè¯å¥æ¥æ‰§è¡?/span>
--ON COMMIT DELETE ROWS 说明临时表是事务指定åQŒæ¯‹Æ¡æäº¤åŽORACLEž®†æˆªæ–表åQˆåˆ 除全部行åQ?
--ON COMMIT PRESERVE ROWS 说明临时表是ä¼?x¨¬)è¯æŒ‡å®šåQŒå½“䏿–ä¼?x¨¬)è¯æ—¶ORACLEž®†æˆªæ–表ã€?/p>
CREATE OR REPLACE PROCEDURE temptest
(p_searchDate IN DATE)
IS
v_count INT;
str varchar2(300);
BEGIN
v_count := 0;
str:='drop table SETT_DAILYTEST';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (
NACCOUNTID NUMBER not null,
NSUBACCOUNTID NUMBER not null)
ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用动æ€SQLè¯å¥æ¥æ‰§è¡?/span>
str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
execute immediate str;
END temptest;
上é¢å»ºç«‹ä¸€ä¸ªäÍ(f¨´)时表的å˜å‚¨è¿‡½E?/p>
䏋颿˜¯æ‰§è¡Œä¸€äº›æ“ä½?å‘äÍ(f¨´)时表写数æ®ã€?/p>
CREATE OR REPLACE PROCEDURE PR_DAILYCHECK
(
p_Date IN DATE,
p_Office IN INTEGER,
p_Currency IN INTEGER,
P_Check IN INTEGER,
p_countNum OUT INTEGER)
IS
v_count INT;
BEGIN
v_count := 0;
IF p_Date IS NULL THEN
dbms_output.put_line('日期ä¸èƒ½ä¸ºç©º');
ELSE
IF P_Check = 1 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_subaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
IF P_Check = 2 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
END IF;
END PR_DAILYCHECK;
请å‚è€?lt;<Oracle PL/SQL Programming>> Chapter 11ã€Chapter 12ã€?/p>
---------------------- å•维数组 ------------------------
DECLARE
TYPE emp_ssn_array IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; ----注:(x¨¬)声明一个Collection
best_employees emp_ssn_array;
worst_employees emp_ssn_array;
BEGIN
best_employees(1) := '123456';
best_employees(2) := '888888';
worst_employees(1) := '222222';
worst_employees(2) := '666666';
FOR i IN 1..best_employees.count LOOP
DBMS_OUTPUT.PUT_LINE('i='|| i || ', best_employees= ' ||best_employees(i)
|| ', worst_employees= ' ||worst_employees(i));
END LOOP;
END;
---------------------- 多维数组 ------------------------
DECLARE
TYPE emp_type IS RECORD ---------注:(x¨¬)声明一个Record¾cÕdž‹ã€€emp_type
( emp_id employee_table.emp_id%TYPE,           ----Record¾cÕdž‹ä¸çš„æˆå‘˜...
emp_name employee_table.emp_name%TYPE,
emp_gender employee_table.emp_gender%TYPE );
TYPE emp_type_array IS TABLE OF ----注:(x¨¬)声明一个Collection¾cÕdž‹ emp_type_array åQŒå…¶ä¸å…ƒç´ 䨓(f¨´)emp_type¾cÕdž‹
emp_type INDEX BY BINARY_INTEGER;
emp_rec_array emp_type_array;
emp_rec emp_type;
BEGIN
emp_rec.emp_id := 300000000;
emp_rec.emp_name := 'Barbara';
emp_rec.emp_gender := 'Female';
emp_rec_array(1) := emp_rec;
emp_rec.emp_id := 300000008;
emp_rec.emp_name := 'Rick';
emp_rec.emp_gender := 'Male';
emp_rec_array(2) := emp_rec;
FOR i IN 1..emp_rec_array.count LOOP
DBMS_OUTPUT.PUT_LINE('i='||i
||', emp_id ='||emp_rec_array(i).emp_id
||', emp_name ='||emp_rec_array(i).emp_name
||', emp_gender = '||emp_rec_array(i).emp_gender);
END LOOP;
END;
-------------- Result --------------
i=1, emp_id =300000000, emp_name =Barbara, emp_gender = Female
i=2, emp_id =300000008, emp_name =Rick, emp_gender = Male