pl/sql--基本的语法及操作

一:plsql总内容概括

1.pl/sql基本的语法结构
  declare,begin,exception,end,:=,=,等关键字 字符
2.记录类型 type ... is record( , , );(相当于java的成员变量) 3.流程控制 3.1 条件判断(两种) 方式一: if ... then ... elsif ... then ... else ... end if; 方式二: case ... when ... then ... end; 3.2 循环结构(三种) 方式一: loop ... exit when... end loop; 方式二: while ... end loop; 方式三: for i in ... loop ... end loop; 3.3 关键字 goto 跳出循环 相当于 java(break) exit 退出 4.游标的使用(类似于java中的Iterator迭代器,用于集合的遍历) 5.异常的处理(三种方式) 6.存储 6.1存储函数:有返回值 6.2存储过程:没有返回值 7.触发器 8.索引 9.视图

二:变量的声明方式

  1.指定类型声明,以及长度(类型与表中的类型一致,长度要大于等于表中字段长度)
    
  v_sal number(10,2);
  v_email varchar2(20);
  v_hire_date date;
  
  2.直接将表中字段的属性赋给变量(推荐),不易出错

  v_sal employees.salary%type;
  v_email employees.email%type;
  v_hire_date employees.hire_date%type;

三.定义记录类型record(java中的内对象)

 1.声明一个记录类型  注意类成员后面用逗号,最后一个不加逗号.括号后面用分号
  type emp_record is record(
    v_sal employees.salary%type,
    v_email employees.email%type,
    v_hire_date employees.hire_date%type
  );
  --定义一个记录类型的成员变量
  v_emp_record emp_record;--后面直接可以用v_emp_record .变量名调用
例子:  dbms_output.put_line('工资'||v_emp_record.v_sal||',邮件'||v_emp_record.v_email||',日期'||v_emp_record.v_hire_date);

2.直接创建一个表的记录类型  %rowtype(推荐使用)
  表中所有字段以及其类型都会声明到这个记录类型中,以便于后面调用
  v_emp_record employees%rowtype;

例子:  dbms_output.put_line('工资'||v_emp_record.salary||',邮件'||v_emp_record.email||',日期'||v_emp_record.hire_date);

四:赋值问题  := 与  =

declare
  v_emp_id number(10);
begin
  v_emp_id:=123;
  update employees
  set salary=salary+100
  where employee_id =v_emp_id;
  dbms_output.put_line('执行成功');
end;
--变量赋值用 :=
--sql里面赋值用  =
--plsq函数判断等于用  =

五:条件判断语句 (两种)   (建议使用if..else)能处理多种条件判断,case不行

1.if ... then ... elsif ... then ... else ... end if;

--要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000';
--若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'
declare
  v_sal employees.salary%type;--表结构记录类型
  v_temp varchar2(50);
begin
  select salary into v_sal
  from employees where employee_id=150;

  if v_sal>=10000
     then v_temp:= 'salary >= 10000';
  elsif v_sal>=5000
     then v_temp:= '5000<= salary < 10000';
  else
     v_temp:= 'salary < 5000';
  end if;
  dbms_output.put_line('真实工资:'||v_sal||  ',   输出的信息:'||v_temp);
end;

2.case ... when ... then ... end;

 (1)number 数字case

--要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000';
--若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'
declare
  v_sal employees.salary%type;
  v_temp varchar2(50);
begin
  select salary into v_sal
  from employees where employee_id=150;
   v_temp:=
   case trunc(v_sal/5000) when 0 then  'salary >= 10000'
                          when 1 then  '5000<= salary < 10000'
                          else  'salary < 5000'
   end;
   dbms_output.put_line('真实工资:'||v_sal||  ',   输出的信息:'||v_temp);
end;

(2)varchar2字符串 case

--要求: 查询出 122 号员工的 JOB_ID, 若其值为 'IT_PROG', 则打印 'GRADE: A';
--'AC_MGT', 打印 'GRADE B', 'AC_ACCOUNT', 打印 'GRADE C'; 否则打印 'GRADE D'
declare
  v_job_id employees.job_id%type;
  v_temp varchar2(20);
begin
  select job_id into v_job_id
  from employees where employee_id=122;
  v_temp:=
  case v_job_id when 'IT_PROG' then 'GRADE: A'
                when 'AC_MGT' then 'GRADE B'
                when 'AC_ACCOUNT' then 'GRADE C'
                else 'GRADE D'
  end;
  DBMS_OUTPUT.put_line('job_id:'||v_job_id||' 打印信息:  '||v_temp);
end;

六:循环结构(三种)

猜你喜欢

转载自www.cnblogs.com/cbpm-wuhq/p/11951065.html
今日推荐