`
shameant
  • 浏览: 58767 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用oracle的一些心得

阅读更多
创建表时注意事项:

1.       表名和列名使用有意义且容易记忆的英文单词

2.       表名大写,列名大写,统一使用下划线

3.       使用单数名称定义列名。

4.       创建良好的关系。

创建查询时注意事项:

1.       select ,from , where .,order by, having,group by 正文中采用小写

2.       IN BETWEEN UPPER 和函数等采用大写

3.       列名 pascal 大小写形式

4.       表名采用大写
cerate table NEWS{

Feature VARCHAR2(15) not null

};

快速复制一个表和数据:

1.         create table TEST3 as select * from TEST

2.         insert into TEST3 select * from TEST

创建序列:

create sequence JT_J_SPXX_SEQ
minvalue
1
maxvalue
9999999999999999
start with
1
increment by
1
cache
20
cycle ;

一些函数的应用:

1.       连接 2 个列
select spxxid||spbh as aa ,txm from jt_j_spxx
select CONCAT(spxxid,spbh) as aa ,txm from jt_j_spxx

2.       select RTRIM(LastName,'''"$*"') from test
sql
里的单引号用 2 个单引号表示
select TRIM(LastName) from test //trim
只能 trim 单个字符,不能是字符组, 格式也不同 TRIM ’”’ from LastName

3.       INSTR 方法的格式为
INSTR(
源字符串 , 目标字符串 , 起始位置 , 匹配序号 ) // 起始位置为非下标,而是实际位置
例如: INSTR('CORPORATE FLOOR','OR', 3, 2) 中,源字符串为 'CORPORATE FLOOR', 目标字符串为 'OR' ,起始位置为 3 ,取第 2 个匹配项的位置。
默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
所以 SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL 的显示结果是
Instring
——————
14

4.       oracle substr 函数的用法
 
取得字符串中指定起始位置和长度的字符串    substr( string, start_position, [ length ] )
 
: // 起始位置为非下标,而是实际位置
     substr('This is a test', 6, 2)     would return 'is'
     substr('This is a test', 6)     would return 'is a test'
     substr('TechOnTheNet', -3, 3)     would return 'Net'
     substr('TechOnTheNet', -6, 3)     would return 'The'

5.       清除左侧的字母(不能直接用 LTRIM ,可配合 TRIM LTRIM RTRIM 去除所有要过滤掉的字符)
select DECODE(SUBSTR(LastName,1,3),'THE',SUBSTR(LastName,4,Length(LastName)-3),LastName) from test

6.       nvl 用法
通过查询获得某个字段的合计值,如果这个值位 null 将给出一个预设的默认值 select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1 这里关心的 nvl 的用法, nvl arg,value )代表如果前面的 arg 的值为 null 那么返回的值为后面的 value
  另一个有关的有用方法
   declare 
   i integer
   select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1 这样就可以把获得的合计值存储到变量 i 中,如果查询的值为 null 就把它的值设置为默认的 1

7.       日期的列必须使用时必须 ToDate string ’YYYY-MM-DD’ )一下

SQL 语句删除表中重复字段 :

1 、查找表中多余的重复记录,重复记录是根据单个字段( peopleId )来判断
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2
、删除表中多余的重复记录,重复记录是根据单个字段( peopleId )来判断,只留有 rowid 最小的记录
delete from people 
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3
、查找表中多余的重复记录(多个字段)  
select * from vitae a

where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4
、删除表中多余的重复记录(多个字段),只留有 rowid 最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)


5 、查找表中多余的重复记录(多个字段),不包含 rowid 最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

比方说在 A 表中存在一个字段 “name” ,而且不同记录之间的 “name” 值有可能会相同,
现在就是需要查询出在该表中的各记录之间, “name” 值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1

触发器:

1.      

create or replace trigger "TRI_JT_J_SPXX_UPDATE"
 before update on jt_j_spxx 
 for each row
declare
 
-- local variables here
begin
 begin
    Update jt_webk_spflmx Set pm=:New .pm,nrjj=:New .spjj,DJ=:New .DJ,xj=nvl(:New .WSJG,:new .dj) Where spxxid = :New .spxxid;
 end ;
 begin
    update JT_WEBK_PHFLMX set pm=:new .pm,dj=:new .dj,xj=nvl(:new .wsjg,:new .dj) where spxxid = :new .spxxid;
 end ;
 begin
    update JT_WEBK_ROOMSPFLMX set pm=:new .pm,nrjj=:new .spjj,dj=:new .dj,xj=nvl(:new .wsjg,:new .dj) where spxxid = :new .spxxid;
 end ;
 begin
    update JT_WEBK_ROOMSPMX set pm=:new .pm,nrjj=:new .spjj,dj=:new .dj,xj=nvl(:new .wsjg,:new .dj) where spxxid = :new .spxxid;
 end ;
 begin
    Update jt_webk_dzdmx Set pm=:New .pm,nrjj=:New .spjj,DJ=:New .DJ,xj=nvl(:New .WSJG,:new .dj) Where spxxid = :New .spxxid;
 end ;
end TRI_JT_J_SPXX_UPDATE;

分页存储过程:

procedure PagePro
 (
 iPagesize number ,
-- 每页记录数
 iCurrentpage number ,
-- 当前页码
 strSql varchar2 ,   
-- 最终语句
 iRecordCount out number ,
-- 总记录数
 iPagenum out number
-- 输出总页码
 oFlag out number ,   
-- 返回操作标志
 v_cur out refCursor,
 errDesc out varchar2
)
as
 tmpSql varchar2 (
8000 );
 newSql varchar2 (
8000 );
 tmpNum number (
9 , 2 );
 tmpRow number ;
 tmpPageSize number ;
 pos number ;
 autoPageNumber number ;
begin

 iRecordCount :=
0 ;
 iPagenum :=
1 ;
-- execute immediate 'select count(1) from ('|| tmpSql ||')' into iRecordCount;
     tmpSql :=
'select rownum iRow,a.* from (' || strSql || ') a' ;
 execute immediate
'select count(1) from (' || tmpSql || ')' into iRecordCount;

 tmpSql:=
'select * from (select rownum iRow,a.* from (' || strSql || ') a)' ;
 
--execute immediate tmpSql;


 
--p_return_count@xhsd(strSql,iRecordCount);

   if iRecordCount=
0 then   -- 没有记录
    oFlag:=
16 ;
    iPagenum:=
0 ;
   
--cailintai2006 -3-3修改以下的内容
   
/*tmpSql := upper(strSql);
    pos := instr(tmpSql,' WHERE ');
    if pos > 0 then
       newSql := substr(tmpSql,0,pos-1);--
取得查询语句where前面的选择语句
       tmpSql := newSql || ' where rownum < 1';--加上条件
    else
        tmpSql := strSql;
    end if;
    open v_cur for tmpSql; */
-- 返回空纪录
    open v_cur for  strSql;
    return ;
 end if ;

 if iPagesize=
0 then
   
-- select SETVALUE into autoPageNumber from sysparameter@demotemplate where parametername='@@AutoPageSize';
     tmpPageSize:=
1000 ;
 else
     tmpPageSize:=iPagesize;
 end if ;

 if iRecordCount<tmpPageSize then  
-- 所有记录只有一页
    oFlag:=
17 ;
    iPagenum:=
1 ;
        open v_cur for strSql;
    return ;
 end if ;

 
-- 计算总页数
 tmpNum:=iRecordCount/tmpPageSize;
 if tmpNum>trunc(tmpNum) then
    iPagenum:=trunc(tmpNum)+
1 ;
 else
    iPagenum:=trunc(tmpNum);
 end if ;
 oFlag:=
18 ;
 if (iCurrentpage>iPagenum or iCurrentpage<
1 ) then   -- 页码不对
    oFlag:=
19 ;
    oFlag:=
3 ;   -- 页码不对
    open v_cur for
'select 1 from dual' ;
    return ;
 end if ;

 
-- 计算第一个iRow
 if iCurrentpage=
1 then
    tmpRow:=
1 ;
    tmpPageSize:=tmpPageSize+
1 ;
    tmpSql:=tmpSql ||
' where rownum<' || tmpPageSize || ' and iRow>=' || tmpRow;
 else
    tmpRow:=(iCurrentpage-
1 )*tmpPageSize+ 1 ;
    tmpPageSize:=tmpPageSize+
1 ;
    tmpSql:=tmpSql ||
' where rownum<' || tmpPageSize || ' and iRow>=' || tmpRow;
 end if ;
 
--tmpPageSize := tmpRow + iPageSize + 1;

 open v_cur for tmpSql;
 oFlag:=iPagenum;

 exception
    when others then
      begin
       
--oFlag:=0;   -- 操作失败
        open v_cur for
'select 1 from dual where rownum<1' ;
        errDesc := sqlerrm ;
      end ;
end ;

存储过程调用存储过程

CREATE   OR   REPLACE   PROCEDURE   A  
  (  
      an_in1               IN           NUMBER,  
      an_in2               IN           NUMBER,  
      avc_out1           OUT         VARCHAR2,  
      avc_out2           OUT         VARCHAR2  
  )  
  begin  
  ...  
  end  
  -------------------------------------------------------  
  CREATE   OR   REPLACE   PROCEDURE   B  
  (  
      an_in1               IN           NUMBER,  
      an_in2               IN           NUMBER,  
      avc_out1           OUT         VARCHAR2,  
      avc_out2           OUT         VARCHAR2)  
  begin  
  ...  
   
  A(an_v1,an_v2,avc_out1,avc_out2);  
   
  end;

 出自---http://www.cnblogs.com/yuanws/archive/2007/09/24/904411.html

 

分享到:
评论

相关推荐

    oracle 学习心得与总结

    以下是我对Oracle学习的一些心得和总结,主要聚焦于数据库对象,尤其是表及其约束。 1. **数据库对象**: 数据库对象是Oracle中的基本组成部分,包括表、视图、索引、存储过程、函数、触发器等。这些对象共同构成...

    Oracle入门心得文档

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,对于初学者来说,掌握其基本概念和操作是进入IT行业的关键步骤。本文将围绕"Oracle入门心得"这一主题,详细讲解Oracle体系结构、数据库以及逻辑结构,帮助你...

    oracle学习心得总结

    ### Oracle学习心得总结 在IT领域中,Oracle数据库因其强大的功能和广泛的适用性而备受青睐。对于初学者而言,掌握Oracle的基本操作是非常重要的一步。本文将根据提供的文档内容,总结和扩展Oracle数据库的基础知识...

    《Oracle 入门心得》PDF高清电子书

    《Oracle 入门心得》这本书可能涵盖了以上部分或全部知识点,通过阅读和实践,初学者能够建立起对Oracle数据库系统的全面认识,并逐步掌握其使用技巧。在学习过程中,理论与实践相结合,多做实验,遇到问题勇于探索...

    Oracle使用心得.docx

    Oracle 使用心得 Oracle 是一种关系数据库管理系统(RDBMS),它提供了一个强大且功能丰富的平台,用于存储、管理和检索数据。在本篇文章中,我们将探讨 Oracle 使用心得,包括安装、配置、用户管理和权限设置等...

    oracle的入门心得

    Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,尤其在企业级应用中占据着重要地位。对于初学者来说,掌握Oracle的基本概念、操作及管理是至关重要的。以下是对Oracle入门的一些关键知识点的详细...

    oracle学习心得.doc

    Oracle 学习心得 Oracle 学习心得是一个专业的数据库管理系统,具有可移植性、可联结性等特点。它的总体构造包括文件构造、内存构造和进程构造。文件构造包括五类文件:代码文件、数据文件、日志文件、控制文件和...

    oracle数据库心得

    ### Oracle数据库连接配置心得 #### 一、Oracle数据库简介 Oracle数据库是由美国Oracle公司开发的一款关系型数据库管理系统,广泛应用于企业级数据管理场景。Oracle以其高性能、可靠性和丰富的功能而著称,在金融...

    oracle11g学习心得

    在长期的学习和使用过程中,我对Oracle 11g有了深入的理解和丰富的实践经验,以下是我总结的一些关键知识点。 1. **安装与配置**:Oracle 11g的安装分为两大部分,即数据库服务器端的安装和客户端工具的安装。...

    oracle个人学习心得

    "Oracle个人学习心得"这一主题深入探讨了Oracle数据库的学习经验与技巧,以下将详细解析Oracle的核心概念、学习路径以及在实际应用中的重要性。 ### Oracle数据库概览 Oracle数据库是一种关系型数据库管理系统...

    ORACLE使用心得笔记

    本文将基于“ORACLE使用心得笔记”的标题和描述,深入解析Oracle数据库的一些关键知识点,涵盖基本操作、数据查询优化、数据处理技巧等方面。 ### 一、SQLPlus基础操作 #### 1. SQLPlus启动与连接 - 使用`...

    oracle图形界面使用心得

    Oracle 图形界面使用心得 Oracle 图形界面是一种强大且功能丰富的数据库管理系统,具有强大的数据定义、操纵、组织和存储和维护等管理功能,还具有一定的数据通信接口功能。 Oracle 数据库是其中一种优秀的数据库,...

    oracle心得

    ### Oracle 心得 #### 一、Oracle 客户端工具介绍 在开始学习 Oracle 数据库之前,我们首先需要了解几种常用的 Oracle 客户端工具,这些工具可以帮助我们更好地管理和操作数据库。 **1. SQL*Plus** - **简介**:...

    Oracle入门心得

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,它以其高效、稳定和强大的功能而闻名。对于初学者来说,掌握Oracle的基础知识是至关重要的。本文将深入探讨Oracle的入门要点,帮助你快速理解并开始...

    Oracle的初学者入门心得

    开发主要是编写存储过程、触发器等,还有就是使用Oracle的Develop工具做form。需要有较强的逻辑思维和创造能力,个人觉得会比较辛苦,是青春饭;管理则需要对Oracle数据库的原理有深刻的认识,有全局操纵的能力和...

    ORACLE心得   

    ORACLE心得 

    Oracle的入门心得

    Oracle的入门心得,学习Oracle的必备工具

    大话Oracle RAC心得笔记

    大话Oracle RAC心得笔记,人家这笔记做的很牛逼,建议看看

Global site tag (gtag.js) - Google Analytics