数据库
杨友山
多年软件开发管理经验,曾在腾讯、中兴通讯等企业从事软件开发和管理工作,熟悉技术和开发管理;曾在微软从事售前技术支持,接触过产品销售。目前在从事低代码平台类产品研发相关工作。 擅长.NET领域,前端angular,vue,typescript,Oracle,云计算相关。
展开
-
莫名奇妙的异常011:mysql超过字段长度值自动截断
sql-mode中有STRICT_TRANS_TABLES是在数据超长的情况下会插入失败,当删除这个限制时,插入超长会MySQL会自动截断超长的字段。原创 2023-12-25 20:14:53 · 506 阅读 · 0 评论 -
ORACLE—010:调用有游标参数的存储过程
游标一般可作为存储过程的返回参数,如下PROCEDURE PRO_MY_TEST(var1 VARCHAR2, var2 OUT CURSOR) 那么如何调用这个存储过程呢,如下declare var1 varchar2(40); var2 SYS_REFCURSOR;begin PROCEDURE PRO_MY_TEST(var1原创 2015-04-17 18:21:44 · 3394 阅读 · 1 评论 -
ORACLE—011:查找重复行数据
sql如下:SELECT COUNT(*) ,字段1,字段2 FROM 表名HAVING COUNT(*) >2GROUP BY 字段1,字段2;表示字段1和字段2有重复的行。如果字段较多可依次在后面增加。原创 2015-04-30 12:36:22 · 1644 阅读 · 0 评论 -
ORACLE-012:oracle中纯数字的varchar2类型和number类型自动转换
select case when '0110' = 110 then 'true'else 'false' end from dual;select case when to_number('0110') = to_number(110) then 'true'else 'false' end from dual;原创 2015-05-20 21:49:59 · 15464 阅读 · 0 评论 -
ORACLE-013:oracle中kill死锁进程
oracle中对于访问频率很高的包,存储过程或者函数,会引起死锁。对于用到了死锁的对象的脚本都会无法运行,造成卡死,或者报异常:打开的连接太多。这时需要使用dba权限账户去kill掉死锁的对象。使用 alter system kill session 死锁对象的ID;执行如下sql,查找出死锁的ID,并将alter语句拼接好:select Distinct 'alter system kill s原创 2015-05-30 11:14:26 · 1658 阅读 · 0 评论 -
ORACLE-014:oracle中查看DBLink密码
dblink在数据库中使用是比较多的,简单方便。不过随着oracle安全机制的加强,普通用户登录只能看到,用户名以及连接字符串。那么dblink密码如何查看呢?很简单,需要sys账户登录后:SELECT * FROM SYS.link$;这样,就可以看到dblink的详细信息,也可以看到密码了。原创 2015-07-27 17:24:33 · 11091 阅读 · 0 评论 -
ORACLE-015:ora-25153 临时表空间为空,ora01652 无法通过128
写了一个复杂的select语句,突然oracle就报了:ora-25153 临时表空间为空,这个错误,于是网上查了下,发现了如下解决方法:创建一个新的临时表空间。首先要有system权限,登录进去后,第一步,创建一个表空间,如下,引号中的d是盘符,oracleoradatatestdbtemp01是文件名称,100m是大小,temp01是临时空间名称,可修改。create temporary ta原创 2015-07-28 20:25:44 · 2047 阅读 · 1 评论 -
ORACLE-016:ora-01720 授权选项对于'xxxx'不存在
报错的情形如下,A用户:视图V_AB用户:视图V_B,并且用到了V_AC用户:需要用V_B,授权过程,A用户下:grant select on V_A to BB用户下:grant select on V_B to C此时报错:ora-01720 授权选项对于'V_A'不存在。那么是什么原因呢,因为B还需要授权视图给C用户,但是B用到的视图是A下的,所以除了将V_A授权select权限给B外,原创 2015-08-25 08:38:01 · 4460 阅读 · 0 评论 -
ORACLE-017:SQL优化-is not null和nvl
今天在优化一段sql,原脚本大致如下:select a.字段n from tab_a awherea.字段2 is not null;a.字段2增加了索引的,但是查询速度非常慢,于是做了如下修改:select a.字段n from tab_a awherenvl(a.字段2,'0' ) != '0';速度提升很明显。原因是什么呢?其实很简单,因为is null和原创 2015-08-25 10:21:52 · 13145 阅读 · 3 评论 -
ORACLE-018:ORACLE技巧001 字符串处理
1、截取字符串oracle截取字符串用到了一个函数substr,参数为:substr(字符串,起始位置,截取长度),例如:字符串123,112,需要将末尾逗号去掉,那么截取函数如下:select substr('123,112,',0,length('123,112,')-1) from dual;结果:123,1122、替换字符串使用函数:replace,如下:select replace('原创 2015-08-28 18:35:36 · 1666 阅读 · 0 评论 -
ORACLE-019:ORACLE常用SQL优化hint语句
在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=’SCOTT’; 2.转载 2016-01-12 11:19:17 · 890 阅读 · 0 评论 -
ORACLE-020:ORACLE技巧002 批量操作表
有时候需要批量操作一些表,比如授权,清空数据等。可以使用拼接sql语句的方式来实现。例如,需要将一个用户中的所有表,授权查询权限给另一个用户,可以拼接如下sql:select 'grant select on 用户名.' || table_name || ' to 另一个用户名;' from user_tables;得到所有表拼接的如下sqlgrant select on 用户名.tabl原创 2016-01-14 08:40:11 · 1445 阅读 · 0 评论 -
ORACLE-023:令人烦恼的 ora-01722 无效数字
曾经一段时间内写sql语句时,老是莫名其妙的报ora-01722。对于这个错误提示,尤其是对于一个复杂的sql语句,很是郁闷,因为很多时候都不知所然。通过每次碰到的总结,其实也不是那么难以解决的,主要原因是:1、对于两个类型不匹配(一个数字类型,一个非数字类型,同下)的值进行赋值操作;2、两个类型不匹配的值进行比较操作(例如,“=”);3、to_number函数中的值,非数字的,比如,to_num原创 2016-06-26 14:56:58 · 129718 阅读 · 2 评论 -
ORACLE-021:不同用户间视图的授权
在程序开发中,对同一台数据库服务器上的不同用户名授权的操作是比较多的,常见的是对表的授权,常用语句为:grant 操作 (select ,insert,update,delete,alter等) on 需要授权给其他用户的表或视图 to 另一个用户;对于A用户中的视图来说,因为其中包含了当前用户的表,或者其他用户的表,那么要将这个视图授权给另一个用户B,要么将视图中所有表都授权对应的操作给B,这样原创 2016-06-07 09:55:50 · 5207 阅读 · 0 评论 -
ORACLE-022:over函数用于统计查询
网上碰到过一个oracle数据库的面试题,如下:有如下表:student_score,ID STUDENT SCORE TYPE1 tom 90 语文2 tom 91 数学3 tom 89 英语4 jim 92 语文5 jim 85 数学6 jim 86 英语要求:读取每个科目的最高分。这个题目要解答的话有两种方式。1、原创 2016-06-17 16:34:30 · 2782 阅读 · 0 评论 -
编程技巧:数据库中的唯一键
我们在创建表的时候,一般都会考虑增加唯一键的字段,因为一行记录总是要表达一个事物的,从某种意义上来说它是有唯一性的。我们常用的唯一键使用大致有这么几种:guid,序列,流水号,组合唯一索引这里简单描述下如何实现,1、guid全球唯一编码,各种语言实现方式都不同,C#语言实现是: System.Guid.NewGuid();Oracle中是:sys_guid()GUID使用起来还是比较方便的,一般可原创 2016-09-29 19:45:43 · 2658 阅读 · 0 评论 -
ORACLE-024:列行转换、多行合并
当我们想把多列内容处理为一行,或者想把多行内容中按相同列名汇总都可以使用。使用的函数为LISTAGG。比如如下sql, SELECT '你的常用英雄' 项目,'程咬金' 内容 from dual union all SELECT '你的常用英雄' 项目,'诸葛亮' 内容 from dual union all SELECT '你的常用英雄' 项目,'宫本武藏'原创 2017-07-06 17:18:16 · 1033 阅读 · 0 评论 -
莫名其妙的异常003:关联查询中的01722-无效数字
系统中的表,一般使用主外键都比较多。主外键的定义和标准用法大家都很熟悉,只是实际使用时很少规范使用。比如有时主键是number类型,外键就定义成了varchar2类型。因为oracle中支持number类型的数字和varchar2类型的数字自动转换,所以不会出现什么问题。比如,表test1ID,name11,aa12,bb13,cc表test2,TID字段varchar2类型,ID,TID,...原创 2018-02-28 19:55:25 · 961 阅读 · 0 评论 -
ORACLE—008:分类统计
分类统计使用比较多,一般用于统计某项的个数或某项下的项数有多少。简单的,比如一张表tab_testtab_test记录idconamejob1IBMJACKPM2GoogleTOMPM3IBMJIMPM想统计这样的结果:co:人数。sql如下:select distinct t.co,count(t.name)from tab_test tgroup by t.co;结果co原创 2014-12-30 19:14:39 · 1335 阅读 · 0 评论 -
Sql Server数据库 002—sql server 2008 r2 连接字符串
安装完了数据库,在程序中使用就需要连接字符串。如何写呢?以sql server 2008 r2后为例。1、安装好sql server 2008 r2后,类似oracle的plsql工具。sql server 2008 r2也有工具,那就是sql server management studio,如图2、打开sql server management studio后,如图服务器,用户名,密码都是在安原创 2014-12-14 15:17:25 · 6399 阅读 · 0 评论 -
关于使用ASP.NET和数据库的笔记
最近刚刚完成了一个ASP.NET的项目,虽然很小,但是帮我熟悉了ASP.NET,同时也巩固了数据库的一些操作的知识。1、关于自增id (1)、在sqlserver中,使用identity表示,sql语句为:alter table 表名 add 列名 int identity(1,1);在企业管理器中,可以手动改,修改字段类型为int,标识改成是,也可以实现。也可使用select原创 2011-11-01 11:36:12 · 1261 阅读 · 0 评论 -
解决方法:ORA-24324 未初始化服务句柄
安装oracle的时候有一步出现如下错误: ORA-24324:未初始化效力句柄 ORA-24323:不准许此值 ORA-28547:衔接效力器失利,也许是Oracle Net管制差错 “忽略”和“中断” 都会安装失败,上网找了下解决方法如下: 提示失败后,返回上一步,然后将 product\10.2.0\db_1\NETWORK\ADMIN下的原创 2011-10-25 17:45:27 · 5134 阅读 · 0 评论 -
.NET工程师必须掌握的知识点
以下内容是转载的Microsoft SQL Server 数据库一、创建和维护数据库1、数据库 SQL Server 数据库的组成部分?(参见联机丛书) 如何保证数据库的完整性、安全性、并发性? 数据库设计创建步骤?(参见联机丛书 - 创建数据库计划) 数据库设计考虑的事项?(参见联机丛书)2、SQL Server 表 设计表时应注意哪些?原创 2012-02-21 16:22:28 · 2269 阅读 · 0 评论 -
C#对access数据库压缩
在项目中有时候会用到Access数据库,那么,你是否发现数据库进行INSERT,UPDATE几次之后,占用空间会变大,其实并没有存多少数据。当这种情况时,你应该对它进行压缩处理了。压缩方法有两种,一种是用数据库自带的功能手动压缩,另一种在程序中压缩。1、手动压缩。如图所示,便可进行压缩。2、程序中压缩 程序压缩需要调用一个dll(Interop.JRO.dll),网上都可以下原创 2011-11-30 16:31:00 · 6820 阅读 · 1 评论 -
Oracle Top N
select * from 表名 where rownum原创 2013-01-21 10:09:15 · 999 阅读 · 0 评论 -
用到的oracle sql语句-001
1、查询结果合并集合可使用union all ,例如:select 条件1union allselect 条件22、无连续id的分页 select ROWNUM AS ROWNUMMBER,tab.* from 表名 tab where ROWNUM>起始个数 and ROWNUM < 结束个数 3、判断包含字符串使用 instr函数,例如:instr(字符串1原创 2013-03-29 17:29:18 · 1254 阅读 · 0 评论 -
Oracle实用-01:绑定变量
数据库虽然在学校系统学习过,但是在工作中真正使用起来收获又是不一样的,今天起打算将项目中使用到的技术再分享出来,不以书本的顺序,只从碰到的问题为顺序。虽然不是纯粹的数据库工程师,但是每个程序员总免不了要写sql语句。最近一直在写服务,从数据库读取数据,但是当项目上线之后再回过头来看这些sql语句,总发现有很多是相似的,不如where条件有很多是一样的。这让我想起一句话,大意是:如果程序中有很多相同原创 2013-09-08 21:59:47 · 1437 阅读 · 0 评论 -
WCF-004:WCF中也可以使用Microsoft.Practices.EnterpriseLibrary
在WCF服务中我一直是使用ADO.NET 实体模型来连接数据和操作数据库的,刚开始用时觉得比较新鲜,因为linq与sql语句的基本操作都有对应的使用方法,而且能直接获取到数据表的模型,大多情况下还是比较好用的。不过偶尔的时候要涉及到多表关联的复杂的sql语句的查询,写linq就比较麻烦了,要使用分步进行,就是先用linq查出一个条件,赋值给一个变量,然后再将这个变量作为下一个linq的查询条件,不原创 2013-10-23 11:16:20 · 1470 阅读 · 0 评论 -
ORACLE—002:Create之创建类型
——积累工作中用到的SQLORACLE中也是有类型的,可作为存储过程,函数等的输入输入出。下面看下创建。用法CREATE OR REPLACE TYPE 类型名称 AS OBJECT( 字段1 类型, 字段2 类型, 字段3 类型)例如CREATE OR REPLACE TYPE T_OBJ AS OBJECT( T_ID原创 2014-05-28 22:38:14 · 1829 阅读 · 0 评论 -
ORACLE—001:Alter之增加字段,修改字段类型
——积累工作中用到的SQL1、增加和删除一列写法: --增加一列 alter table 表名 add 列名 类型; --删除一列 alter table 表名 drop column 列名 ;例如: --增加一列 alter table TB_TEMP add COL_ID VARCHAR2(40); --删除一列原创 2014-05-28 15:24:56 · 8493 阅读 · 0 评论 -
ORACLE—003:Create之创建表前判断表是否存在
建表前如何判断表是否存在呢,因为table是不支持replace的。下面的sql能帮到你。create前先判断表是否存在。例如,如果存在则drop掉那个表。当然你也可以定义自己的操作。 declare v_cnt Number; begin select count(*) into v_cnt from user_tables where upper(table_name)原创 2014-06-06 18:55:28 · 3085 阅读 · 1 评论 -
ORACLE-004-读取某个列有重复的数据
SELECT 主键或能代表当前行的列 FROM ( SELECT 主键或能代表当前行的列 ,重复的列 ,row_number() OVER(PARTITION BY 重复的列 ORDER BY 重复的列 DESC) RN FROM tableName ) WHERE RN=1 如此读出的都是唯一的,通过RN=1将重复的去掉了。 如原创 2014-10-23 20:33:02 · 1663 阅读 · 0 评论 -
ORACLE—009:存储过程加锁
最近碰到一种情况,需要限制某个存储过程只能有一个进程在执行,上一个执行完毕后下一个再执行。也就是类似与程序开发中的线程同步问题。汇总一个下,可以通过如下方法来实现。1、设置一个变量,或者表中的某个字段为标识位,执行时设置为某个值,执行完后再设置为原来的值。这种方式的要求设置标识位的地方和判断这个标识位的地方间隔时间不能太长,否则还是达不到要求。2、使用行锁来实现。比如建一个表t_test,插入几条原创 2015-01-29 17:25:54 · 4723 阅读 · 1 评论 -
ORACLE—005:创建JOB(一)
JOB在实际应用中,使用很多。一般用户定时执行某些函数,存储过程等。下面看看如何创建并启动JOB。例如,使用job定时执行某个存储过程。存储过程名:Pro_Test_JOB执行间隔:2小时,sql语句如下declare job number; v_count number;begin SELECT COUNT(*) INTO v_count原创 2014-12-23 17:42:26 · 1383 阅读 · 0 评论 -
ORACLE—006:移除和停止JOB
一般来说都是通过sql来删除或者停止某个job。移除JOB:remove停止JOB:broken首先通过 select * from user_jobs;查找出JOB的ID,然后调用dbms_job.broken或dbms_job.remove进行移除和停止。sql如下。以移除一个job为例。1、通过JOB的what值来查找job,并移除。declare job number; v_count原创 2014-12-24 17:59:10 · 5279 阅读 · 0 评论 -
ORACLE—007:查找删除的数据
删除表格的数据有两种:delete和trunc。trunc则数据再不可恢复,而使用了delete还可以通过查找并恢复的。如果使用delete误删除了数据,那么可以通过如下sql查找到。select *from 表名 as of TIMESTAMP 时间where条件例如:表名tb_test为,选择10天内的删除数据,sql如下select * from tb_test as of TI原创 2014-12-26 17:22:28 · 1775 阅读 · 0 评论 -
sql语句中JOIN ON 的使用
JOIN连接组合两个表中的字段记录,包括三种: INNER JOIN运算式:连接组合两个表中的字段记录。LEFT JOIN运算式:连接组合两个表中的字段记录,并将包含了LEFT JOIN左边表中的全部记录。RIGHT JOIN运算式:连接组合两个表中的字段记录,并将包含了RIGHT JOIN右边表中的全部记录。INNER JOIN设定两个表相关连的运算式,以连接组合两个表中的字转载 2011-10-13 08:55:11 · 71962 阅读 · 0 评论