Oracle笔记

前言

        本文主要是对ORACLE的操作和优化进行的总结。

函数笔记

1、排序

1)partition by

       row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。

2、最大/小值

1)greatest / least()

       greatest / least函数是用于返回列表中(列表中元素类型相同)最大/小值,与max/min函数不同的是,前者一般操作行,后者一般操作列。greatest / least函数对应的格式如下:

GREATEST(value1, value2, value3, …)

LEAST(value1, value2, value3, …)

3、行转列

1)pivot()

       pivot函数是Oracel非常强大的数据转换工具,可以将行数据转化为列数据,使得数据分析和报表生成变得更加灵活和方便。举例为:

WITH A1 AS
 (SELECT 'A' TY, 2 CN
    FROM DUAL
  UNION ALL
  SELECT 'A' TY, 1 CN
    FROM DUAL
  UNION ALL
  SELECT 'A' TY, 3 CN
    FROM DUAL
  UNION ALL
  SELECT 'B' TH, 2 CN
    FROM DUAL
  UNION ALL
  SELECT 'B' TY, 2 CN
    FROM DUAL)
SELECT * FROM A1 PIVOT (SUM(CN) FOR TY IN('A' "D", 'B' "C"))

       其中SUM可以替换为AVG、COUNT等其他聚合函数。

4、日期相关

1)add_months

       add_months函数是用于获取上/下几个月的同一天,具体格式如下:

SELECT ADD_MONTHS(DATE '2023-11-16', +1) FROM DUAL;

       其中“-”和“+”代表上/下几个月。

2)last_day

       last_day函数是用于获取日期所在月份最后一天的函数,具体格式如下:

SELECT LAST_DAY(DATE'2023-11-16') FROM DUAL;

5、查询字符串

1)INSTR()
instr(sourceString,destString,start,appearPosition)

        sourceString代表源字符串; destString代表要从源字符串中查找的子串;start代表查找的开始位置,这个参数可选的,默认为1,如果是负数的话,则代表从右往左进行查找(值得注意的是数据仍然从左向右计算);appearPosition代表想从源字符中查找出第几次出现的destString,这个参数也是可选的, 默认为1。instr函数返回值为数字,代表查找到的字符串的位置,如果返回0,则代表没有查到。

6、查询表空间使用情况

SELECT a.tablespace_name "表空间名",
       total "表空间大小",
       free "表空间剩余大小",
       (total - free) "表空间使用大小",
       total / (1024 * 1024 * 1024) "表空间大小(G)",
       free / (1024 * 1024 * 1024) "表空间剩余大小(G)",
       (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)",
       round((total - free) / total, 4) * 100 "使用率 %"
  FROM (SELECT tablespace_name, SUM(bytes) free
          FROM dba_free_space
         GROUP BY tablespace_name) a,
       (SELECT tablespace_name, SUM(bytes) total
          FROM dba_data_files
         GROUP BY tablespace_name) b
 WHERE a.tablespace_name = b.tablespace_name

7、long类型转化字符串

        在Oracle中使用已有函数很难实现long类型字段转化为字符串。但是可以通过自定义函数来实现。例如,将DDL语句中字段默认值转化成字符串:

CREATE OR REPLACE FUNCTION DBUSER.LONG_TO_CHAR_TEST240112(U_O IN VARCHAR2,U_T IN VARCHAR2, U_C IN VARCHAR2)
RETURN VARCHAR2
AS
  uVal VARCHAR2(4000);
BEGIN
  SELECT DATA_DEFAULT
    INTO uVal
    FROM all_tab_cols
   WHERE TABLE_NAME = U_T
     AND OWNER = U_O
     AND COLUMN_name = U_C;
  uVal := SUBSTR(uVal, 1, 50);
  RETURN uVal;
END LONG_TO_CHAR;

sql优化

待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值