`
youngmaster
  • 浏览: 57126 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

PL-SQL 与正则表达式 ---- search.sql

阅读更多

search.sql

/**
 SET SERVEROUTPUT ON 
 PROMPT
 PROMPT | ------------------------------------------------------------------------ | ;
 PROMPT | Enter your choice for the search                                         | 
 PROMPT |                                                                          |
 PROMPT | 1 -> Search users who play either football OR baseball AND cricket       | ;
 PROMPT | 2 -> Search users who have interest in music                             | ;
 PROMPT | 3 -> Print the location information and their hobbies, for all the users | ;
 PROMPT |------------------------------------------------------------------------- | ;
 PROMPT
 **/

DECLARE 

value 	  NUMBER(6);
username  VARCHAR2(30) ; 
hobbies   VARCHAR2(500);
address   VARCHAR2(500);

-- Declare a cursor that fetches users with hobbies related either to football or baseball and cricket. 
-- Here (base|foot)([[:space:]]){0,}ball([^.]*)cricket expression returns true if the 'hobbies' column contains 
-- values like football,baseball, base ball, foot  ball etc. ([^.]*) means occurence of any character multiple 
-- times. The 'i' indicates case-insensitive search 
CURSOR  hobbies_cur IS SELECT username,hobbies FROM userinfo  WHERE REGEXP_LIKE(hobbies, '(base|foot)([[:space:]]){0,}ball([^.]*)cricket','i')  ;

-- Declare a cursor to fetch the user data if their hobbies are related to music. 
-- The 'music|violin|guitar|sing(er|ing)' pattern returns true if the given 
-- data matches any of music,violin, guitar, singer, singing character patterns. 
-- sing(er|ing) represents either singer or singing character pattern.
CURSOR  hobbies_music_cur IS SELECT username,hobbies FROM userinfo  WHERE REGEXP_LIKE(hobbies, 'music|violin|guitar|sing(er|ing)','i') ;

-- This retrieves the location of all the users in the database. 
-- REGEXP_SUBSTR(WEBSITE, ',[^,]+',1,2) fetches the second substring bounded by commas
CURSOR  address_cur IS SELECT username, hobbies, REGEXP_SUBSTR(address, ',[^,]+',1,2) FROM userinfo ;



BEGIN 
-- Read the users choice from the given menu
value := &choice ; 
  IF ( value = 1) THEN 
    
    -- Open the cursor
    OPEN hobbies_cur;
    DBMS_OUTPUT.PUT_LINE('----------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Searching who play either football OR baseball AND cricket'); 
    DBMS_OUTPUT.PUT_LINE('User Name                Hobbies                          ');
    DBMS_OUTPUT.PUT_LINE('----------------------------------------------------------');
    -- Loop through the cursor and print the selected values
    LOOP 
      FETCH hobbies_cur INTO username, hobbies ;
      -- Exit the loop when there are no more records in the cursor 
      EXIT WHEN hobbies_cur%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(username || '             '|| hobbies);
    END LOOP ;

    -- Close the cursor
    CLOSE hobbies_cur;

  ELSIF ( value = 2) THEN 
    OPEN hobbies_music_cur;
    DBMS_OUTPUT.PUT_LINE('-----------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Searching for users who are interested in music'); 
    DBMS_OUTPUT.PUT_LINE('User Name                Hobbies               ');
    DBMS_OUTPUT.PUT_LINE('-----------------------------------------------');
    LOOP 
      FETCH hobbies_music_cur INTO username, hobbies ;
      EXIT WHEN hobbies_music_cur%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(' '|| username || '             '|| hobbies);
    END LOOP ;

    CLOSE hobbies_music_cur;
  
  ELSIF ( value = 3) THEN 
    OPEN address_cur;
    DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Retrieve the location information for all the users in the table') ; 
    DBMS_OUTPUT.PUT_LINE('User Name          Location            Hobbies              ');
    DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------');
    
    LOOP 
      FETCH address_cur INTO username, hobbies ,address ;
      EXIT WHEN address_cur%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(' '|| username || '           '||  address|| '         '||hobbies);
    END LOOP ;

    CLOSE address_cur;

  -- If the input values is other than 1,2 and 3 then print an error message
  ELSE 
    DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------');
    DBMS_OUTPUT.PUT_LINE('Invalid input. Run the script again and enter a valid choice');
    DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------');
  END IF;
END; 
 
分享到:
评论

相关推荐

    Oracle 10G:PL/SQL正规表达式(正则表达式)手册

    Oracle Database 10g 的一个新特性大大提高了您搜索和处理字符数据的能力。这个特性就是正规表达式,是一种用来描述文本模式的表示方法。很久以来它已在许多编程语言和大量 UNIX 实用工具中出现过了。

    精通Oracle 10g SQL和PL SQL.pdf

    通过学习《精通Oracle 10g SQL和PL/SQL》,读者不仅可以掌握SQL和PL/SQL的基础知识,而且还可以掌握SQL高级特征(正则表达式、Flashback查询、MERGE语句、SQL:1999连接)和PL/SQL高级特征(记录类型、集合类型、对象...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    精通Oracle 10g SQL和PL/SQL

     本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    SAKURA 文本编辑工具

    ・Windows95/98/98SE/Me/NT4.0/2000/XP/...・Grep、检索功能支持正则表达式 ・关键字、文字列定数、命令等,分颜色表示 ・支持C/C++函数、PL/SQL函数解析和跳转功能 ・关键字输入补充功能、关键字Help功能 ・宏命令

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...

    PL/SQL

    主要为在Java中使用正则表达式。

    oracle_PL_SQL程序设计(上下册共26章)_高级完整书签

    oracle_PL_SQL程序设计(上下册共26章),高级完整书签 第1部分 PL/SQL编程 第2部分 PL/SQL程序结构 第3部分 PL/SQL数据 ...附录A 正则表达式的元字符和函数参数 附录B 数字格式模型 附录C 日期格式模型

    21天学会oracle

    21天学会oracle(电子教案) 第1章 Oracle安装配置.ppt 第2章 Oracle常用工具.ppt 第3章 SQL Plus和PL.ppt ...第21章 Oracle中的正则表达式.ppt 第22章 Oracle在Java开发中的.ppt 第23章 Oracle在C.ppt

    CnPlugin_1.5.4

    对当前窗口内空查找指定的字符串,列出全部匹配内容,支持正则表达式查找 CnPlugin / &Preferences CnPlugin插件属性设置窗口 CnPlugin / &About' CnPlugin关于窗口 右键菜单功能 Query data using alias 以...

    Oracle® Database Advanced Application Developer's Guide 11g Release 2 (11.2)

    Oracle 官方文档(英文版), 介绍正则表达式,PL/SQL Subprograms, Packages

    Perl 实例精解(第三版).pdf

    对每个主题都使用了范例说明,从Perl变量、正则表达式,到编写报表、CGI脚本和网络应用,并对范例程序进行了解释。读者可以很容易地通过这些范例掌握Perl语言的语法。附录含有完整的函数和定义、命令行开关、特殊...

    精髓Oralcle讲课笔记

    5、--任何含有空值的数学表达式,最后的计算结果都是空值。 6、select ename||sal from emp; --(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from...

    racle_Database_11g完全参考手册.part1

     第8章 正则表达式搜索  第9章 数值处理  第10章 日期:过去、现在及日期的差  第11章 转换函数与变换函数  第12章 分组函数  第13章 当一个查询依赖于另一个查询时  第14章 一些复杂的技术  第15章 更改...

    Oracle_Database_11g完全参考手册.part3

     第8章 正则表达式搜索  第9章 数值处理  第10章 日期:过去、现在及日期的差  第11章 转换函数与变换函数  第12章 分组函数  第13章 当一个查询依赖于另一个查询时  第14章 一些复杂的技术  第15章 更改...

    Oracle_Database_11g完全参考手册.part2

     第8章 正则表达式搜索  第9章 数值处理  第10章 日期:过去、现在及日期的差  第11章 转换函数与变换函数  第12章 分组函数  第13章 当一个查询依赖于另一个查询时  第14章 一些复杂的技术  第15章 更改...

    Oracle_Database_11g完全参考手册.part4

     第8章 正则表达式搜索  第9章 数值处理  第10章 日期:过去、现在及日期的差  第11章 转换函数与变换函数  第12章 分组函数  第13章 当一个查询依赖于另一个查询时  第14章 一些复杂的技术  第15章 更改...

    Oracle_Database_11g完全参考手册.part5

     第8章 正则表达式搜索  第9章 数值处理  第10章 日期:过去、现在及日期的差  第11章 转换函数与变换函数  第12章 分组函数  第13章 当一个查询依赖于另一个查询时  第14章 一些复杂的技术  第15章 更改...

Global site tag (gtag.js) - Google Analytics