`
youngmaster
  • 浏览: 58273 次
  • 性别: 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; 
 
分享到:
评论

相关推荐

    完全自动的正则表达式编写工具

    PLSQL.jgcscs、PHPsolo.jgcscs、Ruby.jgcscs分别对应Oracle的PL/SQL、PHP和Ruby语言的正则表达式配置,确保在这些语言中使用的正则表达式能够准确无误地工作。 总的来说,这个“完全自动的正则表达式编写工具”是一...

    ORACLE.PLSQL正则表达式概述

    在ORACLE的PL/SQL环境中,正则表达式被集成到其函数库中,为数据库管理员和开发人员提供了处理复杂字符串模式的强大能力。 ### ORACLE.PLSQL中的正则表达式功能 #### 1. **正则表达式支持的函数** ORACLE.PLSQL中...

    oracle正则表达式

    在Oracle数据库中,正则表达式是一种非常强大的工具,用于匹配字符串模式,并在SQL查询或PL/SQL程序中执行复杂的文本处理任务。与大多数编程语言中的正则表达式相似,Oracle提供了自己的一套正则表达式函数,允许...

    db2 创建正则表达式函数

    创建自定义正则表达式函数,可以使用SQL PL(SQL过程语言)编写存储过程。这个过程通常涉及以下步骤: 1. **创建函数原型**:定义函数的输入参数和返回类型。例如,创建一个接受两个参数(待匹配字符串和正则表达式...

    Oracle的正则表达式

    Oracle的正则表达式在数据库查询和数据处理中扮演着重要的角色,它是Oracle SQL和PL/SQL中的一个强大工具,用于匹配和操作字符串。本文将深入探讨Oracle中的正则表达式,包括其基本语法、常见操作符以及在实际应用中...

    一个利用正则表达式分析出DB2、Greenplum、MySQL、Oracle、PostgreSQL和Te-HSP.zip

    正则表达式在Oracle环境中可以用于复杂的数据检索、故障排查,例如从PL/SQL代码或数据库跟踪文件中提取特定模式。 5. **PostgreSQL**:PostgreSQL是一种强大的开源对象关系数据库系统,支持多种编程语言。在...

    PL/SQL

    PL/SQL,全称Procedural ...掌握PL/SQL和Java中的正则表达式对于开发与数据库交互的应用程序至关重要。通过熟练运用这两个工具,开发者可以实现更高效、更精确的数据处理和验证,从而提高应用程序的质量和用户体验。

    精通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高级特征 ...

    PL/SQL Developer V7.1.5英文安装包

    PL/SQL Developer是一款由Allround Automations公司开发的专业Oracle数据库管理与开发工具,主要用于编写、调试、测试和管理PL/SQL代码。V7.1.5是该软件的一个较早版本,但仍然包含了大量功能,使得它在Oracle数据库...

    Oracle数据库10g新的SQL和PLSQL功能.ppt

    同时,PL/SQL与正则表达式的集成使得在存储过程和触发器中进行复杂的文本处理成为可能。 总的来说,Oracle数据库10g通过引入新的SQL和PL/SQL功能,极大地增强了其作为企业级数据库系统的竞争力。这些新特性不仅提高...

    Oralce Regular Expression

    - **接口**:Oracle正则表达式提供了多种接口供开发人员使用,包括SQL函数和PL/SQL包等。 - **元字符**:元字符是指具有特殊意义的字符,如`.`表示任意单个字符,`*`表示零次或多次重复前一个字符等。 - **本地化...

    RegexBuddy3

    它支持多种正则表达式语法,包括Perl、PostgreSQL、MySQL、XML、PL/SQL、PHP、Ruby和C++等,覆盖了编程和数据库领域的常见语言。 RegexBuddy的核心特性包括: 1. **编辑器**:提供了一个清晰的编辑界面,让用户...

    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以及如何有效地使用它。...

Global site tag (gtag.js) - Google Analytics