Oracle相关笔记

1、配置路径:app etworkadmin nsnames.ora

orcl36 =

  (

    DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.3.12)(PORT = 1521))

      (CONNECT_DATA =

        (SERVICE_NAME = p4iaceda)

      )

  )

2、DML语言,比如update,delete,insert等修改表中数据的需要commit

3、DDL语言,比如create,drop等改变表结构的,就不需要写commit(因为内部隐藏了commit)

4、分页查询

select c.* from (

    select a.*,row_number() over(order by create_time desc) idx from tablename a where 1=1  order by create_time desc
) c

where c.idx > (pageNum - 1) * pageSize and c.idx <= pageNum * pageSize

5、Oracle连接

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ip)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=p4iaceda)))
jdbc.username=*****
jdbc.password=******

6、TO_CHAR和TO_DATE的用法

TO_CHAR(t.addtime, 'yyyy-mm-dd hh24:mi:ss')
TO_DATE(#{endTime} , 'yyyy-mm-dd hh24:mi:ss')

7、几行变成一行 

select id,
LISTAGG ( to_char(upload_path), ',') WITHIN GROUP(ORDER BY upload_path) AS file_name_list
from ( select distinct id, upload_path from spc_chart_comment_upload )
group by id

解释:按id分组,把upload_path这一列按,隔开拼接在一起,变成新的列file_name_list

8、row_number() over(partition by 列名1 order by 列名2 desc) 

解析:表示根据 列名1 分组,然后在分组内部根据 列名2 排序,而此函数计算的值就表示每组内部排序后的顺序编号,可以用于去重复值

9、decode函数

DECODE(value,if 条件1,then 值1,if 条件2,then 值2,...,else 其他值)

10、lag函数

lag表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL

11、批量插入数据,有则更新,无则插入

<insert id="saveBatch" parameterType="java.util.List" > 
MERGE INTO 表名 T1?
USING (?
<foreach collection="list" item="item" index="index" separator="union" >
SELECT
SYS_GUID() AS CODE,
#{item.createDate,jdbcType=VARCHAR} AS CREATE_DATE,
#{item.createBy,jdbcType=VARCHAR} AS CREATE_BY,
#{item.flagDel,jdbcType=CHAR} AS FLAG_DEL,
#{item.flagDisplay,jdbcType=CHAR} AS FLAG_DISPLAY,
#{item.sort,jdbcType=DECIMAL} AS SORT
FROM DUAL
</foreach>) T2 ?
/*判断是更新还是新记录的条件*/
ON (
T1./*判断数据是否重复的字段*/ = T2./*判断数据是否重复的字段*/
AND T1./*判断数据是否重复的字段*/ = T2./*判断数据是否重复的字段*/
)
/*数据存在则更新*/
WHEN MATCHED THEN
UPDATE SET T./*需要更新的字段*/=T1/*需要更新的字段*/?
/*数据不存在则插入新记录*/
WHEN NOT MATCHED THEN
INSERT
(CODE,CREATE_DATE,CREATE_BY,FLAG_DEL,FLAG_DISPLAY,SORT)
VALUES
(T2.CODE,T2.CREATE_DATE,T2.CREATE_BY,T2.FLAG_DEL,T2.FLAG_DISPLAY,T2.SORT)
</insert>

12、plsql执行sql发生乱码

select * from V$NLS_PARAMETERS;

环境变量中添加
LANG=zh_CN.UTF8
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

13、在oracle中varchar和varchar2有什么区别?

1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集

原文地址:https://www.cnblogs.com/wangsizheng/p/12923002.html