Oracle篇 日常使用笔记

Oracle篇 日常使用笔记

1、带条件匹配更新,无主键

update pay_request a 
   set PAYEE_ACCOUNT_NO =
       (select 收款人账户
          from MY_COLLECTION b
         where (pay_amount || remark) = (to_number(导入金额) || 支付摘要))#通过合并字段来形成唯一字段达到主键的效果
 where is_valid = '1'
   and is_salary_id = '2';

 2、PLSQL Developer 登录连接无响应 打开tnsnames.ora文件
 cmd 然后tnsping 实例名来测试是否成功

 XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = **localhost**)(PORT = 1521))#本地连接不上,把HOST出改为localhostb,不使用主机名。
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )
CZDZH =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =IP地址)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 实例名)
    )
  )#远程连接不上新建一个远程配置,和本地的差不多,只需要修改HOST和SERVICE_NAME



Oracle 恢复数据文件(IMP方式):
imp 用户名称/1(密码)@orcl(数据库实例名称)  file=dmp(需要恢复的文件绝对路径) log=log(日志需要存放的绝对路径)  fromuser=导出的Oracle用户名称 touser=导入的Oracle用户名称
--如果没有日志不知道导出的用户是谁,可以使用 full=y



Oracle 恢复数据文件(IMPDP方式):

create directory GGYTH as '文件目录绝对路径'; --创建需要恢复的文件目录的逻辑目录

grant read,write on directory GGYTH to "用户名称" --将权该目录权限授予用户

create user "用户名称" identified by 1
default tablespace MOF  
temporary tablespace  TEMP; 
grant connect,resource,dba to "用户名称" --创建用户

IMPDP 用户名称/1(密码)@orcl(数据库实例名称) directory=GGYTH (逻辑目录名称)DUMPFILE=DMP(恢复的文件名称)  LOGFILE=.LOG(日志文件名称)  table_exists_action=replace REMAP_SCHEMA=(导出用户名称):(导入用户名称)
--table_exists_action(参数详解):1)skip:默认操作;2)replace:先drop表,然后创建表,最后插入数据;3)append:在原来数据的基础上增加数据;4)truncate:先truncate,然后再插入数据
--impdp与imp不同的是不使用绝对路径,把相应文件的绝对路径创建成一个逻辑目录并授权给用户
--如何区分需要恢复的文件使用imp或者impdp,可以查看日志,有导出表的就是imp,有处理对象的是impdp



表空间不够用了怎么办:
SELECT a.tablespace_name "MOF", 
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
--查询各个表空间已使用与未使用的1)给表空间增加数据文件

ALTER TABLESPACE app_data ADD DATAFILE  
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M;2)新增数据文件,并且允许数据文件自动增长

ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;3)允许已存在的数据文件自动增长

ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'  
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;4)手工改变已存在数据文件的大小

ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'  
RESIZE 100M; 
--------------------- 

--创建表空间
/*分为四步 */
/*第1步:创建临时表空间 */
create temporary tablespace emaoyi_temp 
tempfile 'D:\app\Administrator\product\11.2.0\dbhome_1\database\emaoyi_temp.dbf' 
size 10m 
autoextend on 
next 10m maxsize 20480m 
extent management local; 

/*第2步:创建数据表空间 */
create tablespace emaoyi 
logging 
datafile 'D:\app\Administrator\product\11.2.0\dbhome_1\database\emaoyi.dbf' 
size 10m 
autoextend on 
next 10m maxsize 20480m 
extent management local; 

2020/08/05
wm_concat函数没有,脚本执行不了
sys 登录

1.解锁sys用户

alter user sys account unlock;

2.创建包,包体,函数

以sys用户登录数据库,执行下面的命令

CREATE OR REPLACE TYPE WM_CONCAT_IMPL AS OBJECT
(
CURR_STR VARCHAR2(32767), 
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
P1 IN VARCHAR2) RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,
SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER
);

定义类型body:

CREATE OR REPLACE TYPE BODY WM_CONCAT_IMPL
IS
STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
SCTX := WM_CONCAT_IMPL(NULL) ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL,
P1 IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
IF(CURR_STR IS NOT NULL) THEN
CURR_STR := CURR_STR || ',' || P1;
ELSE
CURR_STR := P1;
END IF;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL,
RETURNVALUE OUT VARCHAR2,
FLAGS IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURNVALUE := CURR_STR ;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL,
SCTX2 IN WM_CONCAT_IMPL)
RETURN NUMBER
IS
BEGIN
IF(SCTX2.CURR_STR IS NOT NULL) THEN
SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR ;
END IF;
RETURN ODCICONST.SUCCESS;
END;
END;

自定义函数:自定义行变列函数:

CREATE OR REPLACE FUNCTION wm_concat(P1 VARCHAR2)
 
RETURN VARCHAR2 AGGREGATE USING WM_CONCAT_IMPL ;

3.创建同义词并授权

create public synonym WM_CONCAT_IMPL for sys.WM_CONCAT_IMPL
create public synonym wm_concat for sys.wm_concat
grant execute on WM_CONCAT_IMPL to public
grant execute on wm_concat to public

imp和impdp导出

exp 数据库用户名/密码@实例名称 file=dmp文件保存路径log=日志保存路径  owner=(导出多个相同库,用户名用分号分开,例如用户1,用户2,用户2)

expdp一样要给用户授权逻辑目录的权限

expdp LXDZH2020/1@CZDZH DIRECTORY=LXZF DUMPFILE=LXDZH2020.dmp LOGFILE=LXDZH2020.log FULL=y 

select row_number() over(partition by code order by code desc ) rn,t.* from gap_ele_bank t
sum(pr.pay_amount) over(partition by pcv.clear_bank_code ) 总额度

在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。
rank()与dense_rank()的区别
rank()和dense_rank()都可以将并列第一名的都查找出来;但rank()是跳跃排序,有两个第一名时接下来是第三名;而dense_rank()是非跳跃排序,有两个第一名时接下来是第二名。


版权声明:本文为qq_39304896原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。