⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第八章 pl-sql子程序 - pl-sql用户指南与参考 - whatiswhat.htm

📁 sql初学者不错的教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
          <LI><A href="http://blog.chinaunix.net/u1/44734/article_62693.html">· 
          文摘<!-- a62693 --></A><!-- 62693 --> 
          <LI><A href="http://blog.chinaunix.net/u1/44734/article_82547.html">· 
          JavaScript<!-- a82547 --></A><!-- 82547 --> 
          <LI><A href="http://blog.chinaunix.net/u1/44734/article_83441.html">· 
          Linux&nbsp;&nbsp;&nbsp;<FONT face="Wingdings 3">}</FONT></A>
          <UL class=ul2>
            <LI><A 
            href="http://blog.chinaunix.net/u1/44734/article_83906.html">· VIM<!-- a83906 --></A><!-- 83906 --> </LI></UL>
          <LI><A href="http://blog.chinaunix.net/u1/44734/article_62689.html">· 
          杂谈<!-- a62689 --></A><!-- 62689 --> 
          <LI><A href="http://blog.chinaunix.net/u1/44734/article_89165.html">· 
          Windows<!-- a89165 --></A><!-- 89165 --> </LI></UL></LI>
        <LI class=ul0><A class=list1 
        href="http://blog.chinaunix.net/u1/44734/index.html">首页</A> </LI></UL></TD>
    <TD width=10></TD></TR>
  <TR>
    <TD colSpan=4>
      <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0 
      cellPadding=0 width=980 border=0>
        <TBODY>
        <TR>
          <TD></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<SCRIPT language=javascript>function $(s){return document.getElementById(s);}function ShowHideDiv(divid,iImg){if($(divid).style.display == "none"){iImg.src="../../templates/newgreen/images/dot2.gif";$(divid).style.display = "block";iImg.title="收起";}else{iImg.src="../../templates/newgreen/images/dot4.gif";$(divid).style.display = "none";iImg.title="展开";}}navHover();</SCRIPT>

<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0 
cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD height=3></TD></TR></TBODY></TABLE><BR>
<TABLE style="BORDER-COLLAPSE: collapse" borderColor=#111111 cellSpacing=0 
cellPadding=0 width="90%" align=center border=0>
  <TBODY>
  <TR>
    <TD width=18 height=28><IMG alt="" 
      src="第八章 PL-SQL子程序 - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_left_top.gif" 
      border=0></TD>
    <TD 
    background="第八章 PL-SQL子程序 - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_top.gif">
      <P style="MARGIN: 5px; LINE-HEIGHT: 150%"></P></TD>
    <TD width=18 height=28><IMG alt="" 
      src="第八章 PL-SQL子程序 - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_right_top.gif" 
      border=0></TD></TR>
  <TR>
    <TD width=18 
    background="第八章 PL-SQL子程序 - PL-SQL用户指南与参考 - whatiswhat.files/bg_art_left.gif"></TD>
    <TD align=middle bgColor=#f5fdee><BR><FONT style="FONT-SIZE: 14pt" 
      color=#295200><B>第八章 PL/SQL子程序</B></FONT> 
      <TABLE style="BORDER-COLLAPSE: collapse" borderColor=#a5bd6b cellSpacing=1 
      cellPadding=0 width="100%" border=1>
        <TBODY>
        <TR>
          <TD align=middle>
            <TABLE style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" 
            cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD align=middle>
                  <TABLE 
                  style="BORDER-COLLAPSE: collapse; WORD-WRAP: break-word" 
                  cellSpacing=0 cellPadding=0 width="100%" border=0>
                    <TBODY>
                    <TR>
                      <TD>
                        <DIV id=art style="MARGIN: 15px">
                        <DIV class=postTitle><A class=postTitle2 
                        id=AjaxHolder_ctl01_TitleUrl 
                        href="http://www.cnblogs.com/cxd4321/archive/2008/03/19/1113188.html">第八章 
                        PL/SQL子程序</A> </DIV>
                        <P class=title1>一、什么是子程序</P>
                        <P>子程序就是能够接受参数并被其他程序所调用的命名PL/SQL块。PL/SQL子程序有两种类型,过程和函数。一般地,过程用于执行一个操作,而函数用于计算一个结果值。</P>
                        <P>与未命名或匿名PL/SQL块一样,子程序也有声明部分,执行部分和一个可选的异常处理部分。声明部分包含类型、游标、常量、变量、异常和嵌套子程序的声明。这些内容都是本地的,在程序退出时会自动销毁。执行部分包含赋值语句、流程控制语句和Oracle的数据操作语句。异常处理部分包含异常处理程序。思考下面用于记入借方银行账户的debit_account过程: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>PROCEDURE</STRONG>&nbsp;debit_account(acct_id&nbsp;<STRONG>INTEGER</STRONG>,&nbsp;amount&nbsp;<STRONG>REAL</STRONG>)&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;old_balance&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>;<BR>&nbsp;&nbsp;new_balance&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>;<BR>&nbsp;&nbsp;overdrawn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>EXCEPTION</STRONG>;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;bal<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INTO</STRONG>&nbsp;old_balance<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;accts<BR>&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;acct_no&nbsp;=&nbsp;acct_id;<BR><BR>&nbsp;&nbsp;new_balance&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;old_balance&nbsp;-&nbsp;amount;<BR><BR>&nbsp;&nbsp;<STRONG>IF</STRONG>&nbsp;new_balance&nbsp;&lt;&nbsp;0&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>RAISE</STRONG>&nbsp;overdrawn;<BR>&nbsp;&nbsp;<STRONG>ELSE</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>UPDATE</STRONG>&nbsp;accts<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SET</STRONG>&nbsp;bal&nbsp;=&nbsp;new_balance<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;acct_no&nbsp;=&nbsp;acct_id;<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>IF</STRONG>;<BR><STRONG>EXCEPTION</STRONG><BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;overdrawn&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR><STRONG>END</STRONG>&nbsp;debit_account; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>在被调用时,这个过程接受一个银行账号和借贷金额。它使用账号从accts表中查询账目结算信息。然后用借款金额计算新的账目结算。如果计算后的余额比零小,异常就会被抛出;否则,该账号相关信息就会被更新。 
                        </P>
                        <P class=title1>二、子程序的优点</P>
                        <P>子程序能提供扩展性,它能够让我们根据自己的需求来编写特定的PL/SQL。比如,我们需要一个能够创建新部门的过程,就可以像下面这样编写代码: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>PROCEDURE</STRONG>&nbsp;create_dept(new_dname&nbsp;<STRONG>VARCHAR2</STRONG>,&nbsp;new_loc&nbsp;<STRONG>VARCHAR2</STRONG>)&nbsp;<STRONG>IS</STRONG><BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;dept<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(deptno_seq.<STRONG>NEXTVAL</STRONG>,&nbsp;new_dname,&nbsp;new_loc);<BR><STRONG>END</STRONG>&nbsp;create_dept; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>子程序还能提供模块化,就是说它可以把一个程序定义成多个模块,更易管理。这样,我们就可以用自顶而下的设计(top-down 
                        design)和逐步求精(stepwise refinement)的方法来解决问题。</P>
                        <P>此外,子程序在提高程序的重用性和可维护方面也是很有用的。只要编译成功,子程序就可以放心地用在很多应用程序中。如果它的定义内容发生了改变,受到影响的只有子程序本身而已,这就简化了维护过程。最后,子程序还有助于逻辑的抽象。使用子程序时,我们需要知道的是它们的功能,而不是它们实现功能的细节问题。 
                        </P>
                        <P class=title1>三、理解PL/SQL过程</P>
                        <P>过程是一个能执行某个特定操作的子程序。我们可以用下面的语法来编写过程: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>[<STRONG>CREATE</STRONG>&nbsp;[<STRONG>OR</STRONG>&nbsp;REPLACE]]<BR><STRONG>PROCEDURE</STRONG>&nbsp;procedure_name[(parameter[,&nbsp;parameter]...)]<BR>&nbsp;&nbsp;[<STRONG>AUTHID</STRONG>&nbsp;{DEFINER&nbsp;|&nbsp;CURRENT_USER}]&nbsp;{<STRONG>IS</STRONG>&nbsp;|&nbsp;<STRONG>AS</STRONG>}<BR>&nbsp;&nbsp;[<STRONG>PRAGMA</STRONG>&nbsp;AUTONOMOUS_TRANSACTION;]<BR>&nbsp;&nbsp;[local&nbsp;declarations]<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;executable&nbsp;statements<BR>[<STRONG>EXCEPTION</STRONG><BR>&nbsp;&nbsp;exception&nbsp;handlers]<BR><STRONG>END</STRONG>&nbsp;[name]; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>parameter的含义如下: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>parameter_name&nbsp;[<STRONG>IN</STRONG>&nbsp;|&nbsp;<STRONG>OUT</STRONG>&nbsp;[<STRONG>NOCOPY</STRONG>]&nbsp;|&nbsp;<STRONG>IN</STRONG>&nbsp;<STRONG>OUT</STRONG>&nbsp;[<STRONG>NOCOPY</STRONG>]]&nbsp;datatype<BR>[{:=&nbsp;|&nbsp;<STRONG>DEFAULT</STRONG>}&nbsp;expression] 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>CREATE子句能让我们创建保存在数据库中的独立过程。我们可以从SQL*Plus中或是在使用动态SQL的程序中执行CREATE 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -