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

📄 第二章 pl-sql基础 - pl-sql用户指南与参考 - whatiswhat.htm

📁 sql初学者不错的教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                              <TD 
                                noWrap><EM>'Hello,&nbsp;world!'</EM><BR><EM>'XYZ&nbsp;Corporation'</EM><BR><EM>'10-NOV-91'</EM><BR><EM>'He&nbsp;said&nbsp;"Life&nbsp;is&nbsp;like&nbsp;licking&nbsp;honey&nbsp;from&nbsp;a&nbsp;tdorn."'</EM><BR><EM>'$1,000,000'</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>除了空字符串('')之外,所有的字符串文字都是CHAR类型。如果我们想表现一个单引号字符串的话,可以用两个连续的单引号来表示: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><EM>'Don'</EM><EM>'t&nbsp;leave&nbsp;witdout&nbsp;saving&nbsp;your&nbsp;work.'</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>PL/SQL对字符串是大小写敏感的。例如,下面两个字符串是不相同的: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD noWrap><EM>'baker'</EM><BR><EM>'Baker'</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>布尔(Boolean)文字 </LI></UL>
                        <P>布尔文字可以用值TRUE、FALSE和NULL(表示缺失、未知或不可用的值)来表示。记住,布尔文字本身就是值,而不是字符串。</P>
                        <UL>
                          <LI>日期因类型的不同,有很多表现形式,比如下面的例子: </LI></UL>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>DECLARE</STRONG><BR>&nbsp;&nbsp;d1&nbsp;<STRONG>DATE</STRONG>&nbsp;:=&nbsp;<STRONG>DATE</STRONG>&nbsp;<EM>'1998-12-25'</EM>;<BR>&nbsp;&nbsp;t1&nbsp;<STRONG>TIMESTAMP</STRONG>&nbsp;:=&nbsp;<STRONG>TIMESTAMP</STRONG>&nbsp;<EM>'1997-10-22&nbsp;13:01:01'</EM>;<BR>&nbsp;&nbsp;t2&nbsp;<STRONG>TIMESTAMP</STRONG>&nbsp;<STRONG>WItd</STRONG>&nbsp;<STRONG>TIME</STRONG>&nbsp;<STRONG>ZONE</STRONG>&nbsp;:=&nbsp;<STRONG>TIMESTAMP</STRONG>&nbsp;<EM>'1997-01-31&nbsp;09:26:56.66&nbsp;+02:00'</EM>;<BR>&nbsp;&nbsp;<EM>--&nbsp;tdree&nbsp;years&nbsp;and&nbsp;two&nbsp;montds</EM><BR>&nbsp;&nbsp;<EM>--&nbsp;(For&nbsp;greater&nbsp;precision,&nbsp;we&nbsp;would&nbsp;use&nbsp;tde&nbsp;day-to-second&nbsp;interval)</EM><BR>&nbsp;&nbsp;i1&nbsp;<STRONG>INTERVAL</STRONG>&nbsp;<STRONG>YEAR</STRONG>&nbsp;<STRONG>TO</STRONG>&nbsp;<STRONG>MONtd</STRONG>&nbsp;:=&nbsp;<STRONG>INTERVAL</STRONG>&nbsp;<EM>'3-2'</EM>&nbsp;<STRONG>YEAR</STRONG>&nbsp;<STRONG>TO</STRONG>&nbsp;<STRONG>MONtd</STRONG>;<BR>&nbsp;&nbsp;<EM>--&nbsp;Five&nbsp;days,&nbsp;four&nbsp;hours,&nbsp;tdree&nbsp;minutes,&nbsp;two&nbsp;and&nbsp;1/100&nbsp;seconds</EM><BR>&nbsp;&nbsp;i2&nbsp;<STRONG>INTERVAL</STRONG>&nbsp;<STRONG>DAY</STRONG>&nbsp;<STRONG>TO</STRONG>&nbsp;<STRONG>SECOND</STRONG>&nbsp;:=&nbsp;<STRONG>INTERVAL</STRONG>&nbsp;<EM>'5&nbsp;04:03:02.01'</EM>&nbsp;<STRONG>DAY</STRONG>&nbsp;<STRONG>TO</STRONG>&nbsp;<STRONG>SECOND</STRONG>;<BR>&nbsp;&nbsp;... 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>我们可以指定间隔值是YEAR TO MONtd类型还是DAY TO SECOND类型。如: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>current_timestamp&nbsp;-&nbsp;current_timestape 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>上面表达式的结果值类型默认是INTERVAL DAY TO 
                        SECONDE。我们还可以使用下面的方法来指定间隔类型: </P>
                        <OL>
                          <LI>(interval_expression) DAY TO SECOND 
                          <LI>(interval_expression) YEAR TO MONtd </LI></OL>
                        <P class=title2>4、注释</P>
                        <P>PL/SQL编译器会忽略注释,但我们不可以这样做。添加注释能让我们的程序更加易读。通常我们添加注释的目的就是描述每段代码的用途。PL/SQL支持两种注释风格:单行和多行。 
                        </P>
                        <UL>
                          <LI>单行注释 </LI></UL>
                        <P>单行注释由一对连字符(--)开头。如下例:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><EM>--&nbsp;begin&nbsp;processing</EM><BR><STRONG>SELECT</STRONG>&nbsp;sal&nbsp;<STRONG>INTO</STRONG>&nbsp;salary<BR>&nbsp;&nbsp;<STRONG>FROM</STRONG>&nbsp;emp&nbsp;<EM>--&nbsp;get&nbsp;current&nbsp;salary</EM><BR>&nbsp;<STRONG>WHERE</STRONG>&nbsp;empno&nbsp;=&nbsp;emp_id;<BR>bonus&nbsp;:=&nbsp;salary&nbsp;*&nbsp;0.15;&nbsp;<EM>--&nbsp;compute&nbsp;bonus&nbsp;amount</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>注释可以出现在一条语句的末端。在测试或调试程序的时候,有时我们想禁用某行代码,就可以用注释给它"注掉"(comment-out),如下面的例子: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><EM>--&nbsp;DELETE&nbsp;FROM&nbsp;emp&nbsp;WHERE&nbsp;comm&nbsp;IS&nbsp;NULL;</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <UL>
                          <LI>多行注释 </LI></UL>
                        <P>多行注释由斜线星号(/*)开头,星号斜线(*/)结尾,可以注释多行内容。示例如下:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><STRONG>BEGIN</STRONG><BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;<EM>/*&nbsp;Compute&nbsp;a&nbsp;15%&nbsp;bonus&nbsp;for&nbsp;top-rated&nbsp;employees.&nbsp;*/</EM><BR>&nbsp;&nbsp;<STRONG>IF</STRONG>&nbsp;rating&nbsp;&gt;&nbsp;90&nbsp;<STRONG>tdEN</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;bonus&nbsp;:=&nbsp;salary&nbsp;*&nbsp;0.15&nbsp;<EM>/*&nbsp;bonus&nbsp;is&nbsp;based&nbsp;on&nbsp;salary&nbsp;*/</EM><BR>&nbsp;&nbsp;<STRONG>ELSE</STRONG><BR>&nbsp;&nbsp;&nbsp;&nbsp;bonus&nbsp;:=&nbsp;0;<BR>&nbsp;&nbsp;<STRONG>END</STRONG>&nbsp;<STRONG>IF</STRONG>;<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;<EM>/*&nbsp;tde&nbsp;following&nbsp;line&nbsp;computes&nbsp;tde&nbsp;area&nbsp;of&nbsp;a<BR>&nbsp;&nbsp;circle&nbsp;using&nbsp;pi,&nbsp;which&nbsp;is&nbsp;tde&nbsp;ratio&nbsp;between<BR>&nbsp;&nbsp;tde&nbsp;circumference&nbsp;and&nbsp;diameter.&nbsp;*/</EM><BR>&nbsp;&nbsp;area&nbsp;:=&nbsp;pi&nbsp;*&nbsp;radius**2;<BR><STRONG>END</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>我们可以使用多行注释注掉整块代码,如下例所示: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap><EM>/*<BR>LOOP<BR>&nbsp;&nbsp;FETCH&nbsp;c1<BR>&nbsp;&nbsp;&nbsp;INTO&nbsp;emp_rec;<BR>&nbsp;&nbsp;EXIT&nbsp;WHEN&nbsp;c1%NOTFOUND;<BR>&nbsp;&nbsp;...<BR>END&nbsp;LOOP;<BR>*/</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title1>三、声明</P>
                        <P>在PL/SQL中,我们可以在块、子程序或包的声明部分来声明常量或变量。声明能够分配内存空间,指定数据类型,为存储位置进行命名以便我们能够引用这块存储空间。下面来看一下声明的例子: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>birtdday&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>DATE</STRONG>;<BR>emp_count&nbsp;&nbsp;&nbsp;<STRONG>SMALLINT</STRONG>&nbsp;:=&nbsp;0; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>第一句声明了一个DATE类型的变量。第二句声明了SMALLINT类型的变量,并用赋值操作符指定了初始值零。下面再看一个稍微复杂一点的例子,用一个声明过的变量来初始化另一个变量:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>pi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>&nbsp;:=&nbsp;3.14159;<BR>radius&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>&nbsp;:=&nbsp;1;<BR>area&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>&nbsp;:=&nbsp;pi&nbsp;*&nbsp;radius&nbsp;**&nbsp;2; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>默认情况下,变量是被初始化为NULL的。所以,下面两个声明是等价的:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>birtdday&nbsp;&nbsp;&nbsp;<STRONG>DATE</STRONG>;<BR>birtdday&nbsp;&nbsp;&nbsp;<STRONG>DATE</STRONG>&nbsp;:=&nbsp;<STRONG>NULL</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>对于常量声明要多加一个CONSTANT关键字:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>credit_limit&nbsp;&nbsp;&nbsp;<STRONG>CONSTANT</STRONG>&nbsp;<STRONG>REAL</STRONG>&nbsp;:=&nbsp;5000.00; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>常量在声明的时候必须进行初始化,否则就会产生编译错误。 </P>
                        <P class=title2>1、使用DEFAULT</P>
                        <P>我们可以使用关键字DEFAULT来替换赋值操作符为变量初始化。下面这个声明</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>blood_type&nbsp;&nbsp;&nbsp;<STRONG>CHAR</STRONG>&nbsp;:=&nbsp;<EM>'o'</EM>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>就可以用DEFAULT来替换:</P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>blood_type&nbsp;&nbsp;&nbsp;<STRONG>CHAR</STRONG>&nbsp;<STRONG>DEFAULT</STRONG>&nbsp;<EM>'o'</EM>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>我们可以使用DEFAULT来初始化子程序参数、游标参数和用户定义的记录中的域。</P>
                        <P class=title2>2、使用NOT NULL</P>
                        <P>除了在声明中做初始化操作外,还可以使用NOT NULL进行约束: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>acct_id&nbsp;<STRONG>INTEGER</STRONG>(4)&nbsp;<STRONG>NOT</STRONG>&nbsp;<STRONG>NULL</STRONG>&nbsp;:=&nbsp;9999; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>这样一来,我们就不能为变量acct_id指派空值了。如果这样做的话,PL/SQL就会抛出预定义异常VALUE_ERROR。NOT 
                        NULL约束后面必须跟着初始化子句。像下面这样的声明是不允许的: </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>acct_id&nbsp;<STRONG>INTEGER</STRONG>(5)&nbsp;<STRONG>NOT</STRONG>&nbsp;<STRONG>NULL</STRONG>;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;not&nbsp;allowed;&nbsp;not&nbsp;initialized</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>NATURALN和POSITIVEN是PL/SQL提供的两个不可为空的预定义子数据类型。下面这两个声明是等价的: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>emp_count&nbsp;<STRONG>NATURAL</STRONG>&nbsp;<STRONG>NOT</STRONG>&nbsp;<STRONG>NULL</STRONG>&nbsp;:=&nbsp;0;<BR>emp_count&nbsp;<STRONG>NATURALN</STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:=&nbsp;0; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>在NATURALN和POSITIVEN声明中,类型分类符后面必须跟上一个初始化子句。否则就会发生编译错误。例如,下面的声明就是不合法的: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>line_items&nbsp;<STRONG>POSITIVEN</STRONG>;&nbsp;&nbsp;&nbsp;<EM>--&nbsp;not&nbsp;allowed;&nbsp;not&nbsp;initialized</EM> 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P class=title2>3、使用%TYPE</P>
                        <P>%TYPE属性能够为我们提供变量或数据库字段的数据类型。在下面的例子中,%TYPE提供了变量credit的数据类型: 
                        </P>
                        <BLOCKQUOTE>
                          <TABLE>
                            <TBODY>
                            <TR>
                              <TD 
                                noWrap>credit&nbsp;&nbsp;&nbsp;<STRONG>REAL</STRONG>(7,&nbsp;2);<BR>debit&nbsp;&nbsp;&nbsp;&nbsp;credit%<STRONG>TYPE</STRONG>; 
                              </TD></TR></TBODY></TABLE></BLOCKQUOTE>
                        <P>在引用数据库中某个字段的数据类型时,%TYPE显得更加有用。我们可以通过表名加字段来引用,或是使用所有者加表名加字段来引用: 

⌨️ 快捷键说明

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