zoukankan      html  css  js  c++  java
  • oracle学习整理(一)

    数据表使用的是orcale数据库自带的SCOTT用户下的表,主要使用就是EMP(雇员表)和DEPT(部门表),表中有部分数据。

    这个用户默认是锁定的,需要登录有DBA权限的用户对他进行解锁,解锁语句如下

    alter user scott account unlock;

    解锁完之后就可以进行登录和使用,如果安装时没有设置scott用户的密码时,默认密码是tiger

    一:rownum和分页

    ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。

    例子:根据rownum获取emp表中的前三条数据

    select rownum,emp.* from emp where rownum <=3

     rownum不支持大于号(>)的操作

    当我们想获取中间的几条数据的时候,可以使用子查询来进行分页效果

    第一种分页方式(效率最高)

    select * from (select rownum pnum,emp.* from emp) p where p.pnum>0 and  p.pnum<3

    第二种分页方式

    select * from (select rownum pnum,p1.* from emp p1 where rownum<3) p2 where p2.pnum >0

    第三种

    select * from (select rownum pnum,p1.* from (select * from emp)p1 where rownum <3) p2 where p2.pnum >0

    二、视图

    视图就是封装了一条复杂查询的语句。

    语法:

    CREATE VIEW 视图名称 AS 子查询

    创建一个视图,只保留empno,ename两列数据

    创建视图的用户必须要有DBA的权限

    create view  emp_view as  (select empno,ename from emp);

    查看视图和查看表的语句是一样的,只不过把表名换成了视图名

    视图不用于保存数据,对视图进行DML操作,其实操作的就是真实的物理表,所以我们可以把视图设置成只读的

    语法

    CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY

    删除索引

    DROP VIEW 视图名称

    三:PL/SQL

    3.1PL/SQL是什么?

    PLSQL Oracle sql 语言的过程化扩展,指在SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL 面向过程但比过程语言简单、高效、灵活和实用。

    程序语法:

    declare
    
            说明部分    (变量说明,游标申明,例外说明 )
    begin
    
        语句序列(DML 语句)…
    
    exception
            例外处理语句
    End;
            

    3.2变量

    3.2.1常量

    --常量
    declare
       empname varchar(255) :='天雁';
    begin
       dbms_output.put_line(empname);
    end;
      

    3.2.2引用型变量

    declare
      emprec emp.ename%type; --引用某一张表中的某一列
    begin
      select t.ename into emprec from emp t where t.empno = 7369;
      dbms_output.put_line(emprec); 
    end;

    3.2.3记录型变量

    declare 
         p  emp%rowtype;          --记录了一张表       
    begin
        select * into p from emp t where t.empno = 7369;
        dbms_output.put_line(p.ename || ' ' || p.sal);
    end;

    3.2判断分支

    语法 1IF    条件    THEN 
        语句 1;
        语句 2;
    END IF;
    
    语法 2IF   条件    THEN    语句序列 1ELSE        语句序列 2END    IF;
    
    语法 3IF    条件    THEN 语 句 ; 
    ELSIF   语句    
    THEN    语句;

    例子

    declare
      mynum number := &num;   --&num从控制台接受一个number类型的值
    begin
      if mynum < 5 then 
          dbms_output.put_line('输入的值小于5');
        elsif mynum >=5 and mynum<=10   then
          dbms_output.put_line('输入的值在5和10之间');
          elsif mynum >10 then
                dbms_output.put_line('输入的值大于10');
          end if;
      end;

    3.3 循环(loop)

    3.3.1语法 1:

    WHILE    total    <= 25000    LOOP
    
    .. .
    total : = total + salary;
    END    LOOP;

    例子:输出一到十

    declare
      pcount number := 1;
    begin
      while pcount<=10 loop
          dbms_output.put_line(pcount);
          pcount :=pcount+1;
       end loop;
      end;  

    3.3.2语法 2:

    Loop
    EXIT [when    条件];
    …… End loop

    例子:输出一到十

    declare
      pcount number := 1;
    begin
      loop 
        exit when  pcount>10;   --终止循环的条件,当条件满足时终止
              dbms_output.put_line(pcount);
        pcount :=pcount+1;
           end loop;
      end;

    3.3.3语法 3(for)

    FOR    I    IN    1 . . 3    LOOP
    语句序列 ;
    END    LOOP ;

    输出1到100

    declare
      pcount number := 1;
    begin
      for pcount in 1..100 loop    --自己进行+1操作
          dbms_output.put_line(pcount);
        end loop;
    end;

    3.4 游标 Cursor

    游标的含义

    在写 java 程序中有集合的概念,那么在 pl/sql 中也会用到多条记录,这时候我们就要用到游标, 游标可以存储查询返回的多条数据。

    PL/SQL块中执行SELECTINSERTDELETEUPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。它为应用等量齐观提供了一种对具有多行数据查询结果集中的每一行数据分别进行单独处理的方法,是设计嵌入式SQL语句的应用程序的常用编程方式。

    语法:

    CURSOR    游标名    [ (参数名    数据类型,参数名 数据类型,...)]    IS    SELECT    语句; 

    --游标的使用步骤
    --1.声明游标 CURSOR 游标名 [ (参数名 数据类型,参数名 数据类型,...)] IS SELECT 语句;
    --2.打开游标 open 游标名
    --3.取一行游标的值:fetch 游标名 into 变量名
    --4.关闭游标: close 游标名

    declare 
         cursor myemp is select * from emp;--声明
         pemp emp%Rowtype;
    begin
        open myemp;--打开
        loop fetch myemp into pemp;   --循环读取每一条记录放到记录变量中
        exit  when myemp%notfound;   --循环终止条件
          dbms_output.put_line(pemp.ename);
        end loop;
        close myemp;  --关闭
    end;

    3.5存储过程

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL  语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来 执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存 储过程。

     语法:

    create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)] AS
    begin
    PLSQL 子程序体;
    End;
    
    或者
    
    
    create [or replace] PROCEDURE 过程名[(参数名 in/out 数据类型)] is
    begin
    PLSQL 子程序体;
    End    过程名;

     创建一个名为helloworld存储过程

    create or replace procedure helloworld is
    begin
    dbms_output.put_line('helloworld'); 
    end helloworld;

    进行调用helloworld

    begin
    helloworld;
    end;
  • 相关阅读:
    GIT初探
    IIS7添加虚拟目录映射另一台服务器的共享文件夹
    The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF
    asp.net编码解码的两篇文章
    生成网站时提示 已预编译此应用程序
    错误 1 无法将程序集“NBear.Data.dll”复制到文件“D: ewbpmpmSureBpmBinNBear.Data.dll”。无法将“D: ewbpmpmSureSoft.WebServiceBaseLibinDebugNBear.Data.dll”添加到网站。 无法添加文件“BinNBear.Data.dll”。 拒绝访问。 D:..
    从Script到Code Blocks、Code Behind到MVC、MVP、MVVM(转载)
    HTML form表单的默认提交方式
    webapp检测手机运动方向,可实现手机摇一摇功能的触发
    手机/P各种提示框整合,纯js实现,比前端大多数框架的提示消息更好用
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/12170804.html
Copyright © 2011-2022 走看看