`
JYLike97
  • 浏览: 22965 次
  • 性别: Icon_minigender_1
  • 来自: 四川
文章分类
社区版块
存档分类
最新评论

关于pl/sql的查询语句技巧个人总结

阅读更多
1,在多表联合查询时由于要查出多个表中所需的关键字段,有时候给人很复杂的感觉。
其实仔细分析一下并不难啊~~~~
a.首先列出你要的所有字段。
select t.touristid,t.touristname,t.sex,t.mobile,t.times,
       c.cardid,nt.nationname,tp.tourtypename,p.provincename,
       ct.countryid,ct.countryname,h.hotelname,rs.chamberid,
       cc.certificatetypename,bd.days,bd,indate,bd.valid

b.在列出你多需要关联的表并取其别名
 from tourist t,touristtype tp,certificate c,certificatetype cc,
        nation nt,province p,country ct,hotel h,rooms rs,
        bookdetail bd,book bk
 
c.将所有的表的字段关联起来
   where t.tourtypeid=tp.tourtypeid
     and cc.typeid=c.typeid
     and t.countryid=ct.countryid
     and t.nationid=nt.nationid
     and t.certificateid=c.certificateid
     and t.provinceid=p.provinceid
     and t.touristid=bk.touristid
     and bk.hotelid=h.hotelid
     and bk.bookid=bd.bookid
     and bd.roomid=rs.roomid

d.最后再加上此次查询的约束条件就可以了
大功告成~~~~~哈哈
完整存储过程代码如下 
--根据证件号码,及游客姓名(姓名模糊查找)查找与游客相关的所有入住信息
procedure searchfulltourinfo(p_cardid certificate.cardid%type,
                             p_touristname tourist.touristname%type,
                             b out ems_cursor)
as
begin
 open b for
 select distinct
        t.touristid,t.touristname,ct.countryid,
        cc.certificatetypename,t.sex,t.mobile,
        t.times,c.cardid,nt.nationname,tp.tourtypename,
        p.provincename,ct.countryname,h.hotelname,
        rs.chamberid,bd.days,bd.indate,bd.valid


   from tourist t,touristtype tp,certificate c,certificatetype cc,
        nation nt,province p,country ct,hotel h,rooms rs,
        bookdetail bd,book bk

   where t.tourtypeid=tp.tourtypeid
     and cc.typeid=c.typeid
     and t.countryid=ct.countryid
     and t.nationid=nt.nationid
     and t.certificateid=c.certificateid
     and t.provinceid=p.provinceid
     and t.touristid=bk.touristid
     and bk.hotelid=h.hotelid
     and bk.bookid=bd.bookid
     and bd.roomid=rs.roomid
     and (p_cardid is null or c.cardid=p_cardid)
     ----与非表达式判断游客名是否为空,如果不为空则模糊查询
     and (p_touristname is null or upper(trim(t.touristname)) 
         like'%'||upper(trim(p_touristname))||'%')
     and rownum<=60
     order by bd.indate desc;
end searchfulltourinfo;

2,模糊查询
关于模糊查询的语法如下
select * from tourist t 
     where upper(trim(t.touristname)) 
      like '%'||upper(trim(p_touristname))||'%';

3,子查询(类似于临时表)
当条件比较复杂时,可以尝试先实现一部分条件查询产生的结果集,
再从结果集中查出最后结果
--根据酒店id及房间类型id计算照片数量
PROCEDURE GETPHOTONUMBER(P_USERID NUMBER,
                         P_TYPE NUMBER,
                         P_RESULT OUT NUMBER)
AS
V_A NUMBER :=-1;
BEGIN
P_RESULT:=-1;
IF P_TYPE=1 THEN--计算酒店照片数量
      SELECT COUNT(P.PHOTOID) 
     INTO V_A FROM PHOTOES P
     WHERE EXISTS(SELECT 1/*+rule*/ FROM PHOTOES P,HOTEL H
                                           WHERE H.VALID=0
                                             AND P.VALID=0
                                             AND P.HOTELID=H.HOTELID
                                             AND P.PHOTOTYPEID=P_TYPE
                                             AND H.USERID=P_USERID);

ELSe
IF P_TYPE=2 THEN--计算房间类型数量
     SELECT COUNT(P.PHOTOID) 
    INTO V_A FROM  PHOTOES P
    WHERE EXISTS(SELECT 1/*+rule*/ FROM PHOTOES P,HOTEL H
                                          WHERE H.VALID=0
                                            AND P.VALID=0
                                            AND P.HOTELID=H.HOTELID
                                            AND P.PHOTOTYPEID=P_TYPE
                                            AND H.USERID=P_USERID);

P_RESULT:=V_A;
else
P_RESULT:=-1;
END IF;
END IF;
END GETPHOTONUMBER;
分享到:
评论

相关推荐

    pl/sql最新中文手册

    8. **索引和性能优化**:手册可能也会涉及如何利用索引来提高PL/SQL程序的执行效率,以及如何分析和优化SQL语句。 9. **并发和锁定**:在多用户环境下,理解并发控制和锁定机制是必要的。手册可能会讨论如何处理...

    oracle10g_pl/sql

    - **存储过程**:一组PL/SQL语句,可重复调用,提高代码复用性。 - **函数**:类似于过程,但返回一个值,可用于计算或验证。 - **触发器**:在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    2. **数据处理**:通过PL/SQL,用户可以直接对数据库表进行增删改查操作,使用SELECT、INSERT、UPDATE、DELETE等SQL语句。 3. **游标**:PL/SQL支持游标,允许用户逐行处理查询结果,这对于处理大量数据时非常有用...

    基本SQL语句及PL/SQL语句

    标题中的“基本SQL语句及PL/SQL语句”涵盖了关系数据库管理中两个重要的概念:SQL(Structured Query Language)和PL/SQL(Procedural Language/SQL)。SQL是用于管理和处理关系数据库的标准语言,而PL/SQL是Oracle...

    Oracle PL/SQL实战(待续)

    在这个"Oracle PL/SQL实战(待续)"的主题中,我们将深入探讨这个语言的核心概念和实战技巧。 在Oracle数据库中,PL/SQL提供了丰富的控制结构,如循环、条件判断,以及异常处理机制,使得开发者能够编写复杂的业务...

    SQL、pl/sql基础语句大全

    7. **SQL执行顺序**:在SQL语句中,`FROM`子句首先执行,确定数据源;然后是`WHERE`子句,过滤满足条件的行;接着是`SELECT`,选择需要的列;最后是`ORDER BY`,对结果进行排序。 对于初学者来说,理解和掌握这些...

    pl/sql developer11.0

    7. **性能优化**:提供性能分析工具,如执行计划分析、SQL Tuning Advisor等,帮助优化SQL语句,提高数据库运行效率。 8. **版本控制集成**:与其他版本控制系统(如Git、SVN)无缝集成,便于版本管理和代码协同。 ...

    oracle 9i pl/sql程序设计笔记

    通过上述对Oracle 9i PL/SQL程序设计笔记的总结,我们可以看到PL/SQL作为一种强大的数据库编程语言,提供了丰富的功能来支持数据处理、事务控制及业务逻辑的实现。掌握PL/SQL的不同块类型及其使用方法对于开发高效、...

    Oracle PL/SQL程序设计(第5版)(上下册)

    - **SQL语句的执行**:介绍如何在PL/SQL代码中嵌入SQL语句,包括查询、插入、更新和删除操作。 - **动态SQL**:探讨如何构造和执行动态SQL语句,这对于需要根据运行时条件生成SQL的情况非常有用。 - **SQL*Plus命令*...

    ORACLE PL/SQL从入门到精通

    过程是PL/SQL中一种用来封装逻辑的单元,它包含了一系列的SQL语句和PL/SQL代码,可以执行特定的任务。过程与匿名程序块的区别在于它具有名称和参数,能够被重复调用。创建过程的语法中涉及到参数模式,包括IN、OUT、...

    PL/SQL 基本知识

    执行部分是程序的主要逻辑,包含SQL语句和PL/SQL语句;异常处理部分则用于捕获和处理运行时可能出现的错误。 在实际应用中,PL/SQL的存储过程和函数是常见的使用场景。存储过程是一组预编译的PL/SQL语句,可以被多...

    Oracle PL/SQL实例编程(PL/SQL经典书籍)

    4. **SQL操作**:PL/SQL可以直接嵌入SQL语句,进行数据查询、插入、更新和删除操作。游标允许程序逐行处理查询结果。 5. **异常处理**:PL/SQL提供了异常处理机制,通过BEGIN...EXCEPTION块来捕获和处理运行时错误...

    oracle pl/sql从入门到精通 配套源代码

    在Oracle PL/SQL中,我们可以通过使用SQL语句来与数据库进行交互,例如SELECT用于查询数据,INSERT、UPDATE和DELETE用于修改数据。PL/SQL还提供了游标(CURSOR)机制,允许我们逐行处理查询结果。此外,PL/SQL还支持...

    pl/sql例题代码pl/sql例题代码pl/sql例题代码

    5. **存储过程和函数**:存储过程是一组预编译的SQL语句,可以接收参数,返回结果。函数与之类似,但必须返回一个值。 6. **触发器**:触发器是在特定数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行的PL/...

    PL/SQL下载

    5. **动态SQL**:允许在运行时构造和执行SQL语句,增强了灵活性。 **PL/SQL Developer** PL/SQL Developer是一款专为Oracle数据库开发设计的集成开发环境(IDE),它的主要功能包括: 1. **源代码编辑器**:提供...

    PL/SQL开发文档1

    2. SQL*Plus是Oracle提供的一个命令行工具,允许用户执行SQL语句和PL/SQL代码块,并获取查询结果。 3. PL/SQL程序单元包括过程(Procedures)、函数(Functions)、包(Packages)、触发器(Triggers)等。文档中...

    PL/SQL免安装版

    在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL免安装版,点击即用,非常方便!

    PL/SQL编程基础知识

    在PL/SQL环境中可以使用的SQL语句主要包括以下几种: - **INSERT**:用于向表中插入新记录。 - **UPDATE**:用于更新现有记录。 - **DELETE**:用于删除表中的记录。 - **SELECT INTO**:用于从表中选取数据,并将...

    oracle 中 pl/sql 只是学习方法

    4. **存储过程和函数**:存储过程是一组预先编译的PL/SQL语句,可以在需要时调用,减少网络通信,提高性能。函数与存储过程类似,但必须返回一个值。它们可以用于封装复杂的业务逻辑,增强代码复用性。 5. **异常...

Global site tag (gtag.js) - Google Analytics