Oracle(七):PLSQL编程之基础语法

一、PL/SQL简介

    pl/sql编程语言是对sql语言的扩展,使得sql语言具有过程化编程的特性。 pl/sql编程语言比一般的过程化编程语言,更加灵活高效。 pl/sql编程语言主要用来编写存储过程和存储函数等。

二、PL/SQL基础语法

1、基本结构

DECLARE        --声明部分
        声明语句
BEGIN         --执行部分
        执行语句
EXCEPTION         --异常处理部分
        执行语句
END;

2、声明语句

2.1、常量声明

    语法:<变量名> CONSTANT 类型:=初始值; 实例:pi constant number(5,3):=3.14;

2.2、变量声明

基本类型

    语法:<变量名> 类型[:=初始值]; 实例:sal number(9,2) := 3000;

引用类型

    语法:变量名 table_name.column_name%type; 实例:myname emp.ename%type;

记录类型

    语法:变量名 table_name%rowtype; 实例:record emp%rowtype;

赋值

使用:=赋值:num := 100;

使用into查询语句

    语法:使用SELECT <列名> INTO <变量名> FROM <表名> WHERE <条件> 实例:select * into test from emp where empno=7788;

3、控制语句

3.1、条件控制

IF 条件 THEN 语句1; 语句2; END IF;

---输入小于18的数字,输出未成年
declare
  i number(3) := &ii;
begin
  if i<18 then
    dbms_output.put_line(未成年);
  end if;
end;

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

---输入小于18的数字,输出未成年
---输入大于18的数字,输出成年人
declare
  i number(3) := &ii;
begin
  if i<18 then
    dbms_output.put_line(未成年);
  else
    dbms_output.put_line(成年人);
  end if;
end;

IF 条件 THEN 语句; ELSIF 语句 THEN 语句; ELSE 语句; END IF;

---输入小于18的数字,输出未成年
---输入大于18小于40的数字,输出中年人
---输入大于40的数字,输出老年人
declare
  i number(3) := &ii;
begin
  if i<18 then
    dbms_output.put_line(未成年);
  elsif i<40 then
    dbms_output.put_line(中年人);
  else
    dbms_output.put_line(老年人);
  end if;
end;

3.2、循环控制

LOOP 语句; EXIT WHEN <条件> END LOOP;

--输出1到10是个数字:
declare
  i number(2) := 1;
begin
  loop
    exit when i>10;
    dbms_output.put_line(i);
    i := i+1;
  end loop;
end;

WHILE <条件> LOOP 语句; END LOOP;

--输出1到10是个数字:
declare
  i number(2) := 1;
begin
  while i<11 loop
     dbms_output.put_line(i);
     i := i+1;
  end loop;  
end;

FOR <循环变量> IN 下限..上限 LOOP 语句; END LOOP;

--输出1到10是个数字:
declare

begin
  for i in 1..10 loop
     dbms_output.put_line(i);  
  end loop;
end;

4、游标(Cursor)

4.1、定义语法

CURSOR <游标名> IS <SELECT 语句> [FOR UPDATE | FOR UPDATE OF 字段];

4.2、游标的操作

    打开游标:OPEN <游标名>; 获取游标的值:FETCH <游标名> INTO 变量1,变量2,变量3,....变量n,; 或 FETCH <游标名> INTO 行对象; 关闭游标:CLOSE <游标名>;

4.3、游标的属性

    %NOTFOUND:如果FETCH语句失败,则该属性为"TRUE",否则为"FALSE"; %FOUND:如果FETCH语句成果,则该属性为"TRUE",否则为"FALSE"; %ROWCOUNT:返回游标当前行的行数; %ISOPEN:如果游标是开的则返回"TRUE",否则为"FALSE";

4.4、游标的使用

--给指定部门员工涨工资
declare
  cursor c2(eno emp.deptno%type)
  is select empno from emp where deptno = eno;
  en emp.empno%type;
begin
  open c2(10);
       loop
            fetch c2 into en;
            exit when c2%notfound;
            update emp set sal = sal - 100 where empno = en;
            commit;
       end loop;
  close c2;  
end;
经验分享 程序员 微信小程序 职场和发展