PL/SQL

PL/SQL(Procedural Language/SQL)

是一种过程化语言PL/SQL是Oracle的专用语言,它是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,也可以定义变量和控制程序的执行流程,这样就将SQL语句的数据操纵和查询能力与PL/SQL的过程处理能力结合在一起了

标准PL/SQL块的语法格式:

[DECLARE] --声明部分,可选
BEGIN --执行部分,必须
[EXCEPTION] --异常处理部分,可选

END

定义变量和常量

    1.定义变量        <变量名> <数据类型> [(长度):=<初始值>];//PL/SQL的赋值符号为:=

    2.定义常量        <常量名> constant <数据类型>:=<常量值>;

基本数据类型

1.数值类型:常用的是number(m,n)m为总的位数,n为小数位数

2.字符类型:主要包括VARCHAR2、CHAR、LONG、NCHAR和NVARCHAR2等。这些类型的变量用来存储字符串或字符数据。

3.日期类型:DATE类型,共七个字节包括世纪、年、月、天、小时、分钟和秒

4.布尔类型:BOOLEAN,值有TRUE、FALSE或NULL

特殊类型:

1.%type

使用这个类型关键字可以声明一个与指定列名称相同的数据类型,它通常紧跟在指定列名后

例如:

在SCOTT模式下,使用%type类型的变量输出emp表中编号为7369的员工姓名和职务信息
  set serveroutput on
  declare 
     var_ename  emp.ename%type;
     var_job    emp.job%type;
  begin
     select ename,job into var_ename,var_job from emp where empno=7369;
     dbms_output.put_line('编号为7369的员工姓名为:'||var_ename||',职位为'||var_job);
  end;
  /

   2. record

record类型也称作“记录类型”,使用该类型的变量可以存储由多个列值组成的一行数据。在声明记录类型变量之前,首先需要定义记录类型,然后才可以声明记录类型的变量。记录类型是一种结构化的数据类型,它使用type语句进行定义,在记录类型的定义结构中包含成员变量及其数据类型

  例如:

声明一个记录类型emp_type,然后使用该类型的变量存储emp表中编号为7369
  员工的姓名、职务、工资信息,并输出这条记录信息。
  declare
     type emp_type is record(
         var_ename emp.ename%type,
         var_job   emp.job%type,
         var_sal   emp.sal%type
     );
     emp_info emp_type;
   begin
     select ename,job,sal into emp_info from emp where empno=7369;
     dbms_output.put_line('编号为7369员工姓名:'
            ||emp_info.var_ename||',职务:'||emp_info.var_job||
            '工资是:'||emp_info.var_sal);
   end;

3.%rowtype

 %rowtype类型的变量结合了“%type类型”和record类型变量的优点,它可以根据数据表中行的结构定义一种特殊的数据类型,用来存储从数据表中检索到的一行数据

例如:

声明一个%rowtype类型的变量rowVar_emp,然后使用该变量存储emp表中的一行数据。
  declare
     rowVar_emp     emp%rowtype;
  begin
     select * into rowVar_emp from emp where empno=7369;
     dbms_output.put_line('编号为7369的员工姓名为:'||rowVar_emp.ename||
        ',雇佣日期为:'||rowVar_emp.hiredate||'工资为:'||rowVar_emp.sal);
  end;
  /

选择语句:

1.使用if...then语句比较两个字符串变量的长度,并输出比较结果。
  declare
     var_str1 varchar2(20);
     var_str2 varchar2(20);
  begin
     var_str1:='hello';
     var_str2:='Oracle is good';
     if length(var_str1)<length(var_str2) then
        dbms_output.put_line('字符串"'||var_str1||'"的长度小于"'||var_str2||'"');
     end if;
  end;
  /


2.通过if..else语句实现只有年龄大于等于65岁,才可以申请退休,否则程序会提示不可以
  申请退休。
  declare
      age number:=15;
  begin
      if age>=65 then
         dbms_output.put_line('您可以申请退休');
      else
         dbms_output.put_line('年龄不到,不能申请退休!');
      end if;
  end;
  /
  


3.指定一个月份数值,然后使用if...then..elsif语句判断它所属的季节,并
  输出季节信息,代码如下。
  declare
     month int:=4;
  begin
     if month>=1 and month<=3 then
        dbms_output.put_line('春天');
     elsif month>=4 and month<=6 then
        dbms_output.put_line('夏日炎炎');
     elsif month>=7 and month<=9 then
        dbms_output.put_line('秋天');
     else
        dbms_output.put_line('冬天很冷');
     end if;
  end;
  /
  


4.使用loop语句求前100个自然数的和,并输出到屏幕。
  declare
    i int:=0;
    sum_i int:=0;
  begin
    loop
        i:=i+1;
        sum_i:=sum_i+i;
        exit when i=100;//结束条件
    end loop;
    dbms_output.put_line('前100个自然数的和是:'||sum_i);
  end;
  /
  


5.使用while语句求前100个自然数的和,并输出到屏幕。
  declare
    i int:=0;
    sum_i int:=0;
  begin
    while i<=99 loop//这个i<99是进入循环的条件
       i:=i+1;
      sum_i:=sum_i+i;
    end loop;
    dbms_output.put_line('前100个自然数的和是:'||sum_i);
  end;
  /
  


6.使用for语句求前100个自然数中偶数之和,并输出到屏幕。
  declare
    sum_i int:=0;
  begin
    for i in 1..100 loop
        if mod(i,2)=0 then//这是求余函数
           sum_i:=i+sum_i;
        end if;
    end loop;    
    dbms_output.put_line('前100个自然数的和是:'||sum_i);
  end;
  /
  


7.指定一个季度数值,然后使用case语句判断它所包含的月份信息并输出。
  declare
     season varchar2(20):='夏天';
  begin
     case season
        when '春天' then
          dbms_output.put_line('包含1、2、3月份');
        when '夏天' then
          dbms_output.put_line('包含4、5、6月份');
        when '秋天' then
          dbms_output.put_line('包含7、8、9月份');
        when '冬天' then
          dbms_output.put_line('包含10、11、12月份');
        else
          dbms_output.put_line('未知季节!');
     end case;
  end;
  /

系统内置函数:

测试系统函数可以使用

select  ***(函数)     from    dual;    语句其中dual是体统临时表

ASCII(c)函数  :a---97

CHR(i)函数  :  97---a

CONCAT(s1,s2):函数连接字符串,返回新字符串

INITCAP(s): 函数   将每个单词的首字母大写

ABS(n):返回n的绝对值

ADD_MONTHS(d,i):返回日期d加上i个月之后的结果。其中,i为任意整数

LAST_DAY(d):返回包含日期d月份的最后一天

SYSDATE:系统当前时间

TO_CHAR(x[,format]):该函数实现将表达式转换为字符串,format表示字符串格式

TO_DATE(s[,format[lan]]):该函数将字符串s转换成date类型,format表示字符串格式,lan表示所使用的语言

AVG:平均值

COUNT():行数

POWER(a,b)a的b次方

ROUND(a,b):给a保留b为小数并四舍五入

PL/SQL存储过程

存储过程是一种命名的PL/SQL程序块

存储过程保存在数据库中,因为是已经编译好的代码,所以在被调用时,其执行效率非常高

存储过程的参数种类:
   1. in 输入参数(默认)
   2. out 输出参数
   3.  in out 输入输出参数








































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值