语法
merge into
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)
WHEN MATCHED THEN
[UPDATE sql]
WHEN NOT MATCHED THEN
[INSERT sql]
函数
decode
decode(expression,value1,result1,value2,result2...defaultValue)
如果 expression=value1,则输出 result1;expression=value2,则输出 result2;…如果所有value都没有匹配上,则取默认值 defaultValue
nvl
nvl(string,replace_with)
当第一个参数(string)为空时,返回第二个参数(replace_with);
当第一个参数(string) 不为空时,则返回第一个参数(string)。
LENGTHB
获取字符串的字节数
SELECT LENGTHB('安吉产投2023年非公开公司债券01') FROM dual;
自定义函数
CREATE OR REPLACE FUNCTION 函数名(参数列表)
RETURN 返回值类型
IS
声明部分;
BEGIN
函数体;
RETURN 变量;
END;
维护
连接数
-- 命令查看的是汇总的信息
show parameter processes;
-- 查看最大进程连接数
select value from v$parameter where name ='processes';
-- 修改连接数
alter system set processes = 3000 scope = spfile;
服务启动 / 关闭
sqlplus登陆后:
-- 关闭
shutdown immediate;
-- 启动
startup;
锁
ORA-00054: 资源正忙,要求指定 NOWAIT
解决方案:
1.查看有没有对象被锁
select * from v$locked_object;
2.得到被锁对象的session_id
select session_id from v$locked_object;
3.通过上⾯得到的session_id去取得v$session的sid和serial#(sid是第2步得到的session_id)
SELECT sid, serial#, username, osuser FROM v$session where sid = '259';
4.杀死该进程(ALTER SYSTEM KILL SESSION ‘sid,serial’)
ALTER SYSTEM KILL SESSION '259,3057';
dump 拷贝数据
exp <用户名>/<密码>@<源库实例名> file=<导出文件名>.dmp
imp <用户名>/<密码>@<目标实例名> file=<导出文件名>.dmp
数据类型
varchar
默认语义:
Oracle 可以通过 NLS_LENGTH_SEMANTICS 参数来设置默认的长度语义。如果该参数设置为 CHAR,那么 VARCHAR2(n) 默认表示字符数。如果该参数设置为 BYTE,则默认表示字节数。
可以通过以下查询查看当前会话或数据库的默认设置:
-- 查看当前会话的长度语义
SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_LENGTH_SEMANTICS';
-- 查看数据库级别的长度语义
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_LENGTH_SEMANTICS';
CHAR:表示默认按字符长度计算。
BYTE:表示默认按字节长度计算。