oracle PLSQL编程

我不是女神ヾ 2023-06-30 06:54 104阅读 0赞

1 . 什么是pl/sql?

pl/sql是oracle对sql语言的过程化扩展,指在sql命令语言中增加了过程处理语句(如分支,循环等),使sql语言具有过程处理能力。

2 .变量

  1. 普通数据类型(char,varchar2,date,number,boolean,long)
  2. 特殊变量类型(引用类型变量,记录型变量)

普通变量:

  1. 1. 直接复制语句 := 如:v\_name='zhangsan'
  2. 2. 语句赋值,使用select...into ...赋值: (语法 select into 变量)
  3. 【实例】
  4. -- 打印个人信息,包括:姓名,薪水,地址
  5. declare
  6. --姓名
  7. v_name varchar2(20) :='zhangsan';
  8. --薪水
  9. v_sal number;
  10. --地址
  11. v_address varchar2(50);
  12. begin
  13. -- 直接赋值
  14. v_sal:=8000;
  15. --语句赋值
  16. select '贵阳市观山湖区' into v_address from dual;
  17. --打印输出
  18. dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal||',地址:'||v_address);
  19. end;

引用型变量

  1. 变量的类型和长度取决于表中字段的类型和长度
  2. 通过表名.列名%TYPE指定变量的类型和长度,如: v\_name emp.ename%TYPE;

【案例】

  1. -- 引用型变量打印个人信息,包括:姓名,薪水, 查看empename,sal赋值给定义的变量,v_name的长度,类型取决于emp.ename长度
  2. declare
  3. --姓名
  4. v_name emp.ename%TYPE;
  5. --薪水
  6. v_sal emp.sal%TYPE;
  7. begin
  8. --语句赋值
  9. select ename,sal into v_name,v_sal from emp where empno=7839;
  10. --打印输出
  11. dbms_output.put_line('姓名:'||v_name||',薪水:'||v_sal);
  12. end;

引用型的好处:

使用普通变量定义方式,需要知道表中列的类型,而使用引用类型,不需要考虑类的类型和长度,使用%TYPE是非常号的编程风格,因为它使得PL/SQL更加灵活,更加具有对数据库定义的更新


记录型变量

接收表中一整行记录,相当于java中的一个对象

语法:变量名称 表名%ROWTYPE, 例如: v_emp emp%rowtype;

【案例】

  1. -- 记录型变量打印个人信息,包括:姓名,薪水
  2. declare
  3. --记录型变量接收一行
  4. v_emp emp%ROWTYPE;
  5. begin
  6. --语句赋值
  7. select * into v_emp from emp where empno=7839;
  8. --打印输出
  9. dbms_output.put_line('姓名:'||v_emp.ename||',薪水:'||v_emp.sal);
  10. end;

如果有一个表,有100个字段,那么程序如果要使用这100个字段,如果使用引用型变量一个个声明,会特别麻烦,记录型变量可以方便的解决这个问题

错误的使用;

记录型变量只能存储一个完整的行数据


流程控制

语法:

  1. begin
  2. if 条件1 then 执行1
  3. elsif 条件2 then 执行2
  4. else 执行3

end if;

  1. declare
  2. --声明接收的数量
  3. v_count number;
  4. begin
  5. select count(1) into v_count from emp;
  6. if v_count > 20 then
  7. dbms_output.put_line('emp表中的数量超过20条为:' || v_count);
  8. elsif v_count >= 10 then
  9. dbms_output.put_line('emp表中的数量在10-20之间,条为:' || v_count);
  10. else
  11. dbms_output.put_line('emp表中的数量小于10条为:' || v_count);
  12. end if;
  13. end;

循环

在ORACLE中有三种循环方式,这里只介绍一种:loop循环

语法

  1. BEGIN
  2. LOOP
  3. EXIT WHEN 退出循环条件
  4. END LOOP;
  5. END;

【案例】

  1. --循环打印1-10
  2. declare
  3. --声明循环变量
  4. v_num number := 1;
  5. begin
  6. loop
  7. exit when v_num > 10;
  8. dbms_output.put_line(v_num);
  9. --循环变量的自增
  10. v_num := v_num + 1;
  11. end loop;
  12. end;

无参游标

什么是游标?

  1. 用于临时存储一个查询返回的多行数据(结果集,类似于javajdbc连接返回的ResultSet集合),通过遍历游标,可以逐行访问处理该结果集的数据。

游标的使用方式:声明—->打开—->读取—->关闭

1 . 语法

游标声明:

CURSOR 游标名【参数列表】 IS 查询语句;

游标的打开:

OPEN 游标名:

游标的取值:

FETCH 游标名 INTO 变量列表:

游标的关闭:

CLOSE 游标名;

2 . 游标的属性

游标的属性 返回值类型 说明

%ROWCOUNT 整型 获得FETCH语句返回的数据行数

%FOUND 布尔型 最近的FETCH语句返回一行数据则为真,否则为假

%NOTFOUND 布尔型 与%FOUND属性返回值相反

%ISOPEN 布尔型 游标已经打开时值为真,否则为假

3 .创建和使用

  1. --使用游标查询emp表中员工名字,工资并且打印出来
  2. declare
  3. --声明游标
  4. cursor c_emp is
  5. select ename, sal from emp;
  6. --声明变量接收游标的数据
  7. v_name emp.ename%TYPE;
  8. v_sal emp.sal%TYPE;
  9. begin
  10. --打开游标
  11. open c_emp;
  12. --遍历游标
  13. loop
  14. --获取游标中的数据
  15. fetch c_emp
  16. into v_name, v_sal;
  17. --退出循环条件 %NOTFOUND:表示没有数据, 则退出循环
  18. exit when c_emp%NOTFOUND;
  19. --输出
  20. dbms_output.put_line('姓名:' || v_name || ',薪水:' || v_sal);
  21. end loop;
  22. --关闭游标
  23. close c_emp;
  24. end;

有参游标

  1. --使用带参数游标查询emp表中员工名字,工资并且打印出来, 如果说打开游标传入的参数为10,则值查询empno=10的所有员工
  2. declare
  3. --声明游标
  4. cursor c_emp(v_deptno emp.empno%TYPE) is
  5. select ename, sal from emp where deptno = v_deptno;
  6. --声明变量接收游标的数据
  7. v_name emp.ename%TYPE;
  8. v_sal emp.sal%TYPE;
  9. begin
  10. --打开游标
  11. open c_emp(10);
  12. --遍历游标
  13. loop
  14. --获取游标中的数据
  15. fetch c_emp
  16. into v_name, v_sal;
  17. --退出循环条件 %NOTFOUND:表示没有数据, 则退出循环
  18. exit when c_emp%NOTFOUND;
  19. --输出
  20. dbms_output.put_line('姓名:' || v_name || ',薪水:' || v_sal);
  21. end loop;
  22. --关闭游标
  23. close c_emp;
  24. end;

发表评论

表情:
评论列表 (有 0 条评论,104人围观)

还没有评论,来说两句吧...

相关阅读