分享
 
 
 

Oracle 应用技巧

王朝oracle·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

1.Oracle中如何实现某一字段自动增加1?

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

实现方法:

建立一个最小为1,最大为999999999的一个序列号会自动循环的序列

create sequence 序列名

increment by 1

start with 1

maxvalue 999999999

cycle;

当向表中插入数据时,SQL语句写法如下:

SQL> insert into 表名 values(序列名.nextval,列1值,列2值);

2.如何改变表中列的名字?

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

实现方法: SQL> create table t2(新列名) as select * from t1; --以新名字命名列名

SQL> drop table t1; --删除表1

SQL> rename t2 to t1; --把表2改名为表1

3.如何删除表中的列?

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

实现方法: SQL> create table t2 as select from t1;--以第一个表中的某列建立第二个新表

SQL> drop table t1; --删除表1

SQL> rename t2 to t1; --把表2改名为表1

Oracle 8i及以上版本中,可以使用以下语句 SQL> alter table 表1 drop column 列1;

4.如何查找、删除表中重复的记录

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

问题提出:

1、当我们想要为一个表创建唯一索引时,假如该表有重复的记录,则无法创建成功。

方法原理:

1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,

rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。

2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重

那些具有最大rowid的就可以了,其余全部删除。

3、以下语句用到了3项技巧:rowid、子查询、别名。

实现方法: SQL> create table a (

2 bm char(4), --编码

3 mc varchar2(20) --名称

4 )

5 /

表已建立.

SQL> insert into a values('1111','1111');

SQL> insert into a values('1112','1111');

SQL> insert into a values('1113','1111');

SQL> insert into a values('1114','1111');

SQL> insert into a select * from a;

插入4个记录.

SQL> commit;

完全提交.

SQL> select rowid,bm,mc from a;

ROWID BM MC

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

000000D5.0000.0002 1111 1111

000000D5.0001.0002 1112 1111

000000D5.0002.0002 1113 1111

000000D5.0003.0002 1114 1111

000000D5.0004.0002 1111 1111

000000D5.0005.0002 1112 1111

000000D5.0006.0002 1113 1111

000000D5.0007.0002 1114 1111

查询到8记录.

查出重复记录 SQL> select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);

ROWID BM MC

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

000000D5.0000.0002 1111 1111

000000D5.0001.0002 1112 1111

000000D5.0002.0002 1113 1111

000000D5.0003.0002 1114 1111

删除重复记录 SQL> delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);

删除4个记录.

SQL> select rowid,bm,mc from a;

ROWID BM MC

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

000000D5.0004.0002 1111 1111

000000D5.0005.0002 1112 1111

000000D5.0006.0002 1113 1111

000000D5.0007.0002 1114 1111

5.查找a表中有,而在b表中没有的记录

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

实现方法: SQL> create table a (

2 bm char(4), --编码

3 mc varchar2(20) --名称

4 )

5 /

表已建立.

SQL> insert into a values('1111','1111');

SQL> insert into a values('1112','1111');

SQL> insert into a values('1113','1111');

SQL> insert into a values('1114','1111');

SQL> insert into a values('1115','1111');

SQL> create table b as select * from a where 1=2;

表已建立.

SQL> insert into b values('1111','1111');

SQL> insert into b values('1112','1111');

SQL> insert into b values('1113','1111');

SQL> insert into b values('1114','1111');

SQL> commit;

完全提交.

SQL> select * from a;

BM MC

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

1111 1111

1112 1111

1113 1111

1114 1111

1115 1111

SQL> select * from b;

BM MC

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

1111 1111

1112 1111

1113 1111

1114 1111

SQL> select bm from a where not exists (select bm from b where a.bm=b.bm);

BM MC

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

1115 1111

6.查看本用户下的各种对象的SQL脚本

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

SQL语句:

表:

select * from cat;

select * from tab;

select table_name from user_tables;

视图:

select text from user_views where view_name=upper('&view_name');

索引:

select index_name,table_owner,table_name,tablespace_name,status from

触发器:

select trigger_name,trigger_type,table_owner,table_name,status from

快照:

select owner,name,master,table_name,last_refresh,next from user_snapshots

同义词:

select * from syn;

序列:

select * from seq;

数据库链路:

select * from user_db_links;

约束限制:

select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from

本用户读取其他用户对象的权限:

select * from user_tab_privs;

本用户所拥有的系统权限:

select * from user_sys_privs;

用户:

select * from all_users order by user_id;

表空间剩余自由空间情况:

select tablespace_name,sum(bytes) 总字节数,max(bytes),count(*) from

dba_free_space group by tablespace_name;

数据字典:

select table_name from dict order by table_name;

锁及资源信息:

select * from v$lock;不包括DDL锁

数据库字符集:

select name,value$ from props$ where name='NLS_CHARACTERSET';

inin.ora参数:

select name,value from v$parameter order by name;

SQL共享池:

select sql_text from v$sqlarea;

数据库:

select * from v$database

控制文件:

select * from V$controlfile;

重做日志文件信息:

select * from V$logfile;

来自控制文件中的日志文件信息:

select * from V$log;

来自控制文件中的数据文件信息:

select * from V$datafile;

NLS参数当前值:

select * from V$nls_parameters;

ORACLE版本信息:

select * from v$version;

描述后台进程:

select * from v$bgprocess;

查看版本信息:

select * from prodUCt_component_version;

17.如何在PL/SQL中读写文件?

软件环境:

1、服务器端:Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

实现方法:

PL/SQL 3.3以上的版本中,UTL_FILE包答应用户通过PL/SQL读写操作系统文件。如下:

declare

file_handle UTL_FILE.FILE_TYPE;

begin

file_handle := UTL_FILE.FOPEN('/tmp', '文件名', 'w');

UTL_FILE.PUTF(file_handle, '写入的信息 ');

UTL_FILE.FCLOSE(file_handle);

exception

WHEN utl_file.invalid_path THEN

raise_application_error(-20000, 'ERROR: Invalid path for file or path not in

end;

PutF()过程用来以指定格式把文本写入一个文件

Put_Line()过程把一个指定的字符串写入文件并在文件中开始新的一行

18.怎样计算表中的记录数?

系统环境:

1、操作系统:windows 2000

2、数据库:Oracle 8i R2 (8.1.6) for NT 企业版

3、安装路径:C:ORACLE

实现方法:

查看当前用户下有什么对象(表、视图、同义词、快照) SQL> select * from tab;

查看表结构 SQL> desc 表名

查看表中记录数 SQL> select count(*) from 表名;

SQL> select count(rowid) from 表名;

19.怎样查看表的结构?

系统环境:

1、操作系统:Windows 2000

2、数据库:Oracle 8i R2 (8.1.6) for NT 企业版

3、安装路径:C:ORACLE

实现方法:

查看当前用户下有什么对象(表、视图、同义词、快照) SQL> select * from tab;

查看表结构 SQL> describe 表名

简写以上命令 SQL> desc 表名

20.如何用SQL生成SQL批处理文件?

软件环境:

1、Windows NT4.0+ORACLE 8.0.4

2、ORACLE安装路径为:C:ORANT

问题提出:

1、用户需要对数据库用户下的每一张表都执行一个相同的SQL操作,这时,一遍、一遍

实现方法: SQL> set heading off --禁止输出列标题

SQL> set feedback off --禁止显示最后一行的计数反馈信息

列出当前用户下所有同义词的定义,可用来测试同义词的真实存在性

select 'desc 'tname from tab where taBType='SYNONYM';

查询当前用户下所有表的记录数

select 'select ''tname'',count(*) from 'tname';' from tab where

把所有符合条件的表的select权限授予为public

select 'grant select on 'table_name' to public;' from user_tables where 《

删除用户下各种对象

select 'drop 'tabtype' 'tname from tab;

删除符合条件用户 select 'drop user 'username' cascade;' from all_users where user_id>25;

快速编译所有视图

----当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,

----因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性

,快速编译。

然后执行ON.SQL即可。 SQL> @ON.SQL

当然,授权和创建同义词也可以快速进行,如: SQL> SELECT 'GRANT SELECT ON 'TNAME' TO 用户名;' FROM TAB;

SQL> SELECT 'CREATE SYNONYM 'TNAME' FOR 用户名.'TNAME';' FROM TAB;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有