ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>蜜桃久久久久,一区二区中文,中文字幕综合一区http://www.aygfsteel.com/michaelcao/category/37255.html我的又一å?/description>zh-cnTue, 13 Jan 2009 15:23:44 GMTTue, 13 Jan 2009 15:23:44 GMT60Oracle中返回结果集的存储过½E?/title><link>http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html</link><dc:creator>依然Fantasy</dc:creator><author>依然Fantasy</author><pubDate>Tue, 13 Jan 2009 13:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html</guid><wfw:comment>http://www.aygfsteel.com/michaelcao/comments/251189.html</wfw:comment><comments>http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/michaelcao/comments/commentRss/251189.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/michaelcao/services/trackbacks/251189.html</trackback:ping><description><![CDATA[<p>googleäº?ji¨£n)一½‹‡ä¸é”™çš„例子åQŒåŠ äº?ji¨£n)点注解åQŒè¿™æ ïL(f¨¥ng)œ‹èµäh¥æ›´æ–¹ä¾¿äº†(ji¨£n)åQšï¼‰(j¨ª)</p> <p>Oracle不像SQLServer那样在存储过½E‹ä¸­ç”¨Selectž®±å¯ä»¥è¿”回结果集åQŒè€Œæ˜¯é€šè¿‡Out型的参数˜q›è¡Œ¾l“果集返回的。实际上是利用REF CURSOR</p> <p><strong>--procedure˜q”回记录集:(x¨¬)</strong></p> <p>----------------------声明一个Package-------------- <br /> CREATE OR REPLACE PACKAGE pkg_test <br /> AS <br /> TYPE <span style="color: rgb(0, 0, 255);">myrctype</span> IS REF CURSOR; <br /> <br /> PROCEDURE get (p_id NUMBER, <span style="color: rgb(0, 0, 255);">p_rc OUT myrctype</span>); --Package中声明名为get çš„Procedure(只有接口没内å®?</p> <p>END pkg_test;</p> <p>--------------------------------------------------------</p> <p><br /> -----------------声明Package BodyåQŒå³ä¸Šé¢Package中的内容åQŒåŒ…括Procedure get--------------------- <br /> CREATE OR REPLACE PACKAGE BODY pkg_test <br /> AS <br /> PROCEDURE get (p_id NUMBER, <span style="color: rgb(0, 0, 255);">p_rc OUT myrctype</span>) <br /> IS <br /> sqlstr VARCHAR2 (500); <br /> BEGIN <br /> IF p_id = 0 THEN <br /> OPEN p_rc FOR <br /> SELECT ID, NAME, sex, address, postcode, birthday <br /> FROM student; <br /> ELSE <br /> sqlstr := <br /> 'select id,name,sex,address,postcode,birthday <br /> from student where id=<span style="color: rgb(0, 0, 255);">:w_id</span>'; --w_id是个参数åQ?/p> <p><span style="color: rgb(0, 0, 255);">--以下 p_rc是个</span><span style="color: rgb(0, 0, 0);">REF CURSOR</span><span style="color: rgb(0, 0, 255);">游标¾cÕdž‹åQŒè€Œä¸”是OUT型参敎ͼŒå›_¯˜q”回一个记录集äº?ji¨£n)。USING p_idž®±æ˜¯æ›¿æ¢ä¸Šé¢SQLä¸?w_id值拉:)</span> <br /> <span style="color: rgb(0, 0, 255);">OPEN p_rc FOR sqlstr USING p_id; </span></p> <p>END IF; <br /> END get; <br /> END pkg_test; <br /> <br /> <br /> <strong>--function˜q”回记录集的例子åQŒåŽŸç†å’Œä¸Šé¢ç›¸åŒåQŒè€Œæ˜¯ç”¨functionçš„return值来˜q”回记录集ã€?/strong></p> <p>函数˜q”回记录é›? <br /> 建立带ref cursor定义的包和包体及(qi¨¢ng)函数åQ? <br /> CREATE OR REPLACE <br /> package pkg_test as <br /> /* 定义ref cursor¾cÕdž‹ <br /> 不加return¾cÕdž‹åQŒäØ“(f¨´)å¼Þq±»åž‹ï¼Œå…è®¸åŠ¨æ€sql查询åQ? <br /> 否则为强¾cÕdž‹åQŒæ— æ³•ä‹É用动态sql查询; <br /> */ <br /> type myrctype is ref cursor; <br /> function get(intID number) return myrctype; <br /> end pkg_test; <br /> /</p> <p>CREATE OR REPLACE <br /> package body pkg_test as <br /> --函数ä½? <br /> function get(intID number) return myrctype is <br /> rc myrctype; --定义ref cursor变量 <br /> sqlstr varchar2(500); <br /> begin <br /> if intID=0 then <br /> --é?r¨´n)态测试,直接用select语句直接˜q”回¾l“æžœ <br /> open rc for select id,name,sex,address,postcode,birthday from student; <br /> else <br /> --动态sql赋å€û|¼Œç”?w_id来申明该变量从外部获å¾? <br /> sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id'; <br /> --动态测试,用sqlstr字符串返回结果,用using关键词传递参æ•? <br /> open rc for sqlstr using intid; <br /> end if;</p> <p>return rc; <br /> end get;</p> <p>end pkg_test;</p> <img src ="http://www.aygfsteel.com/michaelcao/aggbug/251189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/michaelcao/" target="_blank">依然Fantasy</a> 2009-01-13 21:55 <a href="http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在ORACLE存储˜q‡ç¨‹ä¸­åˆ›å»ÞZÍ(f¨´)时表http://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html依然Fantasy依然FantasyTue, 13 Jan 2009 13:23:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.htmlhttp://www.aygfsteel.com/michaelcao/comments/251185.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251185.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/251185.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/251185.html在ORACLE存储˜q‡ç¨‹ä¸­åˆ›å»ÞZÍ(f¨´)时表

存储˜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;



]]>
Oracle:PL/SQL 中如何ä‹É用Arrayhttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html依然Fantasy依然FantasyTue, 13 Jan 2009 13:07:00 GMThttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.htmlhttp://www.aygfsteel.com/michaelcao/comments/251183.htmlhttp://www.aygfsteel.com/michaelcao/archive/2009/01/13/251183.html#Feedback0http://www.aygfsteel.com/michaelcao/comments/commentRss/251183.htmlhttp://www.aygfsteel.com/michaelcao/services/trackbacks/251183.htmlOracle本èín没数¾l„的概念åQŒä½†æ˜¯é€šè¿‡Oracleçš„Collectionså’ŒRecords¾cÕdž‹å¯ä»¥æ¨¡ä»¿å‡ºå•¾l´æ•°¾l„和多维数组ã€?/p>

请参�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



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÄÉÓºÏØ| ÇåÐÂÏØ| ºâÉ½ÏØ| ÏåÔ«ÏØ| µÂ½­ÏØ| ºé½­ÊÐ| ÃçÀõÏØ| Ò˲ýÊÐ| ÄôÀ­Ä¾ÏØ| Æ½Ô­ÏØ| ÓÀÐÞÏØ| ÏæÌ¶ÏØ| Ë«ÅÆÏØ| µÂÖÝÊÐ| ¼ª°²ÊÐ| ÇìÔªÏØ| ÂÛ̳| °¢ÈÙÆì| ¸·ÐÂÊÐ| »¯µÂÏØ| ׿ÄáÏØ| °²Î÷ÏØ| ÍòÊ¢Çø| ¾£ÖÝÊÐ| ²©Ò°ÏØ| ͨ½­ÏØ| ÐÅÑôÊÐ| ÐÂÎÅ| µæ½­ÏØ| ´¾°²ÏØ| ÑôË·ÏØ| ÓÏÑô| ·ïÌ¨ÏØ| Çíº£ÊÐ| ÌìË®ÊÐ| ɳƺ°ÓÇø| °à¸êÏØ| ̨ÄÏÊÐ| ´óʯÇÅÊÐ| ÓÀ¶¨ÏØ| ÃÚÑôÏØ|