- 浏览: 342347 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
努力吧飞翔:
...
[ExtJS] MVC应用架构示例 -
coolnight:
[Maven]Nexus 安装与配置 -
Kevin_jiang2011:
官网的文档写的不好。 简单的执行命令,又要重新下载一个ecli ...
jBPM5 入门 -
litterdeer:
好东西....
[ExtJS] MVC应用架构示例 -
basherone:
可以用,谢谢了
[ExtJS] MVC应用架构示例
Oracle 基础
----------------
1.
sqlplus
1.1
连接数据库:
sqlplus "sys/pwd as sysdba"
sqlplus scott/tiger
conn scott/tiger
1.2
帮助:
help index
? SET
1.3
保存与加载SQL脚本
save c:\dept.sql
spool c:\dept.sql
spool off
@c:\dept.sql
edit c:\dept.sql
1.4
查询表结构:
DESC dept;
1.5
查询当前用户:
SELECT user FROM dual;
2
用户管理
OS 用户组:
ORA_DBA
SQL> conn sys/pwd as sysdba
SQL> CREATE USER userdb IDENTIFIED BY userdb;
用户已创建。
SQL> CREATE USER sysdb IDENTIFIED BY sysdb;
用户已创建。
SQL> ALTER user sysdb ACCOUNT UNLOCK;
用户已更改。
SQL> ALTER user userdb ACCOUNT UNLOCK;
用户已更改。
SQL> grant connect to userdb;
授权成功。
SQL> grant connect to sysdb;
授权成功。
SQL> grant sysdba to sysdb;
授权成功。
SQL> grant sysdba to userdb;
授权成功。
SQL> grant connect, resource, sysdba to userdb with admin option;
授权成功。
SQL> grant connect, resource, sysdba to sysdb with admin option;
授权成功。
SQL> revoke sysdba from userdb;
撤销成功。
SQL> revoke sysdba from sysdb;
撤销成功。
3.
表空间管理
SQL> CREATE TABLESPACE sysdb
2 DATAFILE 'E:\app\oradata\bisoft\SYSDB.MDF' SIZE 50M;
表空间已创建。
SQL> CREATE TABLE test(id int primary key, name varchar2(20)) TABLESPACE sysdb;
表已创建。
4.
查询当前用户的所有表对象:
SQL> select table_name, tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEST USERS
SALGRADE USERS
BONUS USERS
EMP USERS
DEPT USERS
5.
PL/SQL
异常处理:
系统异常:
DUP_VALUE_ON_INDEX:
违反惟一约束
NO_DATA_FOUND:
查询数据没有返回值
TOO_MANY_ROWS:
查询语句返回了多行
VALUE_ERROR:
违反字段取值约束
ZERO_DIVIDE:
除零错误
...
5.2
记录
5.3
游标
5.4
存储过程
参数:
IN
OUT
IN OUT
参数不能指定长度,变量必须指定长度.
查看编译存储过程错误:
SHOW ERRORS PROCEDURE proc;
6
语句块必须以分号结束.
7
全局变量
VARIABLE SUM NUMBER;
在声明块之前定义
引用:
:SUM:=0;
8
查看源码:
select * from user_source;
9
函数
函数多了个返回值.
函数可以在SQL中使用.
10
大批量数据导入
alter table member nologging;
alter table member logging;
大约 10分钟左右
11
千万数据查询
行转列
----------------
1.
sqlplus
1.1
连接数据库:
sqlplus "sys/pwd as sysdba"
sqlplus scott/tiger
conn scott/tiger
1.2
帮助:
help index
? SET
1.3
保存与加载SQL脚本
save c:\dept.sql
spool c:\dept.sql
spool off
@c:\dept.sql
edit c:\dept.sql
1.4
查询表结构:
DESC dept;
1.5
查询当前用户:
SELECT user FROM dual;
2
用户管理
OS 用户组:
ORA_DBA
SQL> conn sys/pwd as sysdba
SQL> CREATE USER userdb IDENTIFIED BY userdb;
用户已创建。
SQL> CREATE USER sysdb IDENTIFIED BY sysdb;
用户已创建。
SQL> ALTER user sysdb ACCOUNT UNLOCK;
用户已更改。
SQL> ALTER user userdb ACCOUNT UNLOCK;
用户已更改。
SQL> grant connect to userdb;
授权成功。
SQL> grant connect to sysdb;
授权成功。
SQL> grant sysdba to sysdb;
授权成功。
SQL> grant sysdba to userdb;
授权成功。
SQL> grant connect, resource, sysdba to userdb with admin option;
授权成功。
SQL> grant connect, resource, sysdba to sysdb with admin option;
授权成功。
SQL> revoke sysdba from userdb;
撤销成功。
SQL> revoke sysdba from sysdb;
撤销成功。
3.
表空间管理
SQL> CREATE TABLESPACE sysdb
2 DATAFILE 'E:\app\oradata\bisoft\SYSDB.MDF' SIZE 50M;
表空间已创建。
SQL> CREATE TABLE test(id int primary key, name varchar2(20)) TABLESPACE sysdb;
表已创建。
4.
查询当前用户的所有表对象:
SQL> select table_name, tablespace_name from user_tables;
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEST USERS
SALGRADE USERS
BONUS USERS
EMP USERS
DEPT USERS
5.
PL/SQL
SQL> SET SERVEROUTPUT ON SIZE 1000000 SQL> l 1 DECLARE 2 x varchar2(50); 3 BEGIN 4 x:='Hello World!'; 5 DBMS_OUTPUT.PUT_LINE('x='||x); 6* END; SQL> / x=Hello World! PL/SQL 过程已成功完成。
4 DECLARE 5 x varchar2(50); 6 y INTEGER:=100; 7 i number:=0; 8 BEGIN 9 -- 赋值 0 x:='Hello World!'; 1 DBMS_OUTPUT.PUT_LINE('x='||x||' y='||y); 2 -- IF THEN ELSE, 注意ELSIF ,不是ELSEIF 3 IF y=10 THEN 4 x:='ok'; 5 ELSIF y=100 THEN 6 x:='error'; 7 ELSE 8 x:='none'; 9 END IF; 0 DBMS_OUTPUT.PUT_LINE('x='||x||' y='||y); 1 -- CASE WHEN THEN ELSE 2 CASE 3 WHEN y=0 THEN 4 x:='ok2'; 5 WHEN y=100 THEN 6 x:='error2'; 7 ELSE 8 x:='none'; 9 END CASE; 0 DBMS_OUTPUT.PUT_LINE('x='||x||' y='||y); 1 -- LOOP, 基本循环 2 LOOP 3 i:=i+1; 4 IF i > 3 THEN 5 EXIT; 6 END IF; 7 DBMS_OUTPUT.PUT_LINE('i='||i); 8 END LOOP; 9 -- WHILE, 条件循环 0 i:=0; 1 WHILE i <=3 LOOP 2 DBMS_OUTPUT.PUT_LINE('i='||i); 3 i:=i+1; 4 END LOOP; 5 -- FOR, 计数器可以不用声明, 反向输出reverse. 6 FOR k IN 1..5 LOOP 7 DBMS_OUTPUT.PUT_LINE('k='||k); 8 END LOOP; 9 FOR k IN REVERSE 1..5 LOOP 0 DBMS_OUTPUT.PUT_LINE('k='||k); 1 END LOOP; 2 -- GOTO, 模拟循环 3 i:=0; 4 -- 标签 5 <<repeat_loop>> 6 i:=i+1; 7 DBMS_OUTPUT.PUT_LINE('i='||i); 8 IF i<3 THEN 9 GOTO repeat_loop; 0 END IF; 1* END; L> /
异常处理:
1 DECLARE 2 test varchar2(50); 3 BEGIN 4 SELECT dname INTO test FROM dept WHERE deptno=0; 5 DBMS_OUTPUT.PUT_LINE(test); 6 -- 系统异常 NO_DATA_FOUND 7 EXCEPTION 8 WHEN NO_DATA_FOUND THEN 9 DBMS_OUTPUT.PUT_LINE('未查询到数据.'); 10* END; SQL> / 未查询到数据. 1 DECLARE 2 test varchar2(50); 3 e exception; 4 BEGIN 5 SELECT dname INTO test FROM dept WHERE deptno=10; 6 IF test<>'XX部门' THEN 7 RAISE e; 8 END IF; 9 DBMS_OUTPUT.PUT_LINE(test); 10 -- 自定义异常 e 11 EXCEPTION 12 WHEN e THEN 13 DBMS_OUTPUT.PUT_LINE('未查询到数据XX部门.'); 14* END; SQL> / 未查询到数据XX部门. PL/SQL 过程已成功完成。
系统异常:
DUP_VALUE_ON_INDEX:
违反惟一约束
NO_DATA_FOUND:
查询数据没有返回值
TOO_MANY_ROWS:
查询语句返回了多行
VALUE_ERROR:
违反字段取值约束
ZERO_DIVIDE:
除零错误
...
5.2
记录
DECLARE TYPE myrecord IS RECORD( id dept.deptno%TYPE, name dept.dname%TYPE ); myrecord_instance myrecord; BEGIN SELECT deptno,dname INTO myrecord_instance FROM dept WHERE deptno=10; DBMS_OUTPUT.PUT_LINE('id= '||myrecord_instance.id||' name= '||myrecord_instance.name); END; / SQL> / id= 10 name= ACCOUNTING PL/SQL 过程已成功完成。
-- 简洁定义,直接映射表中每个字段 DECLARE dept_record dept%ROWTYPE; BEGIN SELECT * INTO dept_record FROM dept WHERE deptno=10; DBMS_OUTPUT.PUT_LINE('deptno= '||dept_record.deptno||' dname= '||dept_record.dname); END; /
5.3
游标
1 DECLARE 2 -- 显示游标 3 -- 1 声明游标, 有参数 4 CURSOR mycur(id dept.deptno%TYPE) IS 5 SELECT * FROM dept WHERE deptno = id; 6 dept_record dept%ROWTYPE; 7 BEGIN 8 -- 2 打开游标 9 OPEN mycur(10); 10 -- 3 使用游标 11 FETCH mycur INTO dept_record; -- 取第一条 12 WHILE mycur%FOUND LOOP 13 DBMS_OUTPUT.PUT_LINE(dept_record.deptno||' '||dept_record.dname| |' '||dept_record.loc); 14 FETCH mycur INTO dept_record; -- 取下一条 15 END LOOP; 16 -- 4 关闭游标 17 CLOSE mycur; 18* END; SQL> / 10 ACCOUNTING NEW YORK PL/SQL 过程已成功完成。
1 DECLARE 2 -- 隐式游标 3 -- 1 声明游标 4 CURSOR mycur(id dept.deptno%TYPE) IS 5 SELECT * FROM dept WHERE deptno = id; 6 BEGIN 7 -- 2 使用游标 8 FOR tmpcur IN mycur(10) LOOP 9 DBMS_OUTPUT.PUT_LINE(tmpcur.deptno||' '||tmpcur.dname||' '||tmpc ur.loc); 10 END LOOP; 11* END; SQL> / 10 ACCOUNTING NEW YORK PL/SQL 过程已成功完成。
DECLARE -- 使用游标更新数据 CURSOR mycur(id dept.deptno%TYPE) IS SELECT dname FROM dept WHERE deptno = id FOR UPDATE; new_dname dept.dname%TYPE:='财务部'; old_dname dept.dname%TYPE; BEGIN OPEN mycur(10); FETCH mycur INTO old_dname; WHILE mycur%FOUND LOOP UPDATE dept SET dname=new_dname WHERE CURRENT OF mycur; DBMS_OUTPUT.PUT_LINE(old_dname||' -> '||new_dname); FETCH mycur INTO old_dname; END LOOP; END; / ACCOUNTING -> 财务部 PL/SQL 过程已成功完成。
5.4
存储过程
参数:
IN
OUT
IN OUT
参数不能指定长度,变量必须指定长度.
查看编译存储过程错误:
SHOW ERRORS PROCEDURE proc;
6
语句块必须以分号结束.
7
全局变量
VARIABLE SUM NUMBER;
在声明块之前定义
引用:
:SUM:=0;
8
查看源码:
select * from user_source;
9
函数
函数多了个返回值.
函数可以在SQL中使用.
10
大批量数据导入
alter table member nologging;
BEGIN for i in 1..1000000 loop insert /*+ append */ into member values(i, 36, 9000); end loop; commit; for i in 1000001..2000000 loop insert /*+ append */ into member values(i, 25, 8000); end loop; commit; for i in 2000001..3000000 loop insert /*+ append */ into member values(i, 36, 10000); end loop; commit; for i in 3000001..4000000 loop insert /*+ append */ into member values(i, 20, 12000); end loop; commit; for i in 4000001..5000000 loop insert /*+ append */ into member values(i, 40, 8500); end loop; commit; for i in 5000001..6000000 loop insert /*+ append */ into member values(i, 24, 7000); end loop; commit; for i in 6000001..7000000 loop insert /*+ append */ into member values(i, 38, 15000); end loop; commit; for i in 7000001..8000000 loop insert /*+ append */ into member values(i, 21, 20000); end loop; commit; for i in 8000001..9000000 loop insert /*+ append */ into member values(i, 39, 60000); end loop; commit; for i in 9000001..10000000 loop insert /*+ append */ into member values(i, 20, 6000); end loop; commit; END; /
alter table member logging;
大约 10分钟左右
11
千万数据查询
行转列
select sum(decode(rownum, 1, a, 0)) AS "A", sum(decode(rownum, 2, a, 0)) AS "B", sum(decode(rownum, 3, a, 0)) AS "C", sum(decode(rownum, 4, a, 0)) AS "D" from ( select count(1) a from member where age > 35 and sal < 9999 union all select count(1) a from member where age > 35 and sal > 9999 union all select count(1) a from member where age < 35 and sal < 9999 union all select count(1) a from member where age < 35 and sal > 9999 );
发表评论
-
oracle 存储过程基础
2013-10-17 03:48 1072oracle 存储过程基础 ----------------- ... -
[oracle]LogMiner的使用
2013-09-29 22:42 1064LogMiner -- 01 功能: 版本: 8i ... -
[RMAN] Oracle11G 联机备份与恢复
2012-04-19 23:54 2564Oracle11G 联机备份与恢复 ------------- ... -
Oracle数据备份与恢复
2011-12-27 23:02 1239-- 创建用户 create user biso ... -
Schema Export
2011-08-25 18:26 1097build.xml <?xml version ... -
MySQL JDBC Connector/J 5.x API
2011-08-23 23:49 1343MySql.java package cn.bisoft. ... -
数据库死锁问题
2011-08-04 02:52 1153数据库死锁: 锁分类: S 共享锁 U 更新锁 X 排它锁 ... -
HSQLDB 使用
2011-02-19 23:46 19181. 服务器模式 应用场景: 数据库服务器 应用步骤: ... -
Oracle 连接
2011-01-20 03:04 1201Oracle 连接 1. 连接 -- 查询当前用户 ... -
Oracle 存储过程示例
2011-01-20 02:59 1073Oracle 存储过程示例 1. S ... -
Oralce 锁机制
2011-01-14 19:09 1332Oracle DML 锁类型 1. exclusive 排它锁 ... -
ORACLE 1722 错误案例分析
2010-08-22 02:55 2346-- ORACLE 1722 错误案例分析 -- 1 ... -
ORACLE 查询Oracle错误码
2010-08-06 05:31 21531.创建一个表存储错误码 SQL> create ... -
[PDF]PLSQL Developer v7.0 用户指南中文版
2010-08-01 22:51 1423使用PLSQL Developer 工具必不能少的一本 ... -
Oracle 11g 开发指南学习笔记一
2010-06-21 00:59 1480基本概念: 1. 关系数据 ... -
hsqldb 源码剖析
2010-03-06 01:16 1997hsqldb,一个只有700多k的小型数据库. 内嵌支持JD ...
相关推荐
oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 ...
对于初学者来说,掌握Oracle基础知识是进入数据库领域的第一步。本文将深入浅出地介绍Oracle数据库的一些核心概念和基本操作,帮助你快速入门。 一、Oracle数据库系统概述 Oracle数据库是由美国Oracle公司开发的,...
oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料
Oracle 基础教程 Oracle 是一款流行的关系型数据库管理系统,由 Oracle 公司开发和维护。作为一个功能强大且广泛应用的数据库管理系统,Oracle 具有强大的数据存储和管理能力,广泛应用于各种 Industries,包括金融...
通过本Oracle基础教程PPT,你将逐步了解并掌握这些概念,为你的Oracle学习之路打下坚实基础。随着对Oracle的理解加深,你还可以进一步探索高级主题,如数据仓库、分布式数据库、RAC集群等。学习Oracle不仅是技术的...
以下将详细讲解Oracle基础知识,包括数据库管理、表的创建与维护、SQL查询技巧、权限管理以及PL/SQL编程等方面。 1. **Oracle数据库优势** Oracle数据库因其高性能、高可用性和安全性而受到青睐。它支持大规模并发...
这个"oracle基础知识考试题_答案.zip"压缩包文件包含了关于Oracle数据库的基础知识学习材料,特别是针对初学者或者准备Oracle相关资格考试的人员。 首先,Oracle数据库的核心概念包括SQL(结构化查询语言)的使用,...
本资料“oracle基础知识回顾与练习.zip”是针对Oracle数据库的基础知识进行整理,采用纯SQL语句的形式,适合初学者及需要巩固基础的用户进行学习和实践。 1. SQL基础 SQL(Structured Query Language)是用于管理...
Oracle基础教程.pdf
ORACLE基础知识及故障定位 学校oracle基础知识,包含所有orcale的数据库知识,以及常见问题解决思路,解决方案,问题怎么定位。
oracle基础创建表,删除表,修改表,查看表的结构和数据,添加数据语法:删除数据语法,更新数据语法:基础查询语法:
《Oracle基础教程》是由James Perry和Gerald Post合著,并由钟鸣、郝玉洁等人翻译的一本教育性书籍,旨在帮助初学者和专业人士理解Oracle数据库的基础知识。源码下载部分提供了书中各章节实例的数据文件,使读者能够...
本文将基于"Oracle基础资料"这一主题,结合提供的压缩包文件"Oracle8i_9i数据库基础.doc",深入探讨Oracle数据库的基础知识,包括其核心概念、数据类型、SQL语句、表的创建以及备份恢复策略。 首先,Oracle数据库的...
oracle基础教程,很适合oracle的学习和数据库的操作练习。同时里面主要是以练习为主。包括了ORACLE的基础操作。
这篇“Oracle基础培训文档”旨在为初学者提供一个全面了解Oracle数据库的平台,帮助大家掌握其基本概念、操作和管理技巧。 首先,我们从基础开始,Oracle数据库的核心是SQL(结构化查询语言),它是用于管理和处理...
"Oracle基础教程.pdf" 提供了丰富的学习资源,共分为21章,涵盖了Oracle数据库的核心概念和技术。 第1章:Oracle简介 本章将介绍Oracle数据库的历史、特点和应用领域,以及它在现代企业级数据管理中的重要地位。你...
以上是Oracle基础训练的主要内容,通过深入学习和实践,你将能熟练掌握Oracle数据库的基础操作和高级特性。"Oracle基礎教程(一).ppt"至"Oracle基礎教程(三).ppt"中的材料将帮助你逐步掌握这些知识,为你的数据库管理...
"Oracle基础知识"涵盖了SQL语言的基本概念以及Oracle 10G版本的相关特性。以下将详细介绍这些知识点。 首先,SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言。SQL基础包括以下几个部分...
Oracle 基础知识点总览 Oracle 基础知识点可以概括为以下几个方面: 1. Oracle 概述 Oracle 是一种对象关系数据库管理系统(ORDBMS),它提供了关系数据库系统和面向对象数据库系统这二者的功能。Oracle 数据库...