ORACLE 一些语法及函数

ORACLE 一些语法及函数

语法

  1. 创建序列,常用于插入数据时ID自增
-----SEQ_TRANSPORT_PRODUCT 序列名;
-----从1000开始自增 每次自增1
CREATE SEQUENCE SEQ_TRANSPORT_PRODUCT
minvalue 1
maxvalue 999999999
start WITH 1000
INCREMENT by 1
nocache
nocycle;
  1. 插入数据时,使用序列进行 ID自增
----- SEQ_ENUMERATE.nextval 序列名.nextval 
INSERT INTO ENUMERATE ( "ID", "ENUM_TYPE", "ENUM_VALUE", "ENUM_ORDER", "DESCRIPTION" )
VALUES
	( SEQ_ENUMERATE.nextval, 'TransportProductArea', 'D', NULL, NULL );
  1. 查看数据库连接数
----当前的数据库连接数
SELECT count(*) FROM v$process;
----数据库允许的最大连接数
SELECT value FROM v$parameter where name = 'processes';
----修改最大连接数 300
alter system set processes = 300 scope = spfile;
  1. 从一张表根据条件批量更新数据到另一张表
----先根据条件查出 目的表的id 以及需要的对应字段值
----通过id关联 批量更新
merge into FEE_BILL fee
using (
SELECT fb.ID,substr(wm_concat(DISTINCT ac.BILL_CODE),0,159) billCode 
from FEE_BILL fb 
LEFT JOIN ACCOUNT_BOOK ac on fb.id=ac.FEE_BILL_ID 
LEFT JOIN ORGANIZATION_UNIT org on fb.BALANCE_ORG_UNIT_ID= org.id 
where org.name='JUSDA INDIA SO'
GROUP BY fb.ID) ac
on (fee.id=ac.id)
when matched then
update set fee.BILL_CODES = ac.billCode;

5.创建函数—自定义函数 调用函数的方式使查询SQL执行更快

  • getConsignersByShipmentId 函数名
  • v_id 定义为函数入参
  • CONSIGNORS 定义为函数返回参数
  • cnts 定义为临时变量 主要用于判断查询结果条数是否大于5 大于 则用‘@@…’ 进行拼接
  • 本函数主要功能:根据ID 查询并返回 以‘@@’拼接的名称字符串
  • 函数结果举例:
    查询结果小于5条:公司名称1@@公司名称2@@公司名称3
    查询结果大于5条:公司名称1@@公司名称2@@公司名称3@@公司名称4@@公司名称5@@…
create or replace FUNCTION getConsignersByShipmentId(v_id in number)  RETURN VARCHAR2 as CONSIGNORS VARCHAR2(255);
cnts number :=0;
BEGIN
SELECT
	listagg( pro.FULL_NAME,'@@') WITHIN group(order by tab.id) into CONSIGNORS
FROM
	TMS_WAY_BILL tab 
	LEFT JOIN BUSINESS_ORGANIZATION pro on pro.id=tab.CONSIGNOR_ID
WHERE
	tab.id IN ( SELECT MAX( ab.id ) FROM TMS_WAY_BILL ab WHERE ab.SHIPMENT_ID = v_id GROUP BY ab.CONSIGNOR_ID ) 
	AND ROWNUM < 6 ;
SELECT count(MAX( ab.id )) into cnts FROM TMS_WAY_BILL ab WHERE ab.SHIPMENT_ID =v_id GROUP BY ab.CONSIGNOR_ID;
if (cnts>5) then CONSIGNORS := CONSIGNORS || '@@...' ;end if;
return (CONSIGNORS);
end getConsignersByShipmentId;

----函数使用 : from 后可查询任意表
select getConsignersByShipmentId(12456) from dual;
  1. 创建或更新视图
-----ZG_TRANSPORT_FILE_VIEW 视图名
create or replace view ZG_TRANSPORT_FILE_VIEW as
相关查询语句 ;
  1. 查看数据库中被锁的表,并杀死对应进程,释放表
  • 当测试某些需要很久时间的业务时,及时释放对应进程,加速定位bug、优化代码
----查看数据库中被锁的表
SELECT b.owner,b.object_name,a.session_id,a.locked_mode 
from v$locked_object a,dba_objects b WHERE b.object_id=a.object_id;

----查看被锁的进程
SELECT b.username,b.sid,b.serial#,logon_time 
from v$locked_object a,v$session b where a.session_id=b.sid order by b.logon_time;

----杀死进程 例如 kill session '2841,27159'
alter system kill session 'sid,serial#';

函数

  1. 用于模糊查询 ESCAPE 转义符
  • 在模式中,当转义符(ESCAPE)置于通配符之前时,该通配符就解释为普通字符
----第一个和最后一个%作为通配符,中间的%作为普通字符。
select * from a WHERE name LIKE '%aa/%bb%' ESCAPE '/';
  1. max与group by 结合使用
  • 注意:使用MAX 函数和 GROUP 的时候会有不可预料的数据被SELECT 出来。只能查询max(id),查询其余字段时id会发生错乱(id会是group by分组后的第一条记录的基本信息)
----用于返回 9条以逗号分隔的编码字符串
SELECT ZH_CONCAT(tab.billCode) 
FROM AccountBook tab 
WHERE tab.id in (
SELECT MAX(ab.id) FROM AccountBook ab 
WHERE ab.feeBill.id = :feeBillId GROUP BY ab.billCode
) AND ROWNUM < 10
  1. DECODE 函数
  • 如果条件/列= 列值1,那么返回返回值1;如果条件/列 = 列值2,那么返回返回值2;……以此类推,如果所有条件都不满足,那么返回默认值。
decode(t.sex, '1', '男生', '2', '女生', '其他')----decode中使用decode
decode(sign(sal - 5000),1,'高薪',0,'高薪',-1,decode(sign(sal - 3000), 1, '中等', 0, '中等', -1, '低薪'))
  1. NVL2 函数
  • 若指定列中的值不为空,则返回返回值1,否则返回返回值2。
nvl2(出生地,'已知','未知')
  1. sign 函数
  • 会根据value的值为0,正数,负数,分别返回0,1,-1
sign(t.age - 20)
  1. instr 函数
----返回0 未找到
----返回结果!=0 找到且返回结果为字符串位置
instr( 'abhch', 'a' ) --返回1
  1. to_date 日期格式转换函数
to_date('2010-11-16 10:48:59','YYYY-MM-DD HH:MI:SS')
  1. PIVOT 行转列
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]
FROM WEEK_INCOME
PIVOT
(
    SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])
)TBL ------别名,重要!!!
  1. UNPIVOT 列转行
  2. …持续更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值