最近因为项目转运维,需要把表结构搞成Excel文档交给运维同事。
表又非常多也不能一张一张查数据库结构导出来,只能想办法批量导出来,于是就网上搜索脚本,再自己改了改从PD文件里面导出来,就很方便了。
操作如下:
1、用power designer打开PD物理设计文档
2、按快捷键ctrl + shift + x 调出脚本执行窗口
3、把脚本复制进去,点击RUN,然后在对应的路径下找到Excel文档就行了
脚本如下(里面有”保存到文件“的文件路径,记得修改):
最近因为项目转运维,需要把表结构搞成Excel文档交给运维同事。
表又非常多也不能一张一张查数据库结构导出来,只能想办法批量导出来,于是就网上搜索脚本,再自己改了改从PD文件里面导出来,就很方便了。
操作如下:
1、用power designer打开PD物理设计文档
2、按快捷键ctrl + shift + x 调出脚本执行窗口
3、把脚本复制进去,点击RUN,然后在对应的路径下找到Excel文档就行了
脚本如下(里面有”保存到文件“的文件路径,记得修改):
DES-非机密数据加密标准,可用于兼容旧系统,新系统不建议使用
3DES-DES的加强版,DES到AES之间的过渡算法
AES-高级加密标准,替代DES
RSA-非对称加密解密算法,多用于签名验证,加密解决速度慢,不建议用于大量数据的加密解密
目前跨系统间的加密数据通讯,一般是RSA与AES两种加密算法结合使用,RSA用于对AES密钥进行加密解密,AES用于对交易数据进行加密解密
使用new创建线程后,可以通过Thread类的方法来设置线程的各种属性
线程进入阻塞状态:调用sleep方法,等待同步锁,调用了wait方法
终止线程的方法:执行完正常退出、使用stop方法强制退出、使用interrupt方法强制中断退出
Java实现方法,1:通过继承Thread类实现多线程,2:通过实现Runnable接口,再使用Thread实现多线程
package pkg1; public class ThreadDemo { public static void main(String[] args) { System.out.println("———————————————demo 1—————————————————"); MyThread1 t1 = new MyThread1(); t1.setName("t1");// 设置线程名称 MyThread1 t2 = new MyThread1(); t2.setName("t2");// 设置线程名称 t1.start();// 线程启动 t2.start();// 线程启动 try { t1.join();// 主线程等待新线程完成再继续往下执行 t2.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("demo 1 结束"); System.out.println("———————————————demo 2—————————————————"); MyRunnable1 r1=new MyRunnable1(); MyRunnable1 r2=new MyRunnable1(); Thread t3=new Thread(r1,"r1"); Thread t4=new Thread(r2,"r2"); t3.start(); t4.start(); try { t3.join(); } catch (InterruptedException e) { e.printStackTrace(); } try { t4.join(); } catch (InterruptedException e) { e.printStackTrace(); } } } //继承Thread类,直接启动线程 class MyThread1 extends Thread { public MyThread1() {}//无参构造函数 public MyThread1(String name) {//有参构造函数,参数为:线程名称 super(name); } @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(this.getName() + " " + i); } super.run(); } } //类实现Runnable接口,再用Thread线程启动执行 //一般多使用此方式实现多线程,方便实现资源共享(多线程使用同一对象,例如:多窗口卖同一车票) class MyRunnable1 implements Runnable{ @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } } }
需求:SUM统计总数之后再列转行。
查询结果:
原始版本SQL:
select nvl(sum(OVERTIME_REPAIR ),0) CNT, '维修超时' CELL from ( SELECT SUM(CASE WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN 1 ELSE 0 END) AS OVERTIME_DELIVERY, /*交车超时*/ SUM(CASE WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN 1 ELSE 0 END) AS NORMAL_DELIVERY, /*正常交车*/ SUM(CASE WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN 1 ELSE 0 END) OVERTIME_CLEAN, /*洗车超时*/ SUM(CASE WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN 1 ELSE 0 END) OVERTIME_CHECK, /*质检超时*/ SUM(CASE WHEN ROUND((W.REPAIR_FINISH_DATE - (SELECT MAX(PLAN_END_DATE) FROM T_TEMP_MY_BU_WORK_ORDER_D WI WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN 1 ELSE 0 END) OVERTIME_REPAIR /*维修超时*/ FROM T_TEMP_MY_BU_REPAIR_ORDER A LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID WHERE A.IS_ENABLE = '1' AND A.BILL_TYPE = '31803' AND A.REPAIR_ORDER_STATUS = '31011' ) UNION ALL select nvl(sum(OVERTIME_CLEAN),0) CNT, '洗车超时' SELL from ( SELECT SUM(CASE WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN 1 ELSE 0 END) AS OVERTIME_DELIVERY, /*交车超时*/ SUM(CASE WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN 1 ELSE 0 END) AS NORMAL_DELIVERY, /*正常交车*/ SUM(CASE WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN 1 ELSE 0 END) OVERTIME_CLEAN, /*洗车超时*/ SUM(CASE WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN 1 ELSE 0 END) OVERTIME_CHECK, /*质检超时*/ SUM(CASE WHEN ROUND((W.REPAIR_FINISH_DATE - (SELECT MAX(PLAN_END_DATE) FROM T_TEMP_MY_BU_WORK_ORDER_D WI WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN 1 ELSE 0 END) OVERTIME_REPAIR /*维修超时*/ FROM T_TEMP_MY_BU_REPAIR_ORDER A LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID WHERE A.IS_ENABLE = '1' AND A.BILL_TYPE = '31803' AND A.REPAIR_ORDER_STATUS = '31011' ) UNION ALL select nvl(sum(OVERTIME_CHECK),0) CNT, '质检超时' SELL from ( SELECT SUM(CASE WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) > 0 THEN 1 ELSE 0 END) AS OVERTIME_DELIVERY, /*交车超时*/ SUM(CASE WHEN ROUND((A.DELIVERY_DATE - A.PRE_GET_DATE) * 24 * 60) <= 0 THEN 1 ELSE 0 END) AS NORMAL_DELIVERY, /*正常交车*/ SUM(CASE WHEN (ROUND((W.CLEAN_FINISH_DATE - W.QUALITY_FINISH_DATE) * 24 * 60) > 20) THEN 1 ELSE 0 END) OVERTIME_CLEAN, /*洗车超时*/ SUM(CASE WHEN (ROUND((W.QUALITY_FINISH_DATE - A.PRE_GET_DATE) * 24 * 60) > 0) THEN 1 ELSE 0 END) OVERTIME_CHECK, /*质检超时*/ SUM(CASE WHEN ROUND((W.REPAIR_FINISH_DATE - (SELECT MAX(PLAN_END_DATE) FROM T_TEMP_MY_BU_WORK_ORDER_D WI WHERE WI.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID)) * 24 * 60) > 0 THEN 1 ELSE 0 END) OVERTIME_REPAIR /*维修超时*/ FROM T_TEMP_MY_BU_REPAIR_ORDER A LEFT JOIN T_TEMP_MY_BU_WORK_ORDER W ON W.REPAIR_ORDER_ID = A.REPAIR_ORDER_ID JOIN T_TEMP_MY_ORG_DLR DLR ON DLR.DLR_ID = A.DLR_ID WHERE A.IS_ENABLE = '1' AND A.BILL_TYPE = '31803' AND A.REPAIR_ORDER_STATUS = '31011' )
一般情况下,如果类型这种:
select * from A left join B ON A.con_id=B.con_id;
假设A中有1条数据,B中与A关联的数据有2条或以上,查出的结果是有2条或以上,有些情况我们需要以A表为准,B表只查想要的一条记录
Java高级-Java反射机制
1.反射概述
什么是反射?
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象方法的功能称为Java语言的反射机制。
之前有安装oracle11g,但都是装好了不会用,今天试了下能安装成功、配置好、然后可以用客户端连接使用,这里肯定要查很多的相关资料,不然也弄不好。
下面简单记录一步骤:
1、下载
下载文件一共有两部分:
https://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip
背景:
公司换邮件服务器之后,收到邮件后桌面没有弹出提醒了,有时候半天或者一天没看邮件,在没提醒的情况下,很多重要的信息错过了或者处理不及时,比如会议预约邮件、禅道提醒邮件、JIRA提醒邮件等等,摸索了一段时间终于把邮件到达桌面提醒重新弄出来了,下面分享一下设置步骤,挺简单。
1、管理规则和通知
查询Oracle表的字段SQL如下:
select
ut.TABLE_NAME,--表名称
ut.COLUMN_NAME,--字段名称
uc.comments,--字段注释
ut.DATA_TYPE,--字典类型