oracle 10怎么用,Oracle 10个应用技巧

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 wher e 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.b m 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 user_ indexes order by table_name; 触发器:   select trigger_name,trigger_type,table_owner,table_name,status from user_t riggers; 快照:   select owner,name,master,table_name,last_refresh,next from user_snapshots order by owner,next; 同义词:   select * from syn; 序列:   select * from seq; 数据库链路:   select * from user_db_links; 约束限制:   select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constr aints; 本用户读取其他用户对象的权限:   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_fr ee_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; 7.如何在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, '写入的信息\n'); 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 I NIT.ORA.'); end; PutF()过程用来以指定格式把文本写入一个文件 Put_Line()过程把一个指定的字符串写入文件并在文件中开始新的一行 8.怎样计算表中的记录数? 系统环境: 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 表名; 9.怎样查看表的结构? 系统环境: 1、操作系统:Windows 2000 2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3、安装路径:C:\ORACLE 实现方法: 查看当前用户下有什么对象(表、视图、同义词、快照) SQL> select * from tab; 查看表结构 SQL> describe 表名 简写以上命令 SQL> desc 表名 10.如何用SQL生成SQL批处理文件? 软件环境: 1、Windows NT4.0+ORACLE 8.0.4 2、ORACLE安装路径为:C:\ORANT 问题提出: 1、用户需要对数据库用户下的每一张表都执行一个相同的SQL操作,这时,一遍、一遍的 键入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 tabt ype='TABLE'; 把所有符合条件的表的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; 快速编译所有视图 ----当在把数据库倒入到新的服务器上后(数据库重

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值