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;

 


版权声明:本文为yu1755128147原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。