PLSQL语言基础

结构:
    DECLARE        //标记声明部分
            //此处用来定义常量,变量,类型和游标
    
    BEGIN        //标记程序体开头部分        
            //编写各种PL/SQL语句,函数,存储过程

EXCEPTION    //异常处理开始
            //编写异常处理代码
    
    END;        //程序体结束

PL/SQL可以独立编译并存储在数据库中,有4种可存储的程序:函数,存储过程,包和触发器
例如:
SYS AS [email protected]>SET SERVEROUTPUT ON;
SYS AS [email protected]>DECLARE
  2  VAR_DEPNAME VARCHAR2(100);
  3  BEGIN
  4  SELECT DEPARTMENT_NAME INTO VAR_DEPNAME
  5  FROM HR.DEPARTMENTS WHERE DEPARTMENT_ID=270;
  6  DBMS_OUTPUT.PUT_LINE(VAR_DEPNAME);
  7  END;
  8  /
声明变量和常量:
    DECLARE
        <变量名1> <数据类型1>;
        <变量名N> <数据类型N>;

PL/SQL常用的数据类型:
    BLOB    二进制大对象,可以用来存储图像和文档等二进制数据
    BOOLEAN    布尔数据类型,支持TRUE/FALSE
    CHAR    固定长度字符串
    CLOB    字符大对象,最大保存4G字符数据
    DATE    存储全部日期的固定长度字符串
    LONG    可变长度字符串
    NUMBER    可变长度数值
    RAW    二进制数据的可变长度字符串
    VARCHAR2    可变长度字符串
    
    声明常量:
    <常量名> CONSTANT <数据类型> := <值>
    SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE
      2  CONVERSION CONSTANT VARCHAR2(20) :=‘1.0‘;
      3  BEGIN
      4  DBMS_OUTPUT.PUT_LINE(CONVERSION);
      5  END;
     6  /
    
    声明变量:
    <变量名> <数据类型> [(宽度):=<初始值>]
    SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>DECLARE
      2  DEPNAME VARCHAR2(20):=‘HR DEPARTMENT‘;
      3  BEGIN
      4  DBMS_OUTPUT.PUT_LINE(DEPNAME);
      5  END;
      6  /
    HR DEPARTMENT

使用赋值语句
    SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE
      2  BOOKNAME VARCHAR2(50);
      3  BEGIN
      4  BOOKNAME:=‘ORACLE BOOKS‘;
      5  DBMS_OUTPUT.PUT_LINE(BOOKNAME);
      6  END;
      7  /
    ORACLE BOOKS
    
    使用条件语句(IF)
    IF<条件表达式> THEN
        <执行语句>....<执行语句>
    [ELSIF<条件表达式> THEN
        <执行语句>....<执行语句>
    ...
    ELSE
    <执行语句>]
    END IF;
    SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE
      2  NUM INTEGER:=-11;
      3  BEGIN
      4  IF NUM<0 THEN
      5  DBMS_OUTPUT.PUT_LINE(‘FUSHU‘);
      6  ELSIF NUM>0 THEN
      7  DBMS_OUTPUT.PUT_LINE(‘ZHENGSHU‘);
      8  ELSE
      9  DBMS_OUTPUT.PUT_LINE(‘0‘);
     10  END IF;
     11  END;
     12  /
    FUSHU

分支语句CASE
    CASE <变量>
        WHEN <表达式1> THEN 值1
        WHEN <表达式n> THEN 值n
        ELSE 值n + 1
    END;

SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE
      2  VARDAY INTEGER:=3;
      3  RESULT VARCHAR2(20);
      4  BEGIN
      5  RESULT:=CASE VARDAY
      6  WHEN 1 THEN ‘1‘
      7  WHEN 2 THEN ‘2‘
      8  WHEN 3 THEN ‘3‘
      9  ELSE ‘0‘
     10  END;
     11  DBMS_OUTPUT.PUT_LINE(RESULT);
     12  END;
     13  /
    3

循环语句LOOP....EXIT....END
      LOOP
        <程序块1>
        IF<条件表达式>THEN
           EXIT
        END IF
        <程序块2>
        END LOOP;

SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE
      2  V_NUM INTEGER:=1;
      3  V_SUM INTEGER:=0;
      4  BEGIN
      5  LOOP
      6  V_SUM:=V_SUM+V_NUM;
      7  DBMS_OUTPUT.PUT_LINE(V_NUM);
      8  IF V_NUM=4 THEN
      9  EXIT;
     10  END IF ;
     11  DBMS_OUTPUT.PUT_LINE(‘+‘);
     12  V_NUM:=V_NUM+1;
     13  END LOOP;
     14  DBMS_OUTPUT.PUT_LINE(‘=‘);
     15  DBMS_OUTPUT.PUT_LINE(V_SUM);
      16  END;
     17  /
    1
    +
    2
    +
    3
    +
    4
    =
    10

循环语句LOOP....EXIT...WHEN...END
    
    LOOP
        <程序块1>
        EXIT WHEN <条件表达式>
        <程序块2>
    END LOOP;

SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE
      2  V_NUM INTEGER:=1;
      3  V_SUM INTEGER:=0;
      4  BEGIN
      5  LOOP
      6  V_SUM:=V_SUM+V_NUM;
      7  DBMS_OUTPUT.PUT_LINE(V_NUM);
      8  EXIT WHEN V_NUM=4;
      9  DBMS_OUTPUT.PUT_LINE(‘+‘);
     10  V_NUM:=V_NUM+1;
     11  END LOOP;
     12  DBMS_OUTPUT.PUT_LINE(‘=‘);
     13  DBMS_OUTPUT.PUT_LINE(V_SUM);
     14  END;
     15  /
    1
    +
    2
    +
    3
    +
    4        
    =    
    10

循环语句WHILE....LOOP....END LOOP
    
    WHILE<条件表达式>
    LOOP
        <程序块>
    END LOOP;

SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>DECLARE      
    2  V_NUM INTEGER:=1;
      3  V_SUM INTEGER:=0;
      4  BEGIN
      5  WHILE V_NUM<=4
      6  LOOP
      7  V_SUM:=V_SUM+V_NUM;
      8  DBMS_OUTPUT.PUT_LINE(V_NUM);
      9  IF V_NUM<4 THEN
     10  DBMS_OUTPUT.PUT_LINE(‘+‘);
     11  END IF;
     12  V_NUM:=V_NUM+1;
     13  END LOOP;
     14  DBMS_OUTPUT.PUT_LINE(‘=‘);
     15  DBMS_OUTPUT.PUT_LINE(V_SUM);
     16  END;
     17  /
    1
    +
    2
    +
    3
    +
    4
    =
    10

循环语句FOR...IN...LOOP...END LOOP
    FOR <循环变量>  IN <初始值>...<终止值>
    LOOP
        <程序块>
    END LOOP;

SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>DECLARE
      2  V_NUM INTEGER;
      3  V_SUM INTEGER:=0;
      4  BEGIN
      5  FOR V_NUM IN 1..4
      6  LOOP
      7  V_SUM:=V_SUM+V_NUM;
      8  DBMS_OUTPUT.PUT_LINE(V_NUM);
      9  IF V_NUM<4 THEN
     10  DBMS_OUTPUT.PUT_LINE(‘+‘);
     11  END IF ;
     12  END LOOP;
     13  DBMS_OUTPUT.PUT_line(‘=‘);
     14  DBMS_OUTPUT.PUT_LINE(V_SUM);
     15  END;
     16  /
    1
    +
    2
    +
    3
    +
    4
    =
    10

数值型函数:
    ABS函数:
    SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(ABS(-450));
      3  END;
      4  /
    450
    
    CEIL函数
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(CEIL(0));
      3  DBMS_OUTPUT.PUT_LINE(CEIL(-112.74));
      4  DBMS_OUTPUT.PUT_LINE(CEIL(116.34));
      5  END;
      6  /
    0
    -112
    117
    
    FLOOR函数
    SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(FLOOR(116.34));
      3  DBMS_OUTPUT.PUT_LINE(FLOOR(-112.74));
      4  DBMS_OUTPUT.PUT_LINE(FLOOR(0));
      5  END;
      6  /
    116
    -113
    0
    
    POWER 函数
    SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(POWER(10,3));
      3  END;
      4  /
    1000
    ROUND函数
    SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(ROUND(123.45,2));
      3  DBMS_OUTPUT.PUT_LINE(ROUND(123.45,0));
      4  DBMS_OUTPUT.PUT_LINE(ROUND(123.45,-1));
      5  END;
      6  /
    123.45
    123
    120
    
    字符型函数
    ASCII函数:(返回首字母的ASCII值)
    SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(ASCII(‘ABC‘));
      3  END;
      4  /
    65

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.05
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(ASCII(‘BC‘));
      3  END;
      4  /
    66

LENGTH函数(返回指定字段的长度)
    SYS AS [email protected]>SELECT DEPARTMENT_NAME,LENGTH(DEPARTMENT_NAME) FROM HR.DEPARTMENTS WHERE ROWNUM<3;

DEPARTMENT_NAME            LENGTH(DEPARTMENT_NAME)
    ------------------------------ -----------------------
    Administration                        14
    Marketing                         9

UPPER函数:(将字符串转换为大写字母)
    SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(UPPER(‘abc‘));
      3  END;
      4  /
       ABC
    
    日期型函数:
    SYSDATE函数
    SYS AS [email protected]>SET SERVEROUTPUT ON;
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(SYSDATE);
      3  END;
      4  /
    
    TO_CHAR函数(将日期型数据DATE,转换成FORMAT指定格式的字符串) TO_CHAR(DATE,FORMAT)
    SYS AS [email protected]>SET SERVEROUTPUT ON
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE));
      3  END;
      4  /
    22-DEC-14
    
    LAST_DAY函数(返回指定日期所在月的最后一天)
    SYS AS [email protected]>BEGIN
      2  DBMS_OUTPUT.PUT_LINE(LAST_DAY(SYSDATE));
      3  END;
      4  /
    31-DEC-14

TO_DATE函数TO_DATE(STRING,FORMAT)将字符串STRING转换成以FORMAT指定格式的日期型数据
      1  BEGIN
      2  DBMS_OUTPUT.PUT_LINE(TO_DATE(‘2010-2-5‘,‘YYYY-MM-DD‘));
      3* END;
    SYS AS [email protected]>/
    05-FEB-10
        
    MONTHS_BETWEEN函数(返回DATE1减去DATE2得到的月份整数)
    SYS AS [email protected]>DECLARE
      2  DATE1 VARCHAR2(20):=‘2010-05-05‘;
      3  DATE2 VARCHAR2(20):=‘2010-10-05‘;
      4  BEGIN
      5  DBMS_OUTPUT.PUT_LINE(MONTHS_BETWEEN(TO_DATE(DATE2,‘YYYY-MM-DD‘),TO_DATE(DATE1,‘YYYY-MM-DD‘)));
      6  END;
      7  /
    5
    
    统计函数:
    COUNT()统计总数量
    SYS AS [email protected]>SELECT COUNT(DEPARTMENT_ID) FROM HR.DEPARTMENTS;

COUNT(DEPARTMENT_ID)
    --------------------
          27
    
    MAX函数,统计最大值
    SYS AS [email protected]>SELECT MAX(DEPARTMENT_ID) FROM HR.DEPARTMENTS;

MAX(DEPARTMENT_ID)
    ------------------
           270
        
    MIN函数(统计最小值)
    SYS AS [email protected]>SELECT MIN(DEPARTMENT_ID) FROM HR.DEPARTMENTS;

MIN(DEPARTMENT_ID)
    ------------------
        10
    
    AVG()函数统计平均值:
    SYS AS [email protected]>SELECT AVG(DEPARTMENT_ID) FROM HR.DEPARTMENTS;

AVG(DEPARTMENT_ID)
    ------------------
           140
    SUM()求总和
    SYS AS [email protected]>SELECT sum(DEPARTMENT_ID) FROM HR.DEPARTMENTS;

SUM(DEPARTMENT_ID)
    ------------------
          3780

异常处理:
    EXCEPTION
        WHEN <异常情况名> THEN        //异常情况名由ORACLE系统定义好的名字
            异常处理代码
        WHEN <异常情况名> THEN
            异常处理代码
        WHEN OTHERS THEN
            异常处理代码
            
    SYS AS [email protected]>DECLARE
      2  X NUMBER;
      3  BEGIN
      4  X:=‘ABC‘;
      5  EXCEPTION
      6  WHEN VALUE_ERROR THEN
      7  DBMS_OUTPUT.PUT_LINE(‘1223323‘);
      8  END;
      9  /
    1223323

时间: 2024-08-12 08:15:25

PLSQL语言基础的相关文章

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26

Oracle SQL语言基础及环境准备_超越OCP精通Oracle视频教程培训26 本课程介绍: Oracle视频教程,风哥本套oracle教程培训是<<Oracle数据库SQL语言实战培训教程>>的第1/5套:SQL语言之基础入门及环境准备.主要学习Oracle数据库SQL语言基础介绍.PL/SQL语言介绍.数据库SQL对象与数据类型介绍.SQL语言实战环境准备等. Oracle SQL语言之基础及环境准备,课程内容详细如下: Oracle数据库SQL语言基础介绍Oracle数据

Swift语言指南(一)--语言基础之常量和变量

Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swift 提供了 C 与 Objective-C 中的所有基础类型,包括表示整数的 Int,表示浮点数的 Double 与 Float,表示布尔值的 Bool,以及表示纯文本数据的 String. Swift 还为两个基本集合类型 Array 与 Dictionary 提供了强大的支持,详情可参考 (集合类型)Collection Types. 与 C 语言类

02 java语言基础

常量:字面值常量(字符串,字符,整数,小数,布尔,null),自定义常量,''这个不是字符常量,""这个是字符串常量 进制: 02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 字符串常量 用双引号括起来的内容 整数常量 所有整数 小数常量 所有小数 字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号 布尔常量 较为特

嵌入式 Linux C语言——C语言基础

嵌入式 Linux C语言--C语言基础 一.数据类型 1.基本数据类型 数据类型是创建变量的模型.变量名是连续存储空间的别名,程序中使用变量命名存储空间,通过变量可以使用存储空间.变量所占的内存大小取决于创建变量的数据类型. 2.有符号和无符号 有符号数中数据类型的最高位用于标识数据的符号,最高位为1表示为负数,最高位为0表示为正数. 计算机中有符号数通常使用补码表示,正数的补码为正数本身,负数的补码为负数的绝对值的各位取反后加1. 计算机中无符号数通常使用原码表示,无符号数默认为正数,没有符

C#语言基础

第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了一个强大的.易用的.逻辑结构一致的设计环境.其特点: 语言简洁 保留了C++的强大功能: 快速应用开发功能: 语言的的自由性: 强大的Web服务器控件: 支持跨平台: 与XML相融合: 第二部分 C#语言基础: 一.C#项目的组成结构: 1.项目后缀 .config——配置文件(存放配置参数文件)

OC语言基础知识

OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程 二.类 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行类的

【quick-cocos2d-x】Lua 语言基础

版权声明:本文为博主原创文章,转载请注明出处. 使用quick-x开发游戏有两年时间了,quick-x是cocos2d-Lua的一个豪华升级版的框架,使用Lua编程.相比于C++,lua的开发确实快速便捷了许多,下文只是lua这门语言的一个基础知识点,没有涵盖整个Lua的内容,但是作为对lua入门的初步了解还是可以的,由于内容精简了不少,所以语言上可能会有点跳跃,但是问题不大. 要了解一门语言,首先要了解的是语言的标识符.保留字.常量和变量,命名规范和注释以及数据类型等.然后是运算符.控制流语句

C# 语言基础(简单的输出 输入语句 和 加法运算符)

int a, b; Console.Title = "C# 语言基础-第一堂课";// 标题 Console.BackgroundColor = ConsoleColor.DarkRed;//设置控制台的背景颜色 Console.WriteLine("幼儿园大班第一节课"); Console.WriteLine("请输入a的值,按回车");//输出语句,自动换行 Console.Write("a="); //输出语句,自动不换

R语言基础

##数据获取 x1=round(runif(100,min=80,max=100)) x2=round(rnorm(100,mean=80, sd=7)) x3=round(rnorm(100,mean=80,sd=18)) x3[which(x3>100)]=100 num=seq(2005138101,length=100) x=data.frame(num,x1,x2,x3) write.table(x, "grade.txt") ##数据分析 y=read.table(&