
Oracle
麦田
生命本来就是一束耀眼的花火...
展开
-
Oracle查看版本号
SELECT * FROM V$VERSION;SELECT * FROM PRODUCT_COMPONENT_VERSION原创 2020-06-30 23:15:56 · 1001 阅读 · 0 评论 -
Oracle某个字段去重
测试数据如下例子1:要求对NAME相同的值只取一条即可select * from test t where t.rowid in (select max(rowid) from test group by name)例子1:要求对NAME相同的值只取一条且AGE值最大select * from test t where (t.name, t.age) in (select ...原创 2020-03-22 21:37:50 · 2342 阅读 · 0 评论 -
Oracle查看执行计划
通过执行计划查看SQL语句是否使用了索引1、生成执行计划explain plan for sql语句2、查看执行计划结果select plan_table_output from TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));如上图所示:TABLE ACCESS FULL为全表扫描几种常见的索引类型扫描:一、index unique sca...原创 2020-03-20 20:56:36 · 1255 阅读 · 0 评论 -
修改Oracle系统管理员密码
找到PWDorcl.ora文件,对应路径 D:\oracle\product\10.2.0\db_2\database打开CMD,以管理员身份运行,进入到PWDorcl.ora文件目录执行:orapwd file=PWDorcl.ora password=mypassword entries=5 force=y作者:itmyhome原创 2017-04-25 09:41:06 · 2302 阅读 · 0 评论 -
关于Oracle处理DDL和DML语句的事务管理
SQL主要程序设计语言数据定义语言DDL(Data Definition Language) 如 create、alter、drop,数据操作语言DML(Data Munipulation Language) 如 insert、update、delete,数据控制语言DCL(Data Control Language) 如 grant、revokeConnection conn原创 2016-01-14 22:26:03 · 4015 阅读 · 1 评论 -
Oracle INSERT ALL 语句介绍
描述Oracle INSERT ALL 语句用来用一个 INSERT 语句添加多行。该行可以只使用一个SQL命令插入到一个表或多个表。语法Oracle INSERT ALL 语法如下:INSERT ALL INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n) INTO mytable原创 2016-07-03 22:11:25 · 11134 阅读 · 0 评论 -
Kettle 连接 Oracle 问题总结
一、Driver class 'oracle.jdbc.driver.OracleDriver' could not be found, make sure the 'Oracle' driver (jar file) is installed.oracle.jdbc.driver.OracleDriver缺少Oracle JDBC jar包,将ojdbc-x.jar 放在lib目录下原创 2016-09-20 10:15:05 · 12272 阅读 · 1 评论 -
Oracle 通过出生日期计算年龄
方法一:SELECT TRUNC(months_between(sysdate, birth)/12) AS agefrom mytable方法二:select TRUNC((to_char(sysdate, 'yyyyMMdd') - to_char(birth, 'yyyyMMdd')) / 10000) as agefrom mytable原创 2016-09-07 22:23:09 · 61837 阅读 · 1 评论 -
MySQL GROUP_CONCAT(expr)函数的使用
此函数返回一个字符串结果,其中包含来自组的连接的非NULL值。 如果没有非NULL值,则返回NULL。 完整的语法如下:GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,co原创 2017-02-13 18:01:34 · 1407 阅读 · 0 评论 -
Every derived table must have its own alias
如下SQL语句:SELECT * FROM ( SELECT ID,URL FROM alone_action WHERE STATE = '1' ) 在Oracle中可以执行,但在MySQL下无法通过,错误如下:查询:SELECT * FROM ( SELECT ID,URL FROM alone_action WHERE STATE = '1' ) LIMIT 0, 1原创 2017-02-03 18:00:47 · 1969 阅读 · 0 评论 -
Oracle的REGEXP_REPLACE函数简单用法
REGEXP_REPLACE让你搜索的字符串的正则表达式模式REPLACE函数的功能。默认情况下,该函数返回source_char与replace_string取代了正则表达式模式的每个实例。返回的字符串是在相同的字符集source_char。语法Oracle数据库中的REGEXP_REPLACE函数的语法是:REGEXP_REPLACE(source_char, pa原创 2015-12-24 22:40:08 · 42026 阅读 · 0 评论 -
Oracle的REGEXP_INSTR函数简单用法
REGEXP_INSTR函数让你搜索一个正则表达式模式字符串。函数使用输入字符集定义的字符进行字符串的计算。它返回一个整数,指示开始或结束匹配的子位置,这取决于return_option参数的值。如果没有找到匹配,则函数返回0。语法Oracle数据库中的REGEXP_INSTR函数的语法是:REGEXP_INSTR (source_char, pattern [, positi原创 2015-12-22 22:46:29 · 42970 阅读 · 2 评论 -
Oracle删除字段之前判断字段是否存在
在Oracle中若删除表中一个不存在的字段,如 “alter table test drop column xxx”,则会提示:ORA-00904:”xxx”:标识符无效若在程序中执行该语句则会报异常,这就需要我们在删除字段前先判断该字段是否存在,若存在则删除. DECLARE num NUMBER;BEGIN SELECT COUNT(1) INTO num from c原创 2016-01-23 20:50:19 · 9091 阅读 · 2 评论 -
Oracle删除表之前判断表是否存在
在Oracle中若删除一个不存在的表,如 “DROP TABLE tableName”,则会提示:ORA-00942:表或视图不存在若在程序中执行该语句则会报异常,这就需要我们在删除表前先判断该表是否存在,若存在则删除. DECLARE num NUMBER;BEGIN SELECT COUNT(1) INTO num FROM USER_TABLES WHERE T原创 2016-01-22 22:20:44 · 13385 阅读 · 1 评论 -
Oracle中对数字加汉字的排序(完善)
之前写过一篇 Oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍 后来在开发的过程中又遇到类似问题,数据不一样了,按之前的用法是不适用的。之前的是数字在前汉字在后,最主要的区别是数字没有重复的,而现在的数据中数字是有重复的比如:玫瑰园1楼玫瑰园2楼兴帝家园1楼兴帝家园2楼如果是只抽取数字进行排序 会造成两个1楼在前 两个2楼在后而想要的结果是先按相同的原创 2015-12-18 22:27:19 · 5113 阅读 · 1 评论 -
Oracle的REGEXP_SUBSTR函数简单用法
REGEXP_SUBSTR延伸SUBSTR函数的功能,让你搜索一个正则表达式模式字符串。这也类似于REGEXP_INSTR,而是返回子字符串的位置,它返回的子字符串本身。语法Oracle数据库中的REGEXP_SUBSTR函数的语法是:REGEXP_SUBSTR(source_char, pattern [, position [, occurrence [, match_原创 2015-12-27 22:19:32 · 47519 阅读 · 2 评论 -
Java调用Oracle存储过程
步骤:1、编写Oracle存储过程2、编写数据库获取连接工具类3、编写简单应用调用存储过程实现:1、Oracle存储过程:/*测试表*/create table test( id varchar2(32), name varchar2(32));/*存储过程 插入数据*/ CREATE OR REPLACE PROCEDURE原创 2015-11-17 22:18:42 · 3280 阅读 · 2 评论 -
ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务
PL/SQL连接Oracle数据库的时候 报"ORA-12514: TNS:监听程序当前无法识别连接描述符中请求的服务" 错误 本例原因:安装Oracle时一般默认实例都是orcl,发现有人不按套路出牌,改了名字,如图 解决方法:在Oracle安装目录 找到listener.ora文件 路径为 D:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN(根据自己原创 2015-10-29 22:43:55 · 59157 阅读 · 34 评论 -
Oracle中查询、禁用、启用、删除表外键
1、查询所有表的外键:select table_name, constraint_name from user_constraints where constraint_type = 'R';2、禁用所有外键约束, 使用下面的sql生成对应sql脚本:select 'alter table ' || table_name || ' disable constraint ' || constrain原创 2015-10-06 22:25:44 · 6225 阅读 · 2 评论 -
Oracle启用和禁用触发器
1、禁用table_name表的所有trigger alter table table_name disable all triggers;2、启用table_name表的所有triggeralter table table_name enable all triggers;3、禁用指定triggeralter trigger trigger_name disable;4、启用指定triggeralter trigger trigger_name enable;原创 2015-08-04 22:16:19 · 9046 阅读 · 0 评论 -
ROW_NUMBER() OVER函数使用方法
ROW_NUMBER是一个分析函数,语法如下:ROW_NUMBER( ) OVER ([ query_partition_clause ] order_by_clause)它为order_by_caluse中指定的有序顺序序列(从1开始)分配一个唯一的数字到它应用的每一行例子:统计每一个部门下所有员工工资排行测试数据create table employee( empid int原创 2017-03-08 16:51:32 · 3566 阅读 · 0 评论 -
修改Oracle数据库表中的字段顺序
当设计好表结构之后,后期如果需要往表中增加字段,默认会把该字段放到表的最后, 并且字段特别多而我们又想把有关联性的字段放在一起,这时就要修改字段顺序。第一种方法:删了重建,这种方法虽然简单粗暴,但不科学第二种方法:1、首先需要sys或system权限操作2、查询需要更改表的IDselect object_id from all_objects where原创 2017-04-21 18:00:52 · 18844 阅读 · 0 评论 -
Oracle自定义顺序排序
表中有如下数据按BBTYPE字段排序但想要BBTYPE等于3的也就是第三行数据排到最后,这时单纯的order by xx就不行了。可借助decode函数,自定义顺序排序。order by decode(bbtype, '1', 1, '2', 2, '4', 3, '5', 4, '3', 5);decode含义解释decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,...原创 2019-09-30 08:26:12 · 3455 阅读 · 0 评论 -
Oracle判断字段值中是否含有非数字
今天项目中突然有个功能报错,后台查询SQL提示“ORA-01722 无效数字”错误信息,查找原因是因为做sum()运算时,列中有非数字。预防此类问题的发生肯定是从源头上保证此列必须是数字,既然已经产生了非数字,先改正过来。此文章解决的问题是查找哪些值含有非数字,表中有如下测试数据:第4和6行是非法数据方法一:select * from test t where t.name is n...原创 2019-09-24 08:42:55 · 13024 阅读 · 3 评论 -
格式化Oracle中的varchar类型的时间为时间类型
OILDATE为varchar类型,欲将 20141130120140 格式化为 2014-11-30 12:01:40select to_char(to_date(OILDATE, 'YYYYMMDD HH24MISS'),'YYYY-MM-DD HH:MM:SS') AS OILDATE FROM PS_NYGK_OIL_GAS先转换成date类型,然后再转换为varchar类型,必须...原创 2019-04-26 18:04:00 · 3701 阅读 · 2 评论 -
Oracle查询数据库中所有表的记录数
使用如下语句进行查询:select t.table_name,t.num_rows from user_tables t查询出来的结果数据可能是不正确的,或者根据就没数执行如下脚本可查询出正确的数据CREATE OR REPLACE FUNCTION count_rows ( table_name IN varchar2, owner IN varchar2 := NULL)...原创 2019-01-29 21:41:40 · 9806 阅读 · 1 评论 -
Oracle中对数字加汉字的排序(再完善)
问题是随着需求的变化逐步发现并解决的,之前写过oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍和Oracle中对数字加汉字的排序(完善), 这次数据又不一样了第一次是数字在前汉字在后且数字没有重复,如下第二次是数字有重复,且数字前后内容相同,如下这次和第二次唯一不同的是数字后面内容是不同的,如下:第一种排序:SELECT * FROM test2 order by...原创 2019-01-29 21:39:00 · 2326 阅读 · 1 评论 -
Oracle导出表结构及备注
一个项目中没有数据库表设计文档,可以使用PLSQL自己搞一个。SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_...原创 2019-01-03 21:03:56 · 2758 阅读 · 1 评论 -
快速删除大数据量表
需求:要清空表中数据,现有一个100w以上的表,开始使用delete from t_name进行删除,发现太慢了,足足等了8分钟,如果数据更大,则无法想象。可用如下方法进行删除假设要删除的源表为SOURCE_T1、生成中间表create table SOURCE_T_M as select * from SOURCE_T where id = '111' --随便指定一条符合条...原创 2018-08-27 16:11:42 · 7003 阅读 · 1 评论 -
Oracle执行update时卡死问题的解决方法
问题:在执行delete或for update语句时,PLSQL一直执行,不出结果。原因:执行update或者insert语句后需要commit,如果因网络或其他原因没有commit而强制关闭连接,Oracle就会将该条提交的记录锁住。解决方法:1、查询锁定记录select object_name, machine, s.sid, s.serial# f...原创 2018-08-16 17:39:41 · 15660 阅读 · 0 评论 -
Oracle中判断一个字符串是否为全数字
在一个字段上使用sum()聚合函数的时候报“ORA-01722:无效数字”错误,原因是该字段值有非数字其中一个解决方法是将只要包含非数字的都替换为0select sum(to_number(nvl2(translate(LA_J_B, '/1234567890.', '\'), '0', LA_J_B))) as LA_J_Bfrom BUS_BB_RLXHL这里使用到了两个关键函数,一个是tra原创 2018-05-08 11:59:04 · 13294 阅读 · 0 评论 -
Oracle中nvl(), nvl2()函数的区别
nvl(expr1, expr2)表示:如果expr1为NULL,则nvl返回expr2。如果expr1不是NULL,则nvl返回expr1。nvl2(expr1, expr2, expr3)表示:如果expr1不为空,则nvl2返回expr2。如果expr1为空,则nvl2返回expr3。参考:https://docs.oracle.com/cd/B19306_01/...原创 2018-05-08 11:46:14 · 1212 阅读 · 0 评论 -
MYSQL实现Oracle的Start with…Connect By递归树查询
因项目迁移,使用的数据库也需要从Oracle迁移到MySQL 其中有个功能使用到了Oracle的Start with…Connect By递归树查询,而MySQL中没有此函数,但可以通过自定义函数的方式来解决这个问题创建表create table treeList( id varchar(10), -- 节点ID name varchar(10), -- 节点名称 p原创 2017-12-08 17:58:43 · 7165 阅读 · 1 评论 -
Oracle中的translate函数用法
语法:translate(expr, from_strimg, to_string)简介:translate返回expr,其中from_string中的每个字符的所有出现都被to_string中的相应字符替换。expr中不在from_string中的字符不会被替换。如果expr是一个字符串,那么你必须把它放在单引号中。 from_string的参数可以包含比to_string更多的字符。在这种情况下原创 2017-11-17 19:48:14 · 10282 阅读 · 0 评论 -
Oracle exp导出加where指定条件
如果一个表中数据很大又或者我们只需要导出表的部分内容,可使用query参数进行where条件过滤exp test/test@192.168.20.20/orcl file = d:\test.dmp tables=(t_test) query = \"where oildate like '2016%'\"注意单引号和转义字符另导入数据时加上 ignore=y 会忽略掉错误信息原创 2017-06-23 17:59:20 · 27352 阅读 · 0 评论 -
Oracle 查看和扩展表空间
一、查询表空间使用情况select a.tablespace_name as "表空间名", a.bytes / 1024 / 1024 as "表空间大小(M)", (a.bytes - b.bytes) / 1024 / 1024 as "已使用空间(M)", b.bytes / 1024 / 1024 "空闲空间(M)", roun原创 2017-06-22 21:32:14 · 5218 阅读 · 0 评论 -
Oracle between and 边界问题
BETWEEN条件的语法为:expression BETWEEN value1 AND value2;Oracle BETWEEN条件将返回表达式在value1和value2(含)范围内的记录。例子:Oracle的BETWEEN..AND..前后都是闭区间,也就是说包含两个端的数使用NOT运算符Oracle BETWEEN条件也可以与Oracle NOT运算符组合。原创 2017-06-16 18:00:29 · 48560 阅读 · 0 评论 -
Oracle 日期时间模糊查询
将Oracle中时间字段转化成字段串,然后进行字符串模糊查询select * from person p where to_char(p.birthday,'yyyy-MM-dd') like '2012-07-30'作者:itmyhome原创 2017-05-25 18:00:42 · 6339 阅读 · 3 评论 -
Oracle中不等于号问题
在Oracle中,不等于号有以下几种方式: 测试SQLcreate table test( id int, name varchar2(10), age int)insert into test(id,name,age) values(1,'zhangsan',23);insert into test(id,name,age) values(2,'lisi','');inse原创 2015-05-24 23:31:44 · 10314 阅读 · 0 评论 -
Oracle的substr函数简单用法
substr(字符串,截取开始位置,截取长度) //返回截取的字符串(包含开始位置)select substr('HelloWorld',0,3) value from dual; --返回结果为 Helselect substr('HelloWorld',1,3) value from dual; --返回结果为 Hel ,0和1都是表示从第一个字符还是截取select substr('He原创 2015-05-25 21:27:19 · 2642 阅读 · 0 评论