PL/SQL重点\难点

几种常用数据库的JDBC URL:

?对于 Oracle 数据库连接,采用如下形式:

–jdbc:oracle:thin:@localhost:1521:sid

?对于 SQLServer数据库连接,采用如下形式:

–jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

?对于 MYSQL 数据库连接,采用如下形式:

–jdbc:mysql://localhost:3306/sid

数据库事务:完全执行或完全不执行的SQL语句。

JDBC

JDBC作用:①提供操作数据库的统一接口

②屏蔽了硬件的差异化。

JDBC的任务:1.同一个数据库建立连接

2.像数据库发送SQL语句

3.处理数据库返回的请求

JDBC四大步:

1.加载驱动Class.forName("...");

2.建立连接Connection conn = DriverManager.getConnection(url,user,password);

3.SQL语句Statement sqlStatement = conn.createStatement();

4.返回结果


触发器:

  1. --编写一个触发器, 在对 my_emp 记录进行删除的时候, 在 my_emp_bak 表中备份对应的记录;
  2. create or replace trigger delete_emp_trigger
  3. before
  4. delete on my_emp
  5. for each row
  6. begin
  7. insert into my_emp_bak
  8. values(:old.employee_id,:old.salary);
  9. end;

储存过程,储存函数;

要求: 定义一个函数: 获取给定部门的工资总和 和 该部门的员工总数(定义为 OUT 类型的参数).

要求: 部门号定义为参数, 工资总额定义为返回值.

  1. create or replace function sum_sal(dept_id number, total_count out number)
  2. return number
  3. is
  4. cursor sal_cursor is select salary from employees where department_id = dept_id;
  5. v_sum_sal number(8) := 0;
  6. begin
  7. total_count := 0;
  8. for c in sal_cursor loop
  9. v_sum_sal := v_sum_sal + c.salary;
  10. total_count := total_count + 1;
  11. end loop;
  12. --dbms_output.put_line(‘sum salary: ‘ || v_sum_sal);
  13. return v_sum_sal;
  14. end;

用户自定义异常:

  1. declare
  2. e_too_high_exception exception;
  3. v_sal employees.salary%type;
  4. begin
  5. select salary into v_sal from employees where employee_id = 100;
  6. if v_sal > 10000 then raise e_too_high_exception;
  7. end if;
  8. exception
  9. when e_too_high_exception then dbms_output.put_line(‘工资太高了‘);
  10. end;

利用游标和记录类型遍历员工表的记录信息

方法①使用while循环:

  1. declare
  2. --声明记录类型
  3. type emp_record is record(
  4. v_emp_id employees.employee_id%type,
  5. v_emp_sal employees.salary%type
  6. );
  7. --声明一个记录类型的变量
  8. v_emp_record emp_record;
  9. --声明游标
  10. cursor v_emp_cursor is select employee_id,salary from employees where department_id = 80;
  11. begin
  12. --打开游标
  13. open v_emp_cursor;
  14. --提取游标
  15. fetch v_emp_cursor into v_emp_record;
  16. while v_emp_cursor%found loop
  17. dbms_output.put_line(v_emp_record.v_emp_id||‘,‘||v_emp_record.v_emp_sal);
  18. fetch v_emp_cursor into v_emp_record;
  19. end loop;
  20. --关闭游标
  21. close v_emp_cursor;
  22. --exception
  23. end;

方法②使用for循环(简洁):

  1. declare
  2. cursor v_emp_cursor is select employee_id,salary from employees where department_id = 80;
  3. begin
  4. for i in v_emp_cursor loop
  5. dbms_output.put_line(i.employee_id||‘,‘||i.salary);
  6. end loop;
  7. end;
  1. --输出2-100之间的素数;
  2. declare
  3. v_i number(3):=2;
  4. v_j number(3):=2;
  5. v_flag number(1):=1;
  6. begin
  7. while v_i <= 100 loop
  8. while v_j <= sqrt(v_i) loop
  9. if v_i mod v_j = 0 then v_flag := 0;
  10. end if;
  11. v_j := v_j +1;
  12. end loop;
  13. if v_flag = 1 then dbms_output.put_line(v_i);
  14. end if;
  15. v_j := 2 ;
  16. v_i := v_i +1;
  17. v_flag := 1;
  18. end loop;
  19. end;

高级子查询

PL/SQL基本语法

  1. set serveroutput on
  2. /*输出helloworld*/
  3. declare --声明变量、类型。游标
  4. begin --执行体(相当于main()函数)
  5. dbms_output.put_line(‘helloworld‘);
  6. exception --异常处理
  7. end;

数据库权限管理

  1. create user atuser identified by password --创建用户
  2. alter user atuser quota unlimited on users --创建表空间
  3. alter user scott identified by tiger --修改密码
  4. GRANT create session TO scott --授予权限
  5. create role my_role --创建角色
  6. grant create session,create table,create view to my_role --授予角色权限
  7. grant select,update on scott.employees to atuser --授予对象权限

Top-n分析

  1. select rn,employee_id,last_name,salary
  2. from( select rownum rn,employee_id,last_name,salary
  3. from(
  4. select employee_id,last_name,salary
  5. from employees
  6. order by salary desc)
  7. )
  8. where rn<=50 and rn>40

创建序列(sequence)

  1. create sequence empseq
  2. increment by 10 --每次增长10个;
  3. start with 10 --从10增长;
  4. maxvalue 100 -- 提供的最大值;
  5. cycle --需要循环;
  6. nocache --不需要缓存登录;
  1. 选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id和雇用时间;

null

时间: 2024-10-10 08:06:33

PL/SQL重点\难点的相关文章

PL/SQL教程(转)

课程 一 PL/SQL 基本查询与排序 本课重点:   1.写SELECT语句进行数据库查询   2.进行数学运算   3.处理空值   4.使用别名ALIASES   5.连接列   6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS   7.ORDER BY进行排序输出.   8.使用WHERE 字段. 一.写SQL 命令:     不区分大小写.     SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.     最后以:或 / 结束语句.     也可以用RUN来执行语

[Oracle系列整理01]PL/SQL 基本查询与排序

本课重点:    1.写SELECT语句进行数据库查询    2.进行数学运算    3.处理空值    4.使用别名ALIASES    5.连接列    6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS    7.ORDER BY进行排序输出.    8.使用WHERE 字段. 一.写SQL 命令:      不区分大小写.      SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.      最后以:或 / 结束语句.      也可以用RUN来执行语句 二.例1:

PL/SQL 总结

一..基本语法 PL/SQL的结构块如下: declare --声明变量.类型.游标 begin --程序执行的部分,类似main方法 exception --针对异常,提供如何处理的机制 --when ....then.... end; 注意,没有用的部分,就 不需要写,比如程序的确是没有异常要处理,那么exception就不写 建议的命名方法: 标识符  命名规则 例子 程序变量  V_name V_name 程序常量  C_Name C_company_name 游标变量        

PL/SQL数据库开发那点事

PL/SQL数据库开发那点事-->编程,存储程序 在SQL*plus 中编写PL/SQL程序,并在SQL*plus 中执行它, PL/SQL块的代码就存放在SQL*plus的缓冲区中.如果在SQL*plus 中执行了其他的SQL语句或PL/SQL块,缓冲区中就会存放新的代码,原来的PL/SQL块就会被从缓冲区中清除出去.这种没有名称只是临时存放在缓冲区中的PL/SQL块叫做匿名块.匿名块就是没有名字的PL/SQL块,它仅存放在缓冲区中,只能在当前SQL*plus环境中执行.如果希望PL/SQL块

PL/SQL异常处理方法

1:什么是异常处理: PL/SQL提供一个功能去处理异常,在PL/SQL块中叫做异常处理,使用异常处理我们能够测试代码和避免异常退出. PL/SQL异常信息包含三个部分: 1:异常类型 2:错误代码 3:错误信息 通过处理异常我们能够确保PL/SQL块不突然的异常退出. 2:异常处理的结构 DECLARE Declaration section BEGIN Exception section EXCEPTION WHEN ex_name1 THEN -Error handling stateme

百倍性能的PL/SQL优化案例(r11笔记第13天)

我相信你是被百倍性能的字样吸引了,不过我所想侧重的是优化的思路,这个比优化技巧更重要,而结果嘛,其实我不希望说成是百倍提升,""自黑""一下. 有一个真实想法和大家讨论一下,就是一个SQL语句如果原本运行20秒,优化到了1秒,性能提升该说是20倍还是提高了95%.当然还见过一种说法,一条SQL语句每次运行20秒,每天运行100次,优化后每次运行1秒,运行还是100次,那么性能提升是说成优化累计时间为100*20-100=1990秒? 好了,我们来看看PL/SQL的优

Oracle实战笔记(第六天)之PL/SQL基础

一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL可以用来编写存储过程.存储函数.触发器等等. PL/SQL是结构化SQL,就是在标准SQL中加入了IF...ELSE... For....等控制过程的SQL. 2.学习必要性 提高程序的运行性能传统的使用程序操作数据库的方式需要获得connection

安装PL/SQL Developer遇到的问题

前提:已经成功安装好Oracle数据库 安装环境:win7 64位 Oracle安装版本11g 64位 问题1)Oracle自带的sqldeveloper用不了 让我输入java.exe的完整路径,然后报警告 WARNING: Could not find jvm.cfg! in 'C:\Program Files\Java\jdk1.8.0_151\jre\lib\jvm.cfg' 其他人的经验是安装的sqldeveloper是32位的而jdk是64位的所以不行 解决方案)下64位的sqlde

PL/SQL developer 连接oracle数据库报错“initialization error could not load oci.dll”

声明:PL/SQL 版本:PL/SQL Developer 9.0.6 (http://files.allroundautomations.com/plsqldev906.exe) 报错提示如图: 原因:PL/SQL只对32位OS进行支持,解决方法是额外加载一个oci.dll文件 解决办法:1.下载OCI.DLL相关库文件.地址: (需注册Oracle账号) http://www.oracle.com/technetwork/topics/winsoft-085727.html ----->