《Oracle PLSQL实例精解》读书笔记
导读
以下是一部分读书笔记,内容相对零散,希望在用到时会有一点提示作用。
第一章 PL/SQL概念
- PL/SQL是Oracle对SQL过程语言的扩展。PL/SQL块的PL/SQL语句由PL/SQL语句处理器(PL/SQL引擎)处理,PL/SQL的SQL语句由SQL语句处理器处理。
- PL/SQL块把代表单个逻辑任务的语句组合在一起。PL/SQL块包含三个部分:声明部分、可执行部分和异常处理部分。其中,可执行部分是块中唯一必需的部分。
- PL/SQL基础知识:DBMS_OUTPUT.PUT_LINE语句;替代变量功能,使得PL/SQL能够在运行时接受来自用户的输入,变量名一般以and符号(&)或双and符号(&&)字符作为前缀。
第二章 PL/SQL语言基础
- PL/SQL变量:必须以一个字母开头,PL/SQL不区分大小写。
- PL/SQL保留字:BEGIN、END和SELECT。
- 挂靠的数据类型:v_name student.first_name%TYPE
- 声明和初始化变量:变量可以使用赋值运算符“:=”来赋值
第三章 在PL/SQL中的SQL
1.Select into语法可用于初始化变量(赋值)
2.使用Oracle序列:CURRVAL(返回该序列的当前值)、NEXTVAL(递增序列并返回新值)、
// Oracle序列创建语句:
CREATE SEQUENCE eseq
INCREMENT BY 5
3 .PL/SQL中的事务控制:COMMIT、ROLLBACK和SAVEPOINT
第四章 条件控制:IF语句
一个ELSIF语句可以包含任意数量的ELSIF子句。
第五章 条件控制:CASE语句
1.CASE语句:WHEN和ELSE子句都包含一个可执行语句,每个可执行语句都以分号结束;以保留词END CASE结束。
2.CASE表达式:WHEN和ELSE子句都包含不以分号结束的表达式;以保留字END结束;CASE表达式常被当作一个列使用;CASE表达式返回单个值,因此具有单一的数据类型,故有时会用到TO_CHAR函数。
3.NULLIF函数:NULLIF(表达式1,表达式2),如果表达式1=表达式2,则返回null,如果表达式1不=表达式2,则返回表达式1。
4.COALESCE函数:COALESCE(表达式1,表达式2,…,表达式N),返回表达式列表中第一个非null表达式的值。
个人感悟:本人在做某行的一个报表导出功能,包括导出明细表和统计报表。该功能涉及了两张表,表关系如下:
一、明细表:在对应实体类的导出字段的get方法上添加@ExcelField
private String instmpdtpcd; // 产品类型(分期产品类型) SysInbox
@ExcelField(title="产品类型", align=2, sort=0)
public String getInstmpdtpcd() {
return instmpdtpcd;
}
public void setInstmpdtpcd(String instmpdtpcd) {
this.instmpdtpcd = instmpdtpcd;
}
再将查询到的符合SQL语句的实体类的list,用项目系统自带的报表导出类导出明细表。
/**
* 自定义Excel格式导出
* @param request
* @param response
* @throws IOException
*/
@RequiresPermissions("lch:lch:edit")
@RequestMapping("/export")
public void export(HttpServletRequest request, HttpServletResponse response )throws IOException{
List<ApplyInformation> aList = getList();
HSSFWorkbook wb = lchService.export(aList);
response.setContentType("application/vnd.ms-excel");
String fname = request.getParameter("fname");
String fileName =fname+DateUtils.getDate("yyyyMMddHHmmss");
response.addHeader("Content-Disposition", "attachment;filename="+ java.net.URLEncoder.encode(fileName, "UTF-8")+".xls");
OutputStream outputStream = response.getOutputStream();
wb.write(outputStream);
outputStream.flush();
outputStream.close();
}
private List<ApplyInformation> getList() {
ArrayList<ApplyInformation> infoList = new ArrayList<ApplyInformation>();
List<SysInbox> sysInboxList = sysInboxService.findAllList(new SysInbox());
List<SysTypein> sysTypeinList = sysTypeinService.findAllList(new SysTypein());
for (SysInbox sysInbox : sysInboxList) {
ApplyInformation info = new ApplyInformation();
info.setInstmpdtpcd(sysInbox.ge