八宝书库 > 文学其他电子书 > SQL 21日自学通(V3.0)(PDF格式) >

第86部分

SQL 21日自学通(V3.0)(PDF格式)-第86部分

小说: SQL 21日自学通(V3.0)(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






        P03   COFFEE MUG                           6。95 



        P04   FAR SIDE CALENDAR                    10。5 



        P05   NATURE CALENDAR                      12。99 



        P06   SQL MAND REFERENCE                29。99 



        P07     BLACK  LEATHER  BRIEFCASE          99。99 



分析 



    在这个交互式查询中 PRODUCT  替换了原来的&TBL 



DEFINE 



    在 SQL  的脚本中你可以使用 DEFINE 来对一个变量赋值                     如果在你的 SQL  脚本中定 



义了变量      那么在运行时用户不会像你使用&时那样被提示输入数值  在下一个例子中使 



用与上一个例子相同的 SELECT 语句  但是这次 TBL  的值是在脚本中定义的 



输入 



    SQL》 define TBL=products 



    SQL》 select * from &TBL; 



输出 



    old      2:  from  &TBL 



    new      2:  from  products 



PRO       PRODUCT_NAME                  UNIT_COST 



P01     MICKEY MOUSE LAMP               29。95 



P02     NO 2 PENCILS 20 PACK          1。99 



P03     COFFEE MUG                      6。95 



P04     FAR SIDE CALENDAR               10。5 



P05     NATURE CALENDAR                 12。99 



P06     SQL MAND REFERENCE           29。99 



P07     BLACK LEATHER BRIEFCASE         99。99 



                                                                              456 


…………………………………………………………Page 457……………………………………………………………

SQL 21  日自学通(V1。0)                                                   翻译人    笨猪 



分析 



    这两个查询的结果是相同的               下边的部分将向您介绍对于脚本参数的另外一种向用户 



提示的办法 



ACCEPT 



    ACCEPT  可以在运行时允许用户向变量中输入数值  它所作的工作与没有 DEFINE                              的 



&相同  但它的可控性更好             它可以给用户一个更好友好的提示 



    下边的例子将从清除缓冲区开始 



输入 



    SQL》 clear buffer 



输出 



    buffer cleared 



    然后我们使用 INPUT        命令来向缓冲区中输入 SQL  语句               如果你输入语句时没有从 



INPUT  开始    你开始会被提示为 NEWTITLE           输入一个值        当然  你也可以建立一个新文 



件并在其中输入你的语句 



输入 



    SQL》 input 



      1  accept newtitle prompt 'Enter Title for Report: ' 



        2    ttitle  center  newtitle 



        3    select  * 



        4    from  products 



        5 



    SQL》 save prod 



输出 



    File 〃prod。sql〃 already exists。 



    Use another name or 〃SAVE filename REPLACE〃。 



分析 



    咦  这个文件怎么已经存在了              这就是说你已经有一个叫 PROD。SQL              的文件了  如果 



你不想保留它         你可以使用覆盖选项来保存缓冲区中的内容                        注意在上一个语句中的 



                                                                             457 


…………………………………………………………Page 458……………………………………………………………

SQL 21  日自学通(V1。0)                                                           翻译人    笨猪 



PROMPT     它将会向用户显示文本信息以准确地告诉用户应该输入什么 



输入 



     SQL》 save prod replace 



输出 



    Wrote file prod 



     现在你可以使用 START 命令来运行这个文件了 



输入 



     SQL》 start prod 



    Enter Title for Report: A LIST OF PRODUCTS 



输出 



                                                        A  LIST  OF  PRODUCTS 



       PRO PRODUCT_NAME                          UNIT_COST 



       P01 MICKEY MOUSE LAMP                       29。95 



       P02 NO 2 PENCILS 20 PACK                    1。99 



       P03 COFFEE MUG                               6。95 



       P04 FAR SIDE CALENDAR                         10。5 



       P05 NATURE CALENDAR                          12。99 



       P06 SQL MAND REFERENCE                   29。99 



       P07 BLACK LEATHER BRIEFCASE                 99。99 



    7 rows selected。 



分析 



     你输入的文字成了当前报表的题头 



     下边的例子向你显示了你如果替换在语句中的任何变量的值 



输入 



     SQL》 input 



      1  accept prod_id prompt 'Enter PRODUCT ID to Search for: ' 



        2    select  * 



        3    from  products 



        4    where  product_id  =  '&prod_id' 



        5 



     SQL》 save prod1 



                                                                                     458 


…………………………………………………………Page 459……………………………………………………………

SQL 21  日自学通(V1。0)                                              翻译人    笨猪 



输出 



    Created file prod1 



输入 



    SQL》 start prod1 



    Enter PRODUCT ID to Search for: P01 



输出 



    old      3: where product_id = '&prod_id' 



    new      3:  where  product_id  =  'P01' 



                                              A  LIST  OF  PRODUCTS 



    PRO PRODUCT_NAME           UNIT_COST 



    P01 MICKEY MOUSE LAMP      29。95 



分析 



    你可以在许多的需要中见到变量的使用                 例如    为你想要重新定向输出的文件命名或 



为 ORDER BY 子句指定一个表达式           其中的方法之一是使用变量替换              一种使用变量替换 



的情况是在事务处理诊断报告中在 WHERE               子句中输入日期        如果你的查询设计成要求在 



特定的时间内得到信息的话            你也许需要设置一个替换变量来与表中的 SSN 列进行比较 



NEW_VALUE 



    NEW_VALUE   命令可以将 SELECT      语句中的数值返回给一个没有经你明确定义的变 



量   语法格式如下 



语法 



    COL'UMN' column_name NEW_VALUE new_name 



    你可以使用&符号来调用这个值  例如 



    &new_name 



    在 NEW_VALUE 命令中必须使用 COLUMN 命令 



    注意&符号与 COLUMN  在下边的 SQL*PLUS          文件中是一起使用的  在这个文件中出 



现了 GET 命令 



输入 



    SQL》 get prod1 



                                                                       459 


…………………………………………………………Page 460……………………………………………………………

SQL 21  日自学通(V1。0)                                                   翻译人    笨猪 



输出 



    line 5 truncated。 



        1    ttitle  left  'Report  for  Product:      &prod_title'  skip  2 



        2    col  product_name  new_value  prod_title 



        3    select  product_name;  unit_cost 



        4    from  products 



      5* where product_name = 'COFFEE MUG' 



输入 



    SQL》 @prod1 



输出 



    Report  for  Product:      COFFEE  MUG 



      PRODUCT_NAME                 UNIT_COST 



      COFFEE MUG                      6。95 



分析 



    PRODUCT_NAME  列的值已经通过 NEW_VALUE               方法被存入了变量 PROD_TITLE 



中  该变量中的值将在稍后被 TTITLE 命令调用 



    对于在 SQL  中更多的变量信息  请参见第 18 天的  PL/SQL                   简介    以及第 19 天的 



  TRANSACT SQL 简介 



DUAL  表 



    DUAL 表是在每一个 ORACLE 数据库中都存在的虚拟表  它只有一个叫 DUMMY  的 



列和一行值为 X        的数据  这个表可以由所有的用户出于通用的目标如进行计算                            这时它可 



以像一个计算器一样使用  或维护 SYSDATE 的格式而使用 



输入 



    SQL》 desc dual; 



输出 



      Name        Null?   Type 



      DUMMY               VARCHAR2(1) 



输入 



    SQL》 select * from dual 



                                                                             460 


…………………………………………………………Page 461……………………………………………………………

SQL 21  日自学通(V1。0)                                         翻译人   笨猪 



   输出 



          D 



          X 



   让我们来看一对使用 DUAL 表的例子 



输入 



    SQL》 select sysdate  from dual; 



输出 



    SYSDATE 



   08…MAY…97 



输入 



    SQL》 select 2 * 2  from dual; 



输出 



   2*2 



   非常简单  第一条语句从 DUAL  表中选择了 SYSDATE 以取得今天的日期  第二个例 



子显示了如何用这个表来进行乘法计算              我们的答案是 2*2  的结果为 4 



DECODE  函数 



   DECODE  函数是 SQL*PLUS   中众多功能强大的函数之一— — 也许它的功能是最强大 



的  标准的 SQL 中没有过程函数  它是包括在如 COBOL 和 C 语言中的 



   DECODE 语句与程序语言中的 IF          THEN 语句类似  对于复杂的报表来说灵活性是 



必需的  DECODE 可以弥补标准的 SQL 与过程语言函数之间的缺陷 



语法 



   DECODE(column1; value1; output1; value2; output2; output3) 



   语法中的例子是对 column1 列执行 DECODE 函数  如果 column1 有一个值为 value1 



那么将会用 output1 来代替当前值       如果 column1  的值为value2 那么就会用 OUTPUT2 来 



代替当前值     如果 column1  中哪两个值都不是  那么就会用 OUTPUT3 来代替当前值 



    实际应用的例子呢  我们先来对一个新表运行一下 SELECT 语句 



输入 



    SQL》 select * from states; 



                                                                  461 


…………………………………………………………Page 462……………………………………………………………

SQL 21  日自学通(V1。0)                                                            翻译人     笨猪 



输入 



     ST                                             IL 



     IN                                             OH 



     FL                                             CA 



     KY                                             NY 



     7 rows selected。 



     现在来用一下 DECODE 命令 



输入 



     SQL》 select decode(state;'IN';'INDIANA';'OTHER') state from states; 



输出 



     STATE                                          OTHER 



     INDIANA                                        OTHER 



     OTHER                                          OTHER 



     OTHER                                          OTHER 



     7 rows selected。 



分析 



     符合条件  州为 IN           的记录只有一条  所以只有一行显示为 INDIANA                         其它的记录 



看上去都不符合           因为它们的显示为 OTHER 



     下边的例子为表中的每一个值提供了输入字符串                             只有当你的州不在列表中时  你才 



返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的