PL/SQL

//PS:SET SERVEROUTPUT ON;
//DBMS_OUTPUT.PUT_LINE();--输出
--实现操控程序处理的细节过程

PL/SQL程序以块(BLOCK)为基本单位,分三部分:声明部分(用declare开头)、执行部分(以begin开头)和异常处理部分(以exception开头)
--语法格式:
declare
   --声明部分,可选
  begin
  --执行部分,可选
  exception
  --异常处理部分,可选
  end
  
  
  --标识符
  
  --分界符
  % --属性指示符= --赋值操作符
  => --链接操作符
  ..  --范围操作符
  || --范围操作符
  <space>空格
  
  
  
  --数据类型
  数值类型:
  number(p,s) --p表示精度,s是刻度范围
  pls_integer、binary_integer
  
  字符类型: varchar2(maxlength)、char(maxlength)、long
  日期类型:date
  布尔类型:boolean
  
  特殊类型:%type、record、%rowtype
  %type:声明一个与指定列相同的数据类型
  record:记录类型
  --语法
  type record_type is record  --声明record类型record_type
  (
      var_member1 data_type [not null][:=default_value],
      ...
      var_membern data_type [not null] [:=dafault_value]
  )
 record_name record_type  --定义变量
  
 %rowtype : 根据结构表中行的结构定义的特殊的数据类型,用来存储从数据表中检索到的一行数据
 --语法
 rowVar_name table_name%rowtype; --rowVar_name:表示存储一行数据的变量名,table_name 指定表名
 
-- 变量、常量的定义
 语法:
 <变量名><数据类型>[(长度):=<初始值>];--变量
  <常量名> constant <数据类型>:=<常量值>];--变量  ,关键字:constant
  
  
  
 -- 流程控制语句
  1.if...then
  2.if...then...else
  3.if...then...else if...
  4.case
  --循环语句
  5.loop...exit...end 
  6.loop...exit when...end
  7.while...loop...end
  8.for
  9.goto
  
   --if...then
   declare 
     age int:=55;
     begin
        if age>54
        then dbms_output.put_line("退休");
        else
        dbms_output.put_line("不能退休");
        end if;
        end;
    --case
    declare 
       season int:=3;
       aboutinfo varchar2(50);
       begin
        case season
          when 1 then
            aboutinfo:=season||'季度包括1,2,3月份';
        when 2 then
            aboutinfo:=season||'季度包括1,2,3月份';
            else 
            aboutinfo:=season||'不合法';
            end case;
            end;
  
  
  --loop...exit
    declare
     sum int:=0;
     i int:=0;
     begin
      loop 
      i:=i+1;
      sum:=sum+i;
      exit when i=10;
      end loop;
      end;
   --while...loop...end
   declare
   s int:=1;
   i int:=0;
   begin
    while i>10 loop
    i:=i+1;
    s:=s*i;
    end loop;
    end;

  -- for
  declare
 sum int:=0;
  begin 
 for i in reverse 1...100 loop
if mod(i,2)=0 then  
  sum:=sum+i;
end if;
end loop;
end;  
    
  
  ---游标
 声明游标
 --语法
 cursor cur_name(input_parameter1,...)
 [return ret_type]--可选,返回值类型
 is select_sentence --select语句,反复读取结果集
  --例子:
   declare
   cursor cur_emp(var_job in varchar2:='11')
   is select empno,ename,sal
   from emp 
   where job=var_job;
   --打开游标
   open curso_name; --有参数的要带参数,默认可以不用带参数;
  --读取游标
   fetch ...into ...
  --fetch 游标名称  into 记录变量
  --关闭游标
  close cursor_name;
  
  --隐式游标(处理数据操纵语句,如update,delete语句)
  
  --游标的属性
  %found:布尔类型,如果sql语句影响到一行数据,为trun,否则为false;
  %notfound :与%found相反;
  %rowcount:游标行数
  %ISOPEN:游标是否打开;
  
  
  
  
  
  
  
  
  
  
  1.写一段PL/SQL语句,使用loop语句求得前10各自然数的积
     declare
      int i:=0;
      int s:=1;
      begin
        loop
        i:=i+1;
        s:=s*i;
        exit when i=10;
        end loop;
        dbms_output.put_line(s):
        end;
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

 

posted @ 2020-09-10 13:32  不忘初心,追随梦想  阅读(188)  评论(0编辑  收藏  举报