四时宝库

程序员的知识宝库

MySQL和Oracle行值表达式对比(r11笔记第74天)

行值表达式也叫作行值构造器,在很多SQL使用场景中会看到它的身影,一般是通过in的方式出现,但是在MySQL和Oracle有什么不同之处呢。我们做几个简单的测试来说明一下。

MySQL 5.6,5.7版本的差别

首先我们看一下MySQL 5.6, 5.7版本中的差别,在这一方面还是值得说道说道的。

python实现 mysql 表批量导成oracle建表以及索引语句

当我们需要进行异构数据库迁移时,对于建表语句就有点头疼了,mysql迁移到oracle,我们可以通过导出mysql 建表语句后,使用powerdesigner来进行mysql DDL语句到ORACLE的转换,但步骤麻烦不说,mysql常用的navicat批量导出表结构不是很友好,pd的转换也有些不可控。下面我们通过python脚本来进行导出转换。

关于Oracle 数据库物化视图和物化视图日志总结

概述

抽空总结一下Oracle 物化视图和物化视图日志的一些概念和相关命令,仅供参考。


一、相关概念

物化视图是将查询预先定义在结构中,并手动或者定期刷新将结果存储在物化视图段中,也就是说跟普通视图不同,它是需要存储空间的,从而不需要重新或者反复的执行sql语句,支持增量刷新,快速获取结果,提高数据获取的效率。

一文看懂Oracle 数据库物化视图和物化视图日志

概述

抽空总结一下Oracle 物化视图和物化视图日志的一些概念和相关命令,仅供参考。


一、相关概念

物化视图是将查询预先定义在结构中,并手动或者定期刷新将结果存储在物化视图段中,也就是说跟普通视图不同,它是需要存储空间的,从而不需要重新或者反复的执行sql语句,支持增量刷新,快速获取结果,提高数据获取的效率。

SQL语法:按照某一字段分组,并合并分组结果。

按照某字段进行分组,并把其中一列的值合并显示在一个字段中。这里用一个实例说明,主要语法为:listagg within group

1、建表 \ 插入 测试 数据

一起玩转oracle(6)——常用的SQL(sql oracle 是干嘛的?)

常用的SQL:相对简单,今天的东西就不进行截图啦

(1)as给列起一个别名:select username as 用户名 from t_user;(这里的as关键字可以省略)

(2)distinct去掉重复的行:select distinct username from t_user;

MySQL 十大常用字符串函数(mysql字符串类型有哪些)

以下文章来源于CSDN ,作者不剪发的Tony老师

「Oracle」分区及子分区如何扩展?

之前在工作中经常遇到添加分区子分区的情况,而且很多子分区没有通过模版创建,自定义创建的,不方便维护和扩展。

所以写了个统一的存储过程进行处理,在这里分享一下。

create or replace procedure p_test_gy(v_datacycle_id varchar2, --添加分区的上限值
 v_entity_owner varchar2,
 v_entity_name varchar2,
 v_retcode out varchar2,
 v_retinfo out varchar2) is
 
 v_cnt1 number; --实体检测
 v_cnt2 number; --分区是否存在检测
 v_cnt3 number; --模板子分区是否存在检测
 v_part_type varchar2(30); --分区类型
 v_subpart_type varchar2(30); --子分区类型
 v_part_value_max varchar2(30); --分区最大值
 v_part_style varchar2(30); --分区命名格式
 v_part_value varchar2(30); --分区值变量
 v_sql varchar2(4000); --动态执行SQL
 v_sub_template varchar2(4000); --调整模板子分区
 v_high_value long; --子分区值变量
 v_subpart_value varchar2(30); --子分区值变量
 
 /*v_pkg
 v_procname */
begin
 /*--插入日志部分
 p_insert_log(v_acct_month, v_pkg, v_procname, v_prov_id, sysdate, '');*/
 --检测输入参数是否有误
 select count(0)
 into v_cnt1
 from sys.dba_objects
 where owner = v_entity_owner
 and object_name = v_entity_name
 and object_type = 'TABLE';
 if v_cnt1 = 0 then
 v_retcode := 'FAIL';
 v_retinfo := '目标表信息输入有误';
 else
 --检测目标表有无分区
 select count(0)
 into v_cnt2
 from sys.dba_part_tables t
 where t.owner = v_entity_owner
 and t.table_name = v_entity_name;
 if v_cnt2 = 0 then
 v_retcode := 'SUCCESS';
 v_retinfo := '目标表无分区';
 else
 --检测分区是否已存在
 select regexp_replace(max(t.partition_name), '[^0-9]', ''),
 regexp_replace(max(t.partition_name), '[0-9]', '')
 into v_part_value_max, v_part_style
 from sys.dba_tab_partitions t
 where t.table_owner = v_entity_owner
 and t.table_name = v_entity_name;
 select partitioning_type, subpartitioning_type
 into v_part_type, v_subpart_type
 from sys.dba_part_tables t
 where t.owner = v_entity_owner
 and t.table_name = v_entity_name;
 --分区已存在&分区是LIST/HASH分区
 if v_part_value_max >= v_datacycle_id OR v_part_type <> 'RANGE' then
 v_retcode := 'SUCCESS';
 v_retinfo := '分区已存在';
 else
 select count(0)
 into v_cnt3
 from sys.dba_subpartition_templates
 where table_name = v_entity_name
 and user_name = v_entity_owner;
 --无子分区&有子分区且为模板子分区
 if v_part_type = 'RANGE' AND
 ((v_subpart_type = 'LIST' AND v_cnt3 <> 0) OR
 nvl(v_subpart_type, '**') = 'NONE') then
 v_part_value := to_char(add_months(to_date(v_part_value_max,
 'yyyymm'),
 1),
 'yyyymm');
 while v_part_value <= v_datacycle_id loop
 v_sql := 'alter table ' || v_entity_owner || '.' ||
 v_entity_name || ' add partition ' || v_part_style ||
 v_part_value || '
 values less than (''' ||
 to_char(add_months(to_date(v_part_value, 'yyyymm'), 1),
 'yyyymm') || ''') tablespace ';
 --日志检索 
 /*dbms_output.put_line(v_sql);*/
 --需要分配分区(或者建表设置默认表空间)
 execute immediate v_sql;
 v_part_value := to_char(add_months(to_date(v_part_value,
 'yyyymm'),
 1),
 'yyyymm');
 end loop;
 v_retcode := 'SUCCESS';
 v_retinfo := '成功';
 else
 /*--顺序不太好看
 select
 rtrim(wmsys.wm_concat(' subpartition ' || substr(subpartition_name,length(partition_name)+2) || ' values ( ''' ||
 regexp_replace(substr(subpartition_name, length(partition_name)+2),'[^0-9]','') || ''' ) '),',') into v_sub_template
 from sys.dba_tab_subpartitions
 where table_owner = v_entity_owner
 and partition_name = v_part_value_max
 and table_name = v_entity_name;*/
 --有子分区且非模板子分区
 v_sub_template := 'alter table ' || v_entity_owner || '.' ||
 v_entity_name || '
set subpartition template(';
--''' ||regexp_replace(substr(subpartition_name,length(partition_name) + 2),'[^0-9]','') || '''
 for t in (select /*+parallel(sub,4)*/*
 from sys.dba_tab_subpartitions sub
 where table_owner = v_entity_owner
 and partition_name = v_part_style || v_part_value_max
 and table_name = v_entity_name
 order by length(regexp_replace(subpartition_name, '[0-9]', '')),subpartition_name) loop
 v_high_value:=t.high_value;
 v_subpart_value:=substr(v_high_value,1,4000);
 /*if v_subpart_value= 'DEFAULT' then
 v_subpart_value:='''DEFAULT''';
 end if;*/
 v_sub_template := v_sub_template ||' subpartition ' ||
 substr(t.subpartition_name,
 length(t.partition_name) + 2) ||
 ' values ( '||v_subpart_value||' ) ,' ;
 end loop;
 --日志检索
 dbms_output.put_line(rtrim(v_sub_template, ',') || ')');
 insert into dm_check_log
 select rtrim(v_sub_template, ',') || ')',
 v_datacycle_id,
 sysdate
 from dual;
 commit;
 execute immediate rtrim(v_sub_template, ',') || ')';
 v_part_value := to_char(add_months(to_date(v_part_value_max,
 'yyyymm'),
 1),
 'yyyymm');
 while v_part_value <= v_datacycle_id loop
 v_sql := 'alter table ' || v_entity_owner || '.' ||
 v_entity_name || ' add partition ' || v_part_style ||
 v_part_value || '
 values less than (''' ||
 to_char(add_months(to_date(v_part_value, 'yyyymm'), 1),
 'yyyymm') || ''') tablespace ';
 /*dbms_output.put_line(v_sql);*/
 execute immediate v_sql;
 --需要分配分区(或者建表设置默认表空间)
 v_part_value := to_char(add_months(to_date(v_part_value,
 'yyyymm'),
 1),
 'yyyymm');
 end loop;
 v_retcode := 'SUCCESS';
 v_retinfo := '成功';
 end if;
 end if;
 end if;
 end if;
end;

Mysql 常用基本命令总结(mysql命令详解)

背景介绍

作为测试人员,基础的sql命令是必须要掌握的,今天呢就给大家整理了一下常用的mysql命令,以及mysql命令和oracle命令的一些对比,如果有不足,欢迎大家补充。

基础命令

启动mysql服务:net start mysql

停止mysql服务:net stop mysql

oracle 如何将显示结果合并成一列



select * from KA09;
select wmsys.wm_concat(AKA034) from KA09;
<< < 1 2 3 4 5 6 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接