《Oracle PLSQL实例精解》读书笔记

本文是《Oracle PL/SQL实例精解》的读书笔记,涵盖了PL/SQL的概念、语言基础、SQL在PL/SQL中的应用、条件控制(IF、CASE语句)、迭代控制(LOOP、WHILE、FOR循环)以及过程和函数的使用。文中还分享了如何在实际项目中利用PL/SQL处理复杂的报表导出问题。
摘要由CSDN通过智能技术生成

导读

以下是一部分读书笔记,内容相对零散,希望在用到时会有一点提示作用。

第一章 PL/SQL概念

  1. PL/SQL是Oracle对SQL过程语言的扩展。PL/SQL块的PL/SQL语句由PL/SQL语句处理器(PL/SQL引擎)处理,PL/SQL的SQL语句由SQL语句处理器处理。
  2. PL/SQL块把代表单个逻辑任务的语句组合在一起。PL/SQL块包含三个部分:声明部分、可执行部分和异常处理部分。其中,可执行部分是块中唯一必需的部分。
  3. PL/SQL基础知识:DBMS_OUTPUT.PUT_LINE语句;替代变量功能,使得PL/SQL能够在运行时接受来自用户的输入,变量名一般以and符号(&)或双and符号(&&)字符作为前缀。

第二章 PL/SQL语言基础

  1. PL/SQL变量:必须以一个字母开头,PL/SQL不区分大小写。
  2. PL/SQL保留字:BEGIN、END和SELECT。
  3. 挂靠的数据类型:v_name student.first_name%TYPE
  4. 声明和初始化变量:变量可以使用赋值运算符“:=”来赋值

第三章 在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表达式的值。

个人感悟:本人在做某行的一个报表导出功能,包括导出明细表和统计报表。该功能涉及了两张表,表关系如下:
sys_inbox为A表,其中ID作为主键

sys_typein为B表,其中ID为主键,inboxid为外键,B表的inboxid字段对应A表的id字段

一、明细表:在对应实体类的导出字段的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
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值