Oracle常用问题解答
(1)[Q]如何插入单引号到数据库表中
[A]可以用ASCII码处理,其它特殊字符如&也一样,如
insert into t values('i'||chr(39)||'m'); -- chr(39)代表字符'
或者用两个单引号表示一个
or insert into t values('I''m'); -- 两个''可以表示一个'
(2)[Q]随机抽取前N条记录的问题
[A]8i以上版本
select * from (select * from tablename order by dbms_random.value) where rownum< N;
注:dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql
dbms_random.value(100,200)可以产生100到200范围的随机数
(3)[Q]怎么样抽取重复记录
[A]select * from table t1 where t1.rowid !=
(select max(rowid) from table t2
where t1.id=t2.id and t1.name=t2.name)
或者
select count(*), t.col_a,t.col_b from table t
group by col_a,col_b
having count(*)>1
如果想删除重复记录,可以把第一个语句的select替换为delete
(4)[Q]怎么样设置自治事务
[A]8i以上版本,不影响主事务
pragma autonomous_transaction;
……
commit|rollback;
(5)[Q]怎么样在过程中暂停指定时间
[A]DBMS_LOCK包的sleep过程
如:dbms_lock.sleep(5);表示暂停5秒。
(6)[Q]怎样创建临时表
[A]8i以上版本
create global temporary tablename(column list)
on commit preserve rows; --提交保留数据 会话临时表
on commit delete rows; --提交删除数据 事务临时表
临时表是相对于会话的,别的会话看不到该会话的数据。
(7)[Q]怎么样在PL/SQL中执行DDL语句
[A]1、8i以下版本dbms_sql包
2、8i以上版本还可以用
execute immediate sql;
dbms_utility.exec_ddl_statement('sql');
(8)[Q]怎么样获取IP地址
[A]服务器(817以上):utl_inaddr.get_host_address
客户端:sys_context('userenv','ip_address')
(9)[Q]怎么样在ORACLE中定时运行存储过程
[A]可以利用dbms_job包来定时运行作业,如执行存储过程,一个简单的例子,提交一个作业:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno, 'ur_procedure;',SYSDATE,'SYSDATE + 1');
commit;
END;
之后,就可以用以下语句查询已经提交的作业
select * from user_jobs;
(10)[Q]怎么样从数据库中获得
相关文档:
什么是合并多行字符串(连接字符串)呢,例如:
SQL> desc test;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
COUNTRY VARCHAR2(20) Y &nb ......
共需要创建两个文件在同一个目录下:
一:
文件oracle_cool_backup.bat,内容如下:
Remark 定义时间日期变量
set date=%date:~0,10%
set h=%time:~0,2%
set m=%time:~3,2%
set s=%time:~6,2%
set tempvar=%date%-%h%-%m%-%s%
md "c:/temp/%tempvar%/"
echo %tempvar%
sqlplus /nolog @oracle_cool_backup.sql % ......
||------- 数据库管理 -------||
//显示初始化参数
show parameter;
//数据库表的逻辑备份与恢复
//导出
1.导出表
exp userid=scott/tiger@ORCL tables=(emp) file=d:\e1.dmp
2.导出其他方案的表,首先要确认自己是sysdba身份
exp userid=system@919959ORCL tables=(scott.emp) file=d:\e1.d ......
常用SQL查询:
1、查看表空间的名称及大小
select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
from dba_tablespaces t, dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
2、查看表空间物理文件的名称及大小
select t ......
1. 查询数据库现在的表空间
select tablespace_name, file_name, sum(bytes)/1024/1024 table_size from dba_data_files group by tablespace_name,file_name;
2. 建立表空间
CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M;
3.删除表空间
DROP TABLESPACE data01 INCLUDING CONTENTS ......