ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

Oracleѧϰ£¨12£©£º´æ´¢¹ý³Ì£¬º¯ÊýºÍ´¥·¢Æ÷(¶þ)
2015-07-24 10:57:38 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:4´Î
Tags£ºOracle ѧϰ ´æ´¢ ¹ý³Ì º¯Êý ´¥·¢Æ÷
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import oracle.jdbc.OracleTypes; import oracle.jdbc.OracleCallableStatement; import org.junit.Test; import demo.utils.JDBCUtills; /* * Statement < PreparedStatement < CallableStatement */ public class TestOracle { /* * create or replace procedure queryEmpInfo(eno in number, pename out varchar2, psal out number, pjob out varchar2) */ @Test public void testProcedure(){ //´æ´¢¹ý³Ì²âÊÔÓÃÀý //{call procedure-name(??/)} String sql = "{call queryEmpInfo(?,?,?,?)}"; Connection conn = null; CallableStatement call = null; try{ conn = JDBCUtills.getConnection(); call = conn.prepareCall(sql); //Set value to param call.setInt(1, 7839); //declare out parameter call.registerOutParameter(2, OracleTypes.VARCHAR); call.registerOutParameter(3, OracleTypes.NUMBER); call.registerOutParameter(4, OracleTypes.VARCHAR); //run call.execute(); //get returned values String name = call.getString(2); double sal = call.getDouble(3); String job = call.getString(4); System.out.println(name); System.out.println(sal); System.out.println(job); }catch(Exception ex){ ex.printStackTrace(); }finally{ JDBCUtills.release(conn, call, null); } } /* * create or replace function queryEmpIncome(eno in number) return number */ @Test public void testFunction(){ //´æ´¢º¯Êý²âÊÔÓÃÀý //{?=call procedure-name(??/)} String sql = "{?= call queryEmpIncome(?)}"; Connection conn = null; CallableStatement call = null; try{ conn = JDBCUtills.getConnection(); call = conn.prepareCall(sql); call.registerOutParameter(1, OracleTypes.NUMBER); call.setInt(2, 7839); call.execute(); double income = call.getDouble(1); System.out.println(income); }catch(Exception ex){ ex.printStackTrace(); }finally{ JDBCUtills.release(conn, call, null); } } @Test public void testCursor(){ //·ÃÎÊÓαê²âÊÔÓÃÀý String sql = "{call MYPACKAGE.queryEmpList(?,?)}"; //×¢Òâ´Ë¾äÒªÓÐ{} Connection conn = null; CallableStatement call = null; ResultSet rs = null; try{ conn = JDBCUtills.getConnection(); call = conn.prepareCall(sql); call.setInt(1, 20); call.registerOutParameter(2, OracleTypes.CURSOR); call.execute(); rs = ((OracleCallableStatement)call).getCursor(2); while(rs.next()){ String name = rs.getString("ename"); double sal = rs.getDouble("sal"); System.out.println(name+ " " + sal); } }catch(Exception ex){ ex.printStackTrace(); }finally{ JDBCUtills.release(conn, call, rs); } } }

ÔÚJavaÓïÑÔÖе÷ÓÃ

ÔÚJavaÓïÑÔÖе÷Óô洢¹ý³Ì

\

ÔÚJavaÓïÑÔÖе÷Óô洢º¯Êý

\

ʲôʱºòÓô洢¹ý³Ì/´æ´¢º¯Êý£¿


Ô­Ôò£ºÈç¹ûÖ»ÓÐÒ»¸ö·µ»ØÖµ£¬Óô洢º¯Êý£»·ñÔò£¬¾ÍÓô洢¹ý³Ì¡£





´¥·¢Æ÷

´¥·¢Æ÷¶¨Òå

Êý¾Ý¿â´¥·¢Æ÷ÊÇÒ»¸öÓë±íÏà¹ØÁªµÄ¡¢´æ´¢µÄPL/SQL³ÌÐò¡£Ã¿µ±Ò»¸öÌØ¶¨µÄÊý¾Ý²Ù×÷Óï¾ä(Insert,update,delete)ÔÚÖ¸¶¨µÄ±íÉÏ·¢³öʱ£¬Oracle×Ô¶¯µØÖ´Ðд¥·¢Æ÷Öж¨ÒåµÄÓï¾äÐòÁС£

´¥·¢Æ÷µÄÀàÐÍ

Óï¾ä¼¶´¥·¢Æ÷

?ÔÚÖ¸¶¨µÄ²Ù×÷Óï¾ä²Ù×÷֮ǰ»òÖ®ºóÖ´ÐÐÒ»´Î£¬²»¹ÜÕâÌõÓï¾äÓ°ÏìÁ˶àÉÙÐÐ ¡£

Ðм¶´¥·¢Æ÷£¨FOR EACH ROW£©

?´¥·¢Óï¾ä×÷ÓõÄÿһÌõ¼Ç¼¶¼±»´¥·¢¡£ÔÚÐм¶´¥·¢Æ÷ÖÐʹÓÃoldºÍnewα¼Ç¼±äÁ¿, ʶ±ðÖµµÄ״̬¡£


´´½¨´¥·¢Æ÷

CREATE [or REPLACE] TRIGGER ´¥·¢Æ÷Ãû

{BEFORE | AFTER}

{DELETE | INSERT | UPDATE [OFÁÐÃû]}

ON ±íÃû

[FOR EACH ROW [WHEN(Ìõ¼þ) ] ]

PLSQL¿é


´¥·¢Æ÷¼òµ¥ÊµÀý


/*
µÚÒ»¸ö´¥·¢Æ÷:¶Ôupdate
*/
create or replace trigger sayHello
after update
on emp
begin


dbms_output.put_line('Hello World');


end;
/

Ðм¶´¥·¢Æ÷

´¥·¢Óï¾äÓëα¼Ç¼±äÁ¿µÄÖµ

\


´¥·¢Æ÷Ó¦Ó󡾰ʵÀý

³¡¾°Ò»£¨Óï¾ä´¥·¢Æ÷£©

/*
´¥·¢Æ÷Ó¦Óó¡¾°Ò»£ºÊµÏÖ¸´ÔӵݲȫÐÔ¼ì²é


ÏÞÖÆ·Ç¹¤×÷ʱ¼äÏòÊý¾Ý¿âemp²åÈëÊý¾Ý

1. ÖÜÄ©£ºÐÇÆÚÁù ÐÇÆÚÈÕ to_char(sysdate,'day')
2. <9 or >18µã to_number(to_char(sysdate,'hh24'))


*/
create or replace trigger securityEmp
before insert
on emp
begin
if to_char(sysdate,'day') in ('ÐÇÆÚÈý','ÐÇÆÚÁù','ÐÇÆÚÈÕ')
or to_number(to_char(sysdate,'hh24')) not between 9 and 18 then
raise_application_error(-20001,'²»ÄÜÔڷǹ¤×÷ʱ¼ä²åÈëÊý¾Ý');


end if;
end;
/



³¡¾°¶þ£¨Ðм¶´¥·¢Æ÷£©


/*
´¥·¢Æ÷Ó¦Óó¡¾°¶þ£ºÈ·ÈÏÊý¾Ý


Õǹ¤×ʲ»ÄÜÔ½ÕÇÉÙ


Ðм¶´¥·¢Æ÷µÄÁ½¸öα¼Ç¼±äÁ¿ :old , :new
*/
create or replace trigger checksal
before update
on emp
for each row
begin

if :old.sal > :new.sal then
raise_application_error(-20002,'ÕǺóµÄ¹¤×ʲ»ÄÜÉÙÓÚÕÇǰµÄ¡£ÕǺó:'||:new.sal||' ÕÇǰ£º'||:old.sal);

end if;


end;
/





´¥·¢Æ÷Á·Ï°

ÏÞÖÆÃ¿¸ö²¿ÃÅÖ»ÕÐÆ¸5ÃûÖ°¹¤£¬³¬¹ý¼Æ»®Ôò±¨³ö´íÎóÐÅÏ¢

*****************************************************************************
/*
Á·Ï°£ºÏÞÖÆÃ¿¸ö²¿ÃÅÖ»ÕÐÆ¸5ÃûÖ°¹¤£¬³¬¹ý¼Æ»®Ôò±¨³ö´íÎóÐÅÏ¢
*/
create or replace trigger limitEmpCount
before insert on emp
for each row
declare
pCount number;-- ±£´æÃ¿¸ö²¿ÃŵÄÔ±¹¤Êý
begin
select count(*) into pcount from emp where deptno=:new.deptno;
if pcount > 5 then raise_application_error(-20004,'²¿ÃÅ:' || :new.deptno || ' Ô±¹¤ÒÑÓÐ5ÈË');
end if;
end;

?

Ê×Ò³ ÉÏÒ»Ò³ 1 2 ÏÂÒ»Ò³ βҳ 2/2/2
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºoracledblinkÔì³ÉÔ¶³ÌÊý¾Ý¿âsessi.. ÏÂһƪ£ºORA-02049:³¬Ê±:·Ö²¼Ê½ÊÂÎñ´¦ÀíµÈ..

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)