`
buliedian
  • 浏览: 1197807 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle 小技巧

阅读更多

1. 

     查看版本号:select * from v$version;

2.      在imp导入数据时可以加上

ignore=y, 这样就会忽略对象创建错误信息,这样有的数据会报错,没有的数       据就会插入表中。

Rows=n时只能导入表结构,数据导入不了。

Show=y可以显示导出文件的内容,可以帮助找到错误。

Destroy=y时就会覆盖已经存在的数据文件。(我试过不行,不知道是不是我理解有问题)

Exp help=y找到详细的帮助

3.      在sqlplus 下调用exp:

 SQL>  host exp 'wang/wang@demo' file=c:/aa.dmp log=c:/aa.log tables=aa;

4.      使用spool

Sql>sqool c:/aa.tet

Sql>spool off

5.      在cmd下启动oracle

Lsnrctl  start

Oradim –startup  -sid  demo

6.      union只是将两个结果联结起来一起显示,并不是联结两个表,UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。 UNION ALLUNION 不同之处在于 UNION ALL 会将每一笔符合条件的资料都列出来,无论资料值有无重复。

   网上有个人要做一个存储过程我有两个表.tempa,tempbtempa:内容为:

AA COL1  COL2

1   1    dd

1   1    SS

2   3    BB

TEMPB 内容为AA  COL1 COL2

1    3   S

1    4   SS

2    5   BB

现在要把这两个表连在一起;当TEMPA中的AA 和 COL2 同TEMPB中的AA和COL2相同,则TEMPA.COL1+TEMPB.COL1 付值给新建的标TEMPC,若不同,则分别插入到表TEMPC,中.

insert into tempc

select aa,sum(col1) col1 ,col2

from (select * from tempa

      union all

      select * from tempb) t

group by t.aa,t.col2;

在这里注意group by 可以跟两个字段,这样就可以实现以两个字段都相等来分组。同时注意临时表的使,总是想不起来。

其实还有一种方法:

Merge into tempa t2

Using  tempb  t1

On (t1.aa=t2.aa and t1.col2=t2.col2)

When matched then update set  t2.col1=t1.col1+t2.col1

When not matched then insert  values(t1.aa,t1.col1,t1.col2);

7.      察看用户下的所有对象:

Select * from obj;

其中有object_name和object_type字段等字段,方便查找。

8.      update多个字段,这种写法效率也高。

 UPDATE EMP

 SET (EMP_CAT, SAL_RANGE)

 = (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)

  FROM EMP_CATEGORIES)

      WHERE EMP_DEPT = 0020;

9.      查询语句也是可是加许多判断语句的。这样可以在写的时候加许多逻辑进去。

SQL> select id,

  2  case

  3   when id in (2) then

  4   upper(sal)

  5   else

  6   lower(sal)

  7  end sal

  8  from cc;

        ID SAL

---------- --------------

         1 aa

         2 BB

             3 cc

10.  带参数的游标,这样可以传入不同的参数实现不同的查询,比如传入的用户id不同对应的发布信息不同:

declare

cursor e_c(no varchar2) is

select keyword from tb_publishinfo where userid=no;

v_key  tb_publishinfo.keyword%TYPE;

begin

open e_c(&dd);

loop

fetch e_c into v_key;

exit when e_c%notfound;

dbms_output.put_line(v_key);

end loop;

close e_c;

    end;

11.  根据不同的条件进行不同的输出,使用的是游标,但是要先创建一个包来先申明以下这个类型。

CREATE OR REPLACE PACKAGE refcursor

AS

   TYPE ref_cur IS REF CURSOR;

END refcursor;

在使用游标来根据不同条件返回不同的记录集:

CREATE OR REPLACE FUNCTION f_d (

   uid   IN   number

)

   RETURN refcursor.ref_cur

IS

   cur   refcursor.ref_cur;

BEGIN

   IF uid=1

   THEN

      OPEN cur FOR

         SELECT   userid

             FROM tb_publishinfo tp

            WHERE tp.id<10000;

   END IF;

   IF uid=2

   THEN

      OPEN cur FOR

        SELECT   userid

             FROM tb_publishinfo tp

           WHERE tp.id>10000;

 END IF;

   RETURN cur;

EXCEPTION

   WHEN NO_DATA_FOUND

   THEN

      NULL;

   WHEN OTHERS

   THEN

      RAISE;

END f_d;

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics