Oracle-Dev
文章平均质量分 61
bitko
这个作者很懒,什么都没留下…
展开
-
varchar,varchar2,nvarchar,nvarchar2
1、varchar/varchar2 varchar是长度不固定的,比如说,你定义了varchar(20),当你插入abc,则在数据库中只占3个字节。 varchar同样区分中英文,这点同char。 varchar2基本上等同于varchar,它是oracle自己定义的一个非工业标准varchar,不同在于,varchar2用null代替var原创 2016-03-22 22:32:28 · 2342 阅读 · 0 评论 -
ORA-00918 未明确定义列,with t as 后面只能跟select
今天在with t as 作为临时表时报了这个错误,查了下原来是列名重复造成的WITH t AS (SELECT a.*,1 empno FROM emp a) SELECT * FROM t;定义为不同的列即可。另外 with t as 后面必须紧跟select语句,而不態使用update,delete,merge 等语句如果with t as 后面跟的是union原创 2016-03-23 21:50:07 · 2789 阅读 · 0 评论 -
regexp_substr()函数
1.SELECT regexp_substr('1,2,12,13','[^,]+',1,3) FROM dual;字符:^ --匹配行首字符:+ --匹配一次或多次REGEXP_SUBSTR(source_string, --需要进行正则处理的字符串pattern, -原创 2016-03-21 22:41:38 · 4061 阅读 · 0 评论 -
oracle Long数据类型总结
--概述SELECT *FROM t_20160315;1.存储可变长字符串,最大长度为2G2.对于超出一定长度的文本,基本上用long型存储,比如数据字典表中的许多字段SELECT *FROM All_Tab_Cols a WHERE a.data_type='LONG';3.long型主要用于不需要字符串搜索操作的长串数据,如果需要字段搜索就需要使用varchar2原创 2016-03-15 21:55:50 · 19866 阅读 · 0 评论 -
function,procedure(异常处理)
1.函数和存储过程的区别a.标识符不同 function,procedureb.函数中一般不用变量形参,用函数名直接返回函数值;而过程如有返回值,必须用变量形参返回c.过程无类型,不能给过程名赋值;函数有类型,最终要将函数值传送给函数名d.函数在定义时一定要进行函数的类型说明,过程则不进行过程的类型说明e.函数的调用出现在表达式中,过程调用,由独立调用语句完成f.过程一般会原创 2016-03-08 22:59:05 · 1462 阅读 · 0 评论 -
length,lengthb和substr,subtrab
length表示的是字符串的字符长度,lengthb表示的是字符串的字节长度;substr表示根据字符长度获取子串,substrb表示根据字节长度获取字符串。SELECT LENGTH('length,lengthb测试')FROM dual;--字符数 SELECT LENGTHB('length,lengthb测试')FROM dual; --字节数 SEL原创 2016-04-14 21:41:13 · 458 阅读 · 0 评论 -
in与exist,not in与not exsit的区别
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),表B(大表)1:sel转载 2016-04-14 22:10:53 · 2827 阅读 · 0 评论 -
with check option使用
SQL> create table t(id number,name char(5));Table created.SQL> insert into t values(1,'a');1 row created.SQL> create view a1 as select * from t where id=1 with check option;View crea原创 2016-04-19 00:11:23 · 7863 阅读 · 0 评论 -
rank() over,dense_rank() over,row_number() ove的区别
rank() over:查出指定条件后的进行排名。特点是,加入是对学生排名,使用这个函数,成绩相同的两名是并列。dense_rank() over:与ran() over的却别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次row_number() over这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名else原创 2016-04-19 00:02:23 · 834 阅读 · 0 评论 -
insert all
SQL> create table t1 as select * fromemp;Table created. SQL> create table t2 as select * fromemp;Table created.SQL> insert all into t1 select * fromemp;14 rows created. SQL> insert原创 2016-04-19 00:15:29 · 525 阅读 · 0 评论 -
oracle临时表
在Oracle中,临时表和普通数据表一样只需要一次创建,其结构从创建到删除的整个期间都是有效的。相对与其他类型的表,临时表只有在实际向表中添加数据时,才会为期分配存储空间,并且分配的空间来自临时表空间(temp),一次来避免与永久的数据争用存储空间。 一.会话级临时表 使用on commit preserve rows字句。会话级临时表在用户与服务器断开连接后被自动删除,临时原创 2016-04-19 23:01:08 · 507 阅读 · 0 评论 -
oracle聚簇表
oracle支持两种类型的聚簇:索引聚簇和哈希聚簇一.索引聚簇表的原理聚簇:如果一些表有一些共同的列,则将这样一组表存储在相同的数据块中聚簇还表示把相关的数据存储在同一个块上。利用聚簇,一个块可能包含多个表的数据。概念上就是说如果两个表或多个表经常做连接操作,就可以预先把需要的数据也存储在一起。聚簇还可以用于单个表,可以按某个列将数据分组存储。简单的说,簇就是一组表,由一组原创 2016-03-29 22:01:14 · 1833 阅读 · 0 评论 -
rownum,rowid,row_number()及oracle分页查询.
1.rownum和rowid都是伪列,但两者的根本是不同的,rownum是根据sql查询出来的结果给每行分配一个逻辑编号,不同的sql也就会导致rownum不同,但是rowid是物理结构上的,在每条记录Insert到数据库时,就会有一个唯一的物理记录。rowid可以说是屋里存在的,表示记录在表空间中的一个唯一位置ID,在DB中唯一。只要记录没被搬动过,rowid是不变的。rowid相对原创 2016-05-09 21:04:37 · 4220 阅读 · 0 评论 -
延迟约束
延迟约束:指仅当事物被提交时强制执行约束,在添加约束时可以使用deferrable字句来指定约束为延迟约束,对于已经存在的约束不能修改case:SQL> create table t(id number(4) notnull,name varchar2(20));Table created.---建立延迟约束SQL> alter table t add constraintpk原创 2016-04-19 00:13:26 · 1339 阅读 · 0 评论 -
游标使用总结
一.游标概念游标是sql的一个内存工作区,由系统或用户以变量的形式定义。其作用就是临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在硬盘的表中调到计算机内存中进行处理,最终将处理结果显示出来或写回到数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。游标分为两种类型:显式游标和隐式游标。通常用到的select..into语句,一次只能从数据库中提取一行数据,原创 2016-03-24 21:18:54 · 507 阅读 · 0 评论 -
for update [of] 语句
for update 是把所有的表都锁定for update of根据of后表的条件锁定相对应的表--1.锁定整个表SELECT *FROM emp for UPDATE;--2.锁定表的单行记录SELECT *FROM emp a WHERE a.empno='7369'for UPDATE;--3.锁定两个表SELECT *FROM emp原创 2016-03-24 21:21:42 · 1482 阅读 · 0 评论 -
游标使用效率对比
游标的三种处理方式1.单条处理open 游标;LOOP FETCH 游标 INTO变量;EXIT WHEN 条件;END LOOP;CLOSE 游标; 2.批量处理open 游标;FETCH 游标 BULK COLLECT INTO集合变量;CLOSE 游标; 3.隐式游标for x in (sql语句) loop...-原创 2016-03-25 23:20:50 · 2969 阅读 · 0 评论 -
关于oracle中varchar2的长度范围
varchar2有两个最大长度:一个是在字段类型4000;一个是在PL/SQL中变量类型32767.准确的说是在schema级varchar的长度类型限制为4000案例:CREATE OR REPLACE FUNCTION VAR_TEST RETURN VARCHAR2 IS T_COL VARCHAR2(32767); --plsql变量的varchar2长度范围为1到3原创 2016-03-29 21:02:21 · 1279 阅读 · 0 评论 -
sql使用truncate和delete清空table的区别(总结)
1.truncate在各种表上无论是大的还是小的都非常快。如果有rollback命令,delete将会被撤销,而truncate不会被撤销。原创 2016-04-07 00:08:18 · 9790 阅读 · 0 评论 -
电话号码处理,附错误类型(无效字符,plsql该sql中不允许使用函数)
--电话号码处理PROCEDURE PRO_DM_MOBILE_SZKF(OUT_CODEOUT VARCHAR2(4000),OUT_MSGOUT VARCHAR2(4000))IS S_SQL VARCHAR2(4000); T_SQL VARCHAR2(4000);BEGIN UPDATE C_RESIDENTCUSTOMER A SET A.TEL原创 2016-03-21 22:24:09 · 933 阅读 · 0 评论 -
oracle自治事务(AT)
AT是由主事务(MT)调用但是独立于它的事务。当AT被调用时,mt被挂起,在AT的内部,一系列的dml可以被执行并且commit或rollback.并且由于commit和rollback的独立性,他的commit和rollback并不影响mt的执行效果。在at结束执行之后MT重新获得对事务的控制权使用例子--自治事务procedureCREATEOR REPLACE原创 2016-03-03 23:20:45 · 418 阅读 · 0 评论 -
DBMS_UTILITY.GET_CPU_TIME和DBMS_UTILITY.GET_TIME
1.计算密集型(cpu-bound)DECLARE N PLS_INTEGER := 0; A1 PLS_INTEGER; A2 PLS_INTEGER; A3 PLS_INTEGER; A4 PLS_INTEGER;BEGIN A1 := DBMS_UTILITY.GET_CPU_TIME; A3 := DBMS_UTILITY.GET原创 2016-03-02 23:18:44 · 508 阅读 · 0 评论 -
sql语法记录 to_date函数和oracle连接写法
to_dateselect to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual当前时间减去7分钟的时间 select sysdate,sysdate - interval原创 2016-02-01 22:23:05 · 685 阅读 · 0 评论 -
关于blob,clob,varchar2
blob:二进制大对象(binary large object),用来存储大量二进制数据,在oracle中,通常视频音频图片等信息就用blob现将文件信息转化为二进制信息来存储blob可存储的最大大小为4GBclob:大字符对象(character large object),用来存储大量文本数据,文章或者是较长的文字就用clob来存储,可存储的最大大小为4GB.简单的说就是,clob原创 2016-03-05 22:30:16 · 1604 阅读 · 0 评论 -
user_tab_cols和user_tab_columns的区别
user_tab_cols比user_tab_columns多几列HIDDEN_COLUMN VARCHAR2(3)VIRTUAL_COLUMN VARCHAR2(3)SEGMENT_COLUMN_ID NUMBERINTERNAL_COLUMN_ID NOT NULL NUMBERQUALIFIED_COL_NAME VARCHAR2(4000)而且存储内容多了隐藏字原创 2016-03-07 22:56:27 · 12748 阅读 · 0 评论 -
SYS_CONTEXT函数,获取当前连接信息
selectSYS_CONTEXT('USERENV','ACTION') ACTION,SYS_CONTEXT('USERENV','AUDITED_CURSORID') AUDITED_CURSORID,SYS_CONTEXT('USERENV','AUTHENTICATED_IDENTITY') AUTHENTICATED_IDENTITY,SYS_CONTEXT('USER原创 2016-03-07 23:00:36 · 1714 阅读 · 0 评论 -
oracle表名,字段名的长度限制
可以看出 ,user_tables这个表,table_name的字段长度为30,查看该视图的构造可以造出table_name的来源,sys.obj$,而且这个表是不能更改的。原创 2016-03-07 23:13:39 · 9549 阅读 · 0 评论 -
dbms_lock.sleep,日期格式
一. dbms_lock.sleep执行ORACLE_HOME/rdbms/admin/dbmslock.sql来创建dbms_lock;在dba身份下grant execute on dbms_lock to username;测试代码a.BEGIN DBMS_OUTPUT.put_line(TO_CHAR(SYSDATE,'yyyymmddhh24miss')原创 2016-03-14 21:32:23 · 729 阅读 · 0 评论 -
ORACLE连接 (+)和Join总
一.笛卡尔积a.oracle写法scott@ORCL> select count(1) from emp; COUNT(1)---------- 14scott@ORCL> select count(1) from dept; COUNT(1)---------- 4scott@ORCL> select原创 2016-04-25 22:26:42 · 624 阅读 · 0 评论 -
异常信息定位具体数据行
下午在执行一个dml操作时候,出现单行返回多行的异常信息,但不能知道具体是那列数据的问题,因为dml语句本身比较复杂,就想通过循环的方式找出异常数据行。只想到了一种游标的方法来定位,应该还有更好的方法。DECLARE CURSOR C_CUR IS SELECT * FROM EMP1 ORDER BY EMPNO DESC; C_CUR_ROW C_CUR%RO原创 2016-03-26 00:10:31 · 583 阅读 · 0 评论 -
oracle单引号和双引号的区别
双引号1.表示其内部的字符串严格区分大小写2.用于特殊字符或关键字3.不受标识符规则限制4.会被当成一个列来处理5.当出现在to_char的格式字符串中时,双引号有特殊的作用,就是讲非法的字符包装起来,以避免出现日期格式转化错误案例1(区分大小写):a.CREATE TABLE "t"AS SELECT * FROM dba_all_tables;原创 2016-03-28 20:47:47 · 2533 阅读 · 0 评论