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

📄 第一章 pl-sql一览 - pl-sql用户指南与参考 - whatiswhat.htm

📁 sql初学者不错的教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;<STRONG>CURSOR</STRONG>&nbsp;c1&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;ename,&nbsp;sal,&nbsp;hiredate,&nbsp;job<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp;<BR><BR>&nbsp;&nbsp;emp_rec&nbsp;&nbsp;&nbsp;c1%<STRONG>ROWTYPE</STRONG>;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;declare&nbsp;record&nbsp;variable&nbsp;that&nbsp;represents</EM><BR><EM>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;a&nbsp;row&nbsp;fetched&nbsp;from&nbsp;the&nbsp;emp&nbsp;table</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>当我们执行语句 </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>FETCH</STRONG>&nbsp;c1&nbsp;<STRONG>INTO</STRONG>&nbsp;emp_rec; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>表emp中ename字段的值就会赋给emp_rec的ename域,sal字段值赋给sal域,依此类推。 
                        </P><IMG alt="" 
                        src="第一章 PL-SQL一览 - PL-SQL用户指南与参考 - whatiswhat.files/o_1-3.gif" 
                        name=""> 
                        <P class=title2>7、控制结构</P>
                        <P>流程控制是PL/SQL对SQL的最重要的扩展。PL/SQL不仅能让我们操作Oracle数据,还能让我们使用条件、循环和顺序控制语句来处理数据,如IF-THEN-ELSE,CASE,FOR-LOOP,WHILE-LOOP,EXIT-WHEN和GOTO等。 
                        </P>
                        <UL>
                          <LI>条件控制 </LI></UL>
                        <P>我们经常需要根据环境来采取可选择的行动。IF-THEN-ELSE语句能让我们按照条件来执行一系列语句。IF用于检查条件;THEN决定在条件值为true的情况下执行;ELSE在条件值为false或null的情况才执行。 
                        </P>
                        <P>看一下下面的例子,这个程序用于处理银行事务。在我们从账户3取走$500元之前,它会先确认是否有足够的资金供我们支配。如果余额足够,程序就会更新账户(accounts)表的信息,否则的话,程序会向审核(audit)表插入一条余额不足的提示信息。 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;acct_balance&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>NUMBER</STRONG>(11,&nbsp;2);<BR>&nbsp;&nbsp;acct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>CONSTANT</STRONG>&nbsp;<STRONG>NUMBER</STRONG>(4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;3;<BR>&nbsp;&nbsp;debit_amt&nbsp;&nbsp;&nbsp;<STRONG>CONSTANT</STRONG>&nbsp;<STRONG>NUMBER</STRONG>(5,&nbsp;2)&nbsp;&nbsp;:=&nbsp;500.00;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bal<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INTO</STRONG>&nbsp;acct_balance<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;accounts<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;account_id&nbsp;=&nbsp;acct<BR>&nbsp;&nbsp;<STRONG>FOR</STRONG>&nbsp;<STRONG>UPDATE</STRONG>&nbsp;<STRONG>OF</STRONG>&nbsp;bal;<BR><BR>&nbsp;&nbsp;<STRONG>IF</STRONG>&nbsp;acct_balance&nbsp;&gt;=&nbsp;debit_amt&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>UPDATE</STRONG>&nbsp;accounts<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SET</STRONG>&nbsp;bal&nbsp;=&nbsp;bal&nbsp;-&nbsp;debit_amt<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;account_id&nbsp;=&nbsp;acct;<BR>&nbsp;&nbsp;<STRONG>ELSE</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;temp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(acct,&nbsp;acct_balance,&nbsp;<EM>'Insufficient&nbsp;funds'</EM>);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;insert&nbsp;account,&nbsp;current&nbsp;balance,&nbsp;and&nbsp;message</EM><BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>IF</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>COMMIT</STRONG>;<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>要从多个条件值中选出对应的操作时,我们可以使用CASE结构。CASE表达式会计算条件值,然后相应的操作(这个操作有可能是一个完整的PL/SQL块)。 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>CASE</STRONG><BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;shape&nbsp;=&nbsp;<EM>'square'</EM>&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;area&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;side&nbsp;*&nbsp;side;<BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;shape&nbsp;=&nbsp;<EM>'circle'</EM>&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;area&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;pi&nbsp;*(radius&nbsp;*&nbsp;radius);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_OUTPUT.put_line(<EM>'Value&nbsp;is&nbsp;not&nbsp;exact&nbsp;because&nbsp;pi&nbsp;is&nbsp;irrational.'</EM>);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>END</STRONG>;<BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;shape&nbsp;=&nbsp;<EM>'rectangle'</EM>&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;area&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;LENGTH&nbsp;*&nbsp;width;<BR>&nbsp;&nbsp;<STRONG>ELSE</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DBMS_OUTPUT.put_line(<EM>'No&nbsp;formula&nbsp;to&nbsp;calculate&nbsp;area&nbsp;of&nbsp;a'</EM>&nbsp;||&nbsp;shape);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>RAISE</STRONG>&nbsp;PROGRAM_ERROR;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>END</STRONG>;<BR><STRONG>END</STRONG>&nbsp;<STRONG>CASE</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>循环控制 </LI></UL>
                        <P>LOOP语句能让我们多次执行一系列语句。LOOP循环以关键字LOOP开头,END 
                        LOOP结尾i。下面语句就是最简单的LOOP循环: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;<EM>--&nbsp;sequence&nbsp;of&nbsp;statements</EM><BR><STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>FOR-LOOP语句可以指定整数的范围,然后范围内每一个数字执行一次。例如,下面的循环将向数据库表插入500个数字和它们的平方根: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>FOR</STRONG>&nbsp;num&nbsp;<STRONG>IN</STRONG>&nbsp;1&nbsp;..&nbsp;500&nbsp;<STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;roots<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(num,&nbsp;SQRT(num));<BR><STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>WHILE-LOOP语句会按照某个条件值执行。每次循环条件值都会被计算一次,如果条件值为true,循环内的语句就会被执行,然后再次回到循环顶部,重新计算条件值。如果条件值为false或是null的话,循环就会停止,控制权被移交给下一语句。 
                        </P>
                        <P>下面的例子中,我们要找出第一个工资高于$2500的且行政级别高于雇员编号7499雇员的员工: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;salary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;emp.sal%<STRONG>TYPE</STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;0;<BR>&nbsp;&nbsp;mgr_num&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;emp.mgr%<STRONG>TYPE</STRONG>;<BR>&nbsp;&nbsp;last_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;emp.ename%<STRONG>TYPE</STRONG>;<BR>&nbsp;&nbsp;starting_empno&nbsp;&nbsp;&nbsp;emp.empno%<STRONG>TYPE</STRONG>&nbsp;&nbsp;&nbsp;:=&nbsp;7499;<BR><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;mgr<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INTO</STRONG>&nbsp;mgr_num<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;empno&nbsp;=&nbsp;starting_empno;<BR><BR>&nbsp;&nbsp;<STRONG>WHILE</STRONG>&nbsp;salary&nbsp;&lt;=&nbsp;2500&nbsp;<STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;sal,&nbsp;mgr,&nbsp;ename<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INTO</STRONG>&nbsp;salary,&nbsp;mgr_num,&nbsp;last_name<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;empno&nbsp;=&nbsp;mgr_num;<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR><BR>&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;temp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(<STRONG>NULL</STRONG>,&nbsp;salary,&nbsp;last_name);<BR><BR>&nbsp;&nbsp;<STRONG>COMMIT</STRONG>;<BR><STRONG>EXCEPTION</STRONG><BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;NO_DATA_FOUND&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;temp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(<STRONG>NULL</STRONG>,&nbsp;<STRONG>NULL</STRONG>,&nbsp;<EM>'Not&nbsp;found'</EM>);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>COMMIT</STRONG>;<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>EXIT-WHEN语句可以在需要继续执行循环的情况下退出循环。当遇到EXIT语句时,WHEN子句中的条件值就会被计算。如果条件为true,循环就会结束,控制权交给下一条语句。下面的例子中,在total的值超过2500时,循环就会结束: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>LOOP</STRONG><BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;total&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;total&nbsp;+&nbsp;salary;<BR>&nbsp;&nbsp;<STRONG>EXIT</STRONG>&nbsp;<STRONG>WHEN</STRONG>&nbsp;total&nbsp;&gt;&nbsp;25000;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;exit&nbsp;loop&nbsp;if&nbsp;condition&nbsp;is&nbsp;true</EM><BR><STRONG>END</STRONG>&nbsp;<STRONG>LOOP</STRONG>;<BR><EM>--&nbsp;control&nbsp;resumes&nbsp;here</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>顺序控制 </LI></UL>
                        <P>GOTO语句能让我们无条件地跳转到一个标签。标签就是一个用双尖括号夹起来的未声明标示符,它必须在一个可执行语句或是PL/SQL块之前。执行时,GOTO语句将控制权交给用标签作了标记的语句或块,如下例所示: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>IF</STRONG>&nbsp;rating&nbsp;&gt;&nbsp;90&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;<STRONG>GOTO</STRONG>&nbsp;calc_raise;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;branch&nbsp;to&nbsp;label</EM><BR><STRONG>END</STRONG>&nbsp;<STRONG>IF</STRONG>;<BR><BR>&lt;&lt;calc_raise&gt;&gt;<BR><STRONG>IF</STRONG>&nbsp;job_title&nbsp;=&nbsp;<EM>'SALESMAN'</EM>&nbsp;<STRONG>THEN</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;control&nbsp;resumes&nbsp;here</EM><BR>&nbsp;&nbsp;amount&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;commission&nbsp;*&nbsp;0.25;<BR><STRONG>ELSE</STRONG><BR>&nbsp;&nbsp;amount&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;salary&nbsp;*&nbsp;0.10;<BR><STRONG>END</STRONG>&nbsp;<STRONG>IF</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title2>8、模块化</P>
                        <P>模块化可以让我们把程序分成多个部分,这样可以把复杂的问题划分开来,更好的解决问题。PL/SQL为我们提供了块、子程序和包三个程序单元来用于模块化处理。</P>
                        <UL>
                          <LI>子程序 </LI></UL>
                        <P>子程序有两种,分别是函数和过程。子程序很像一段小型的程序,由可选的声明部分,执行控制部分和可选的异常控制部分组成。 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>PROCEDURE</STRONG>&nbsp;award_bonus(emp_id&nbsp;<STRONG>NUMBER</STRONG>)&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;bonus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>;<BR>&nbsp;&nbsp;comm_missing&nbsp;&nbsp;&nbsp;<STRONG>EXCEPTION</STRONG>;<BR><STRONG>BEGIN</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;executable&nbsp;part&nbsp;starts&nbsp;here</EM><BR>&nbsp;&nbsp;<STRONG>SELECT</STRONG>&nbsp;comm&nbsp;*&nbsp;0.15<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INTO</STRONG>&nbsp;bonus<BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;empno&nbsp;=&nbsp;emp_id;<BR><BR>&nbsp;&nbsp;<STRONG>IF</STRONG>&nbsp;bonus&nbsp;<STRONG>IS</STRONG>&nbsp;<STRONG>NULL</STRONG>&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>RAISE</STRONG>&nbsp;comm_missing;<BR>&nbsp;&nbsp;<STRONG>ELSE</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>UPDATE</STRONG>&nbsp;payroll<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>SET</STRONG>&nbsp;pay&nbsp;=&nbsp;pay&nbsp;+&nbsp;bonus<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;empno&nbsp;=&nbsp;emp_id;<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>IF</STRONG>;<BR><STRONG>EXCEPTION</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;exception-handling&nbsp;part&nbsp;starts&nbsp;here</EM><BR>&nbsp;&nbsp;<STRONG>WHEN</STRONG>&nbsp;comm_missing&nbsp;<STRONG>THEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;...<BR><STRONG>END</STRONG>&nbsp;award_bonus; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>调用时,这个过程接受一个雇员编号。它使用编号来查询雇员的commission,同时计算出15%的奖金。然后,它检查bonus总值。如果奖金为空,就会抛出异常,否则雇员的工资记录就会被更新。 
                        </P>
                        <UL>
                          <LI>包 </LI></UL>
                        <P>PL/SQL可以让我们把逻辑相关的类型、变量、游标和子程序放在一个包内,这样更加清楚易理解。包通常有两部分组成:包说明部分和包体部分。包说明部分是应用程序的接口,它"声明"了类型、常量、变量、异常、游标和可以使用的子程序。包体用于实现包说明部分声明的子程序和游标。 
                        </P>
                        <P>下面的例子是把两个雇用相关的过程进行打包: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>CREATE</STRONG>&nbsp;<STRONG>PACKAGE</STRONG>&nbsp;emp_actions&nbsp;<STRONG>AS</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;package&nbsp;specification</EM><BR>&nbsp;&nbsp;<STRONG>PROCEDURE</STRONG>&nbsp;hire_employee(empno&nbsp;<STRONG>NUMBER</STRONG>,&nbsp;ename&nbsp;<STRONG>CHAR</STRONG>,&nbsp;...);<BR><BR>&nbsp;&nbsp;<STRONG>PROCEDURE</STRONG>&nbsp;fire_employee(emp_id&nbsp;<STRONG>NUMBER</STRONG>);<BR><STRONG>END</STRONG>&nbsp;emp_actions;<BR><BR><STRONG>CREATE</STRONG>&nbsp;<STRONG>PACKAGE</STRONG>&nbsp;<STRONG>BODY</STRONG>&nbsp;emp_actions&nbsp;<STRONG>AS</STRONG>&nbsp;&nbsp;&nbsp;<EM>--&nbsp;package&nbsp;body</EM><BR>&nbsp;&nbsp;<STRONG>PROCEDURE</STRONG>&nbsp;hire_employee(empno&nbsp;<STRONG>NUMBER</STRONG>,&nbsp;ename&nbsp;<STRONG>CHAR</STRONG>,&nbsp;...);&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;<STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>INSERT</STRONG>&nbsp;<STRONG>INTO</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>VALUES</STRONG>&nbsp;(empno,&nbsp;ename,&nbsp;...);<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;hire_employee;<BR><BR>&nbsp;&nbsp;<STRONG>PROCEDURE</STRONG>&nbsp;fire_employee(emp_id&nbsp;<STRONG>NUMBER</STRONG>)&nbsp;<STRONG>IS</STRONG><BR>&nbsp;&nbsp;<STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>DELETE</STRONG>&nbsp;<STRONG>FROM</STRONG>&nbsp;emp<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>WHERE</STRONG>&nbsp;empno&nbsp;=&nbsp;emp_id;<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;fire_employee;<BR><STRONG>END</STRONG>&nbsp;emp_actions; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>只有在包说明中声明的内容对应用程序是可见的,而包体中的内容是不可见,无法访问的。包被编译后会存放到数据库中,当我们首次调用包中的子程序时,整个包就会被加载到内存当中,所以,后续的调用不再涉及到磁盘的读取问题。因此,包可以提高效率改善性能。 
                        </P>
                        <P class=title2>9、数据抽象</P>
                        <P>数据抽象可以让我们把必要的属性提取出来,忽略那些非必须的细节问题,有助于我们更好地解决问题。一旦我们设计好一个数据结构,就可以不再考虑细节内容,而专注于操作这个数据结构的算法问题的研究。 
                        </P>

⌨️ 快捷键说明

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