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 ......
用sql*plus或第三方可以运行sql语句的程序登录数据库:
增加一个列:
ALTER TABLE 表名 ADD(列名 数据类型);
如:
ALTER TABLE emp ADD(weight NUMBER(38,0));
修改一个列的数据类型(一般限于修改长度,修改为一个不同类型时有诸多限制):
ALTER TABLE 表名 MODIFY(列名 数据类型);
如:
ALTER TABLE emp MODIFY(wei ......
第一部分:oracle pl/sql实例练习(1)
一、使用scott/tiger用户下的emp表和dept表完成下列练习,表的结构说明如下
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
工资 = 薪金 + 佣金
也可以通过 ......
常用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 ......
一些基本的Oracle命令
基本命令
连接数据库
C:>SQLPLUS /NOLOG
SQL>CONN / AS SYSDBA
1.Oracle 关闭
SQL>SHUTDOWN (ABORT|IMMEDIATE|NORMAL)
2.Oracle 启动
SQL>STARTUP (REMOUNT|MOUNT|OPENT)
3.SQL> HELP SHOW
SHOW
----
Shows the value of a SQL*Plus system variable, or the
......