一、Sql语句
1.1 查询语句
- order排序(其中含有null)
查询雇员的奖金并做降序排序(关于nulls first/nulls last)
select ename, comm from emp order by comm desc nulls last;
其中null的数据排序默认为
nulls first
排在前面
二、创建自动增长序列
-- 创建自动增长序列
CREATE SEQUENCE INCREASE_SEQUENCE_A
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
-- 创建触发器
CREATE TRIGGER A BEFORE
INSERT ON A FOR EACH ROW WHEN(NEW.SEQNO IS NULL)
BEGIN
SELECT INCREASE_SEQUENCE_A.NEXTVAL INTO:NEW.SEQNO FROM DUAL;
END;
INSERT INTO A(AGENTCODE,ASSESSTYPE,Yearmonth,Actualcheckdays,Managecom) VALUES('G1241213','01','202011',12.12,'860012')
INSERT INTO A(AGENTCODE,ASSESSTYPE,Yearmonth,Actualcheckdays,Managecom) VALUES('G1241213','01','202011',12.12,'860012')
三、解决查询时for update PL/SQL执行很久无结果问题
在执行select * from laagent for update
这条sql时, 会执行很久也没有反应, 经过Google, 找到原因是
由于在PL/SQL执行update时没有commit, Oracle将这条记录锁住了
原文链接: oracle执行update时卡死问题的解决办法
可以通过以下办法解决:
先查询锁定记录
Sql代码
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;
然后删除锁定记录
Sql代码
-- ALTER system KILL session 'SID,serial#';
-- 其中 SID填写上文中查到的SID数值, serial#填写 serial#列的数值如:
ALTER system KILL session '214,23456';
Oracle 中for update和for update nowait的区别
- 解决锁表第二个方法
--查哪些表锁了
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;
--- 2 ,查看是哪个session引起的
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;
--- 3 ,杀掉对应进程
alter system kill session '102,2042';
alter system kill session 'sid,serial#';
四、插入数据可重复操作的脚本
插入数据时, 如果该表已经执行过一遍脚本, 那么重复执行将会报错, 所以需要在执行脚本之前先删除将要插入的相关数据.
如下实例:
DELETE FROM LDSysVar where SYSVAR='CharFilterRegexpEn';
DELETE FROM LDSysVar where SYSVAR='CharFilterRegexpCn';
DELETE FROM LDSysVar where SYSVAR='CharFilterRegexpSBC';
insert into LDSysVar (SYSVAR, SYSVARTYPE, SYSVARVALUE)
values ('CharFilterRegexpEn', null, '/[`~@#$%\^&*+=|"\\{}]/im');
insert into LDSysVar (SYSVAR, SYSVARTYPE, SYSVARVALUE)
values ('CharFilterRegexpCn', null, '/[·¥——”《》【】…]/im');
insert into LDSysVar (SYSVAR, SYSVARTYPE, SYSVARVALUE)
values ('CharFilterRegexpSBC', null, '/[<>?:"{}|+_)(*&^%$#@!~`-=[]\';/.,]/im');
update lacomcasemultipliersetting
set enddate=date'2020-12-31'
where serialno='S000000040';
commit;
五、给表中添加主键
alter table 表名
add constraint 主键名称(一般主键名称为”PK_”开头) primary key(要设为主键的列名);
-- 例:
alter table ldsysvar
add constraint PK_SysVar primary key (SYSVAR);
-- 删除添加索引
drop index idx_sysvar;
create index idx_sysvar on ldsysvar(SYSVAR);
六、SQL中的函數
6.1 nvl函數和nvl2函數
nvl函数
nvl函数基本语法为nvl(E1,E2),意思是E1为null就返回E2,不为null就返回E1。
nvl2函数
nvl2函数的是nvl函数的拓展,基本语法为nvl2(E1,E2,E3),意思是E1为null,就返回E3,不为null就返回E2。
NULLIF函数
NULLIF(E1,E2)函数的作用是如果E1和E2相等则返回空(NULL),否则返回E1。
abs函数
表达式:abs(-100)
含义:取绝对值