《Oracle中存储过程的介绍ppt课件.ppt》由会员分享,可在线阅读,更多相关《Oracle中存储过程的介绍ppt课件.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Oracle中存储过程的介绍中存储过程的介绍在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么PL/SQL简介(过程化简介(过程化SQL语言)语言)oPL/SQL是Oracle在标准SQL语言上的过程性扩展。o不仅允许嵌入SQL语句,而且允许定义变量和常量,允许过程语言结构(条件分支语句和循环语句),允许使用例外处理Oracle错误。oPL/SQL最主要的功能是提供了一种服务器端的存储过程语言,安全、强健、易于使用。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么使用PL/SQL块的优
2、点o对于一般的数据库(如SQLSERVER、DB2等),当应用程序访问RDBMS时,每次只能发送单条SQL语句。执行4条SQL语句需要在网络上发送4次语句。o对于Oracle数据库来说,通过使用PL/SQL块,可以将多条SQL语句组织到同一个PL/SQL块中,从而降低网络开销,提高应用程序性能。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么存储过程(存储过程(Procedure)o存储过程是Oracle数据库的一种对象,是一种带名的PL/SQL过程程序块,是能完成一定操作的一组SQL语句,它在创建后,以编译了的形式存储在数据库中,可以被
3、有权用户在任何需要的地方调用。o通过使用过程,不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能。(假如某应用程序需要经常向某张表中插入数据,并且在插入数据时需要对数据进行检查验证,为了简化客户端的维护,可以使用存储过程)在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么在项目开发中使用存储过程的好处在项目开发中使用存储过程的好处o如果我们通过创建存储过程以及程序中调用存储过程,就可以避免将SQL语句同JSP代码混杂在一起o第一,大大提高效率。存储过程本身的执行速度很快,而且,调用存储过程可以大大减少同数据库的交互次数,
4、减少网络开销。o第二,提高安全性。假如将SQL语句混合在JSP代码中,一旦代码失密,同时也就意味着数据库结构失密。o第三,有利于SQL语句的重用。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么建立存储过程oCREATEORREPLACEPROCEDUREProcedure_name(argument1mode1datatype1,argument2mode2datatype2,)ISASPL/SQLBLOCK;在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么调用存储过程调用存储过程
5、o在Oracle的SQL*PLUS中调用过程时,需要使用CALL或EXECUTE命令。o在PL/SQL块中存储过程可以直接引用。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么过程参数过程参数o建立过程时,既可以指定过程参数,也可以不提供任何参数。o过程参数包括输入参数、输出参数和输入输出参数3种类型。o输入参数(IN)接收调用环境的输入数据;输出参数(OUT)用于将输出数据传递到调用环境;输入输出参数(INOUT)不仅接收输入数据,而且输出数据到调用环境。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为
6、浪费这一点点算不了什么无参数的过程无参数的过程在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么带输入参数的过程(带输入参数的过程(IN关键字,默认参数模式是输入参数)关键字,默认参数模式是输入参数)需要为输入参数提供数据值。需要为输入参数提供数据值。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么带输出参数的过程(带输出参数的过程(OUT 关键字,需要使用变量接收输关键字,需要使用变量接收输出参数的数据值)出参数的数据值)在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自
7、己在浪费,也许你认为浪费这一点点算不了什么带输入输出参数(带输入输出参数(IN OUT)在调用之前需要定义变量输)在调用之前需要定义变量输入值,调用结束之后使用变量输出数据。入值,调用结束之后使用变量输出数据。在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么存储过程中可以使用异常处理在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么JAVA中调用中调用Oracle存储过程存储过程o存储过程(仅输入参数)为:oCREATEORREPLACEPROCEDURETESTA(PARA1INVA
8、RCHAR2,PARA2INVARCHAR2)ASBEGININSERTINTOHYQ.B_ID(I_ID,I_NAME)VALUES(PARA1,PARA2);ENDTESTA;在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么opackagecom.hyq.src;importjava.sql.*;importjava.sql.ResultSet;publicclassTestProcedureOnepublicTestProcedureOne()publicstaticvoidmain(Stringargs)Stringdriver=
9、oracle.jdbc.driver.OracleDriver;StringstrUrl=jdbc:oracle:thin:127.0.0.1:1521:hyq;Statementstmt=null;ResultSetrs=null;Connectionconn=null;CallableStatementcstmt=null;tryClass.forName(driver);conn=DriverManager.getConnection(strUrl,hyq,hyq);CallableStatementproc=null;proc=conn.prepareCall(callHYQ.TEST
10、A(?,?);proc.setString(1,100);proc.setString(2,TestOne);proc.execute();catch(SQLExceptionex2)ex2.printStackTrace();catch(Exceptionex2)ex2.printStackTrace();在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么ofinallytryif(rs!=null)rs.close();if(stmt!=null)stmt.close();if(conn!=null)conn.close();catch
11、(SQLExceptionex1)在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么带返回值的存储过程o存储过程为:CREATEORREPLACEPROCEDURETESTB(PARA1INVARCHAR2,PARA2OUTVARCHAR2)ASBEGINSELECTINTOPARA2FROMTESTTBWHEREI_ID=PARA1;ENDTESTB;在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么opackagecom.hyq.src;publicclassTestProcedur
12、eTWOpublicTestProcedureTWO()publicstaticvoidmain(Stringargs)Stringdriver=oracle.jdbc.driver.OracleDriver;StringstrUrl=jdbc:oracle:thin:127.0.0.1:1521:hyq;Statementstmt=null;ResultSetrs=null;Connectionconn=null;tryClass.forName(driver);conn=DriverManager.getConnection(strUrl,hyq,hyq);CallableStatemen
13、tproc=null;proc=conn.prepareCall(callHYQ.TESTB(?,?);proc.setString(1,100);proc.registerOutParameter(2,Types.VARCHAR);proc.execute();StringtestPrint=proc.getString(2);System.out.println(=testPrint=is=+testPrint);catch(SQLExceptionex2)ex2.printStackTrace();catch(Exceptionex2)ex2.printStackTrace();在日常生
14、活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么ofinallytryif(rs!=null)rs.close();if(stmt!=null)stmt.close();if(conn!=null)conn.close();catch(SQLExceptionex1)在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么返回结果集:需要定义游标(类似于指针)作为输出参数,并且要用到Oracle中包(package)的概念o1.包头(负责定义):CREATEORREPLACEPACKAGETESTP
15、ACKAGEASTYPETest_CURSORISREFCURSOR;-定义游标变量PROCEDURETESTC(p_CURSOROUTTest_CURSOR)-定义过程,使用游标作为输出参数endTESTPACKAGE;o2.包体(具体实现)CREATEORREPLACEPACKAGEBODYTESTPACKAGEISPROCEDURETESTC(p_CURSOROUTTest_CURSOR)ASBEGINOPENp_CURSORFORSELECT*FROMHYQ.TESTTB;ENDTESTC;ENDTESTPACKAGE;在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在
16、浪费,也许你认为浪费这一点点算不了什么tryClass.forName(driver);conn=DriverManager.getConnection(strUrl,hyq,hyq);CallableStatementproc=null;proc=conn.prepareCall(callhyq.testc(?);proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);proc.execute();rs=(ResultSet)proc.getObject(1);while(rs.next()System.out.println(+rs.getString(1)+rs.getString(2)+);在日常生活中,随处都可以看到浪费粮食的现象。也许你并未意识到自己在浪费,也许你认为浪费这一点点算不了什么oTHEEND