Oracle学习指南

1.管理员进入sqlplus:

  • 运行,win键+R;
  • 输入sqlplus sys/system as sysdba;
  • 输入密码;

2.数据库的默认管理员为两种:

  • sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,默认密码为change_on_install;
  • system用户是管理操作员,具有sysoper角色,没有create database的权限,默认密码为manager;
  • 一般对数据库维护,使用普通用户。

3.oracle创建语句发生not logged on:

重启oracle服务

4.调用存储过程的两种方式及区别:

1.两种方式:

exec 过程名(参数名1,参数名2);
call 过程名(参数名1,参数名2);

2.区别:

1.exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制.
2.存储过程没有参数时,exec可以直接跟过程名(可以省略()),但call则必须带上().

5.PL/SQL基础

过程
函数
触发器
1.编写规范
注释
  • 单行注释: --
  • 多行注释:“/* ...*/”
标识符号的命名规范
  • 当定义变量时,建议使用v_作为前缀v_sal
  • 当定义常量时,建议使用c_作为前缀c_rate
  • 当定义游标时,建议使用_cursor作为后缀emp_cursor;
  • 当定义例外时,建议使用e_作为前缀e_error
2.块(block)

块是pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块。简单功能只要编写一个pl/sql块;复杂功能可能需要一个pl/sql块嵌套其他的pl/sql块。

块结构示意图

pl/sql块由三个部分组成:定义部分、执行部分、例外处理部分:

declear
/* 定义部分-----定义常量、变量、游标、例外、复杂数据类型*/
begin
/* 执行部分-----要执行的pl/sql语句和sql语句*/
exception
/* 例外处理部分-----处理运行的各种错误*/
end;
注:
[外链图片转存失败(img-r1jigHMB-1567328115605)(en-resource://database/7345:1)]

3.案例
案例一
set serveroutput on;--打开输出选项
begin
dbms_output.put_line('hello,world');--dbms_output为oracle所提供的包,put_line是其中的一个过程
insert into emp 
values('7369','SMITH','CLERK','7902',to_date('1980-12-17','yyyy-mm-dd'),'10.00',null,'20');
-- 需要将字段用单引号进行修饰,空字段用null
end;
案例二
declare
    v_ename varchar2(5);--定义字符串变量
begin
    select ename into v_ename from emp where empno=&no;
    dbms_output.put_line('雇员名:'||v_ename);
exception
when no_data_found then 
dbms_output.put_line('朋友你的输入有误!');
end;
案例三
create procedure sp_pro3(spName varchar2,newSal number) is 
begin
--执行部分,根据用户名去修改工资
update emp set sal= newSal where ename= spName;
end;
案例四(函数)
create function sp_fun2(spName varchar2) return
number is yearSal number(28,4);
begin
-- 执行部分
select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName;
return yearSal;
end;
案例五(包)
create package sp_package is 
procedure update_sal(name varchar2,newsal number);
function annual_income(name varchar2) return number;
end;

– 给sp_package实现包体

create or replace package body sp_package is 
procedure update_sal(name varchar2,newsal number)
is 
begin
update emp set sal =newsal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin
select sal*12+nvl(comm,0)*12 into annual_salary from emp where ename=name;
return annual_salary;
end;
end;
案例六
declare 
c_tax_rate number(3,2):=0.3;
-- 用户名
v_ename varchar2(5);--emp.ename%type
v_sal emp.sal%type;
v_tax_sal emp.sal%type;
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
-- 计算所得税
v_tax_sal:=v_sal*c_tax_rate;
-- 输出
dbms_output.put_line('姓名是:'||v_ename||',工资:'||v_sal||',交税:'||v_tax_sal);
end;
案例七(记录)
declare
type emp_record_type is record(name emp.ename%type,salary emp.sal%type,title emp.job%type);
sp_record emp_record_type;
begin
select ename,sal,job into sp_record
from emp where empno=&no;
dbms_output.put_line('员工名:'||sp_record.name||'工资是'||sp_record.salary);
end;
案例八(表)
declare 
type sp_table_type is table of emp.ename%type index by binary_integer;
-- 定义了一个sp_table变量。这个变量的类型是sp_table_type
sp_table sp_table_type;
begin
select ename into sp_table(0) from emp where empno=&no;
dbms_output.put_line('员工名:'||sp_table(0));
end;
案例九(游标)
declare
--定义游标类型
type sp_emp_cursor is ref cursor;
-- 定义一个游标变量
test_cursor sp_emp_cursor;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
-- 执行
-- 把test_cursor和select结合
open test_cursor for select ename,sal from emp where deptno=&no;
-- 循环取出
loop
fetch test_cursor into v_ename,v_sal;
-- 判断是否test_cursor为空
exit when test_cursor%notfound;
dbms_output.put_line(''||v_ename||'工资:'||v_sal);
end loop;
close test_cursor;
end;
案例十(条件结构)
create or replace procedure sp_pro6(spName varchar2) is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where ename=;
if v_sal<2000 then
update emp set sal=sal*1.1 where ename=spName;
end if;
end;
案例十一(循环结构–loop)
create or replace procedure sp_pro7(spName varchar2) is
-- 定义
v_num number:=1;
begin 
loop
    insert into users values(v_num,spName);
    -- 判断是否要退出循环
    exit when v_num=10;
    -- 自增
    v_num:=v_num+1;
end loop;
end;
案例十二(循环结构–while)
create or replace procedure sp_pro8(spName varchar2) is
v_num number:=11;
begin 
while v_num<=20 loop
-- 执行
    insert into users values(v_num,spName);
    v_num:=v_num+1;
end loop;
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 5. Oracle Index 的三个问题 6. Oracle PL-SQL语言基础 7. Oracle的分布式管理 8. ORACLE的数据类型 9. Oracle数据库碎片整理 10.ORACLE性能调整1 11.ORACLE性能调整2 12.Oracle专家调优秘密 13.PL_SQL单行函数和组函数详解 14.PL-SQL 15.PLSQL异常处理初步 16.SQL语句性能调整原则 17.创建和使用分区的表 18.基于成本的优化器一般错误概念和问题 19.Delphi 3_0中连接数据库的三种方式 20.远程数据库的访问 21.监控数据库性能的SQL 22.简单实现数据库表空间的备份或迁移 23.简析REDO LOGFILE 24.理解和使用Oracle 8i分析工具-LogMiner 25.哪些初始化参数最影响Oracle系统性能 26.你的SQL语句在什么情况下使用全表扫描? 27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S系统性能的一些方法 34.提高ORACLE数据库系统import性能 35.外部联接的用法 36.性能调试的一般问题 37.优化 38.优化调整Oracle 8i数据库(从操作系统) 39.在Internet上运作公司是一项艰苦的任务--关键任务 40.在oracle中限制返回结果集的大小 41.在远端如何建立standby数据库 42.怎样分析你的SQL语句的效率 43.自动备份Oracle数据库 44.总结SQL语句中的优化提示 45.使用Database Configuration Assistant安装第二个数据库 46.Oracle 数据库向 MS SQL Server 7.0 的迁移 Oracle1: 1. Decode()函数使用技巧(NT+IIS+ASP+ORACLE) 2. Dual伪列 3. EXP、IMP 命令详解 4. Exp-Imp大量数据 5. Export-Import 使用技巧与常见错误 6. NULL 使用详解 7. Oracle for NT系统实用工具介绍 8. Oracle 和 mysql 的一些简单命令对比参照 9. Oracle8i和Microsoft SQL Server7_0比较 10. Oracle8的不安全因素及几点说明 11. Oracle常见错误代码 12. Oracle常用Script 13. Oracle常用数据字典 14. ORACLE回滚段管理(上) 15. ORACLE回滚段管理(下) 16. Oracle基于Client-Server的性能调整 17. Oracle数据库的安全策略 18. ORACLE数据库简介 19. Oracle数据库密码文件的使用和维护 20. Oracle数据库碎片整理 21. Oracle特殊 22. Oradim工具的用法 23. PB如何连接Oracle数据库 24. ROLLBACK不能回滚的命令 25. 安装Oracle后,经常使用的修改表空间的SQL代码 26. 比较SQL Server与Oracle、DB2 27. 多个数据库时,如何设置默认数据库 28. 各种数据类型的比较 29. 漫谈oracle中的空值 30. 没有备份、只有归档日志,如何恢复数据文件 31. 哪些初始化参数最影响Oracle系统性能 32. 如何查看数据库的字符集 33. 如何启动ARCHIVELOG模式 34. 如何使‘CREATE TABLE AS SELECT’能支持ORDER BY ? 35. 如何使用归
目 录 TIANLESOFTWARE ORACLE 学习手册.......1 一. ORACLE 基础知识..24 1.1 ORACLE OLAP 与OLTP 介绍..................24 1.1.1 什么是OLTP ....25 1.1.2 什么是OLAP....26 1.1.3 在OLAP 系统中,常使用分区技术、并行技术....26 1.1.4 分开设计与优化..........................27 1.2 索引详解..................28 1.2.1 索引介绍.........28 1.2.1.1 索引的创建语法......28 1.2.1.2 索引特点..................28 1.2.1.3 索引不足..................29 1.2.1.4 应该建索引列的特点...........................29 1.2.1.5 不应该建索引列的特点.......................29 1.2.1.6 限制索引..................29 1.2.1.6.1 使用不等于操作符(<>、!=)...29 1.2.1.6.2 使用IS NULL 或IS NOT NULL ......30 1.2.1.6.3 使用函数.........30 1.2.1.6.4 比较不匹配的数据类型...............30 1.2.1.7 查询索引..................30 1.2.1.8 组合索引..................30 1.2.1.9 ORACLE ROWID ........31 1.2.1.10 选择性..................31 1.2.1.11 群集因子(Clustering Factor) ..............31 1.2.1.12 二元高度(Binary height)....................31 1.2.1.13 快速全局扫描.......31 1.2.1.14 跳跃式扫描...........31 1.2.2 索引分类........32 1.2.2.1 B 树索引 (默认类型) ...........................32 1.2.2.2 位图索引.................33 1.2.2.3 HASH 索引................35 1.2.2.4 索引组织表.............36 1.2.2.5 反转键索引.............37 1.2.2.6 基于函数的索引..... 37 1.2.2.7 分区索引.................38 1.2.2.7.1.本地分区索引(通常使用的索引) 38 1.2.2.7.2.全局分区索引.40 1.2.2.8 位图连接索引.........40 1.3 分区表总结.............41 1.3.1. 分区表理论知识........................41 1.3.2 普通表转分区表方法..................45 1.3.2.1 插入: Insert with a subquery method ...........................46 1.3.2.1.1 Oracle 11g 的Interval................46 1.3.2.1.2 Oracle 10g 版本........................47 1.3.2.2 交换分区:Partition exchange method ...........................48 1.3.2.3 使用在线重定义:DBMS_REDEFINITION .........................50 1.3.2.4 使用导出导入.........54 1.3.2.4.1 迁移分区表的步骤.....................55 1.3.2.4.2 示例1:使用exp/imp ................55 1.3.2.4.3 示例 2:使用expdp/impdp........59 1.3.3 分区表的其他操作......................62 1.3.3.1 添加新的分区.........62 1.3.3.2 split 分区拆分.........64 1.3.3.3 合并分区Merge .....64 1.3.3.4 移动分区.................65 1.3.3.5 Truncate 分区...........65 1.3.3.6 Drop 分区.................66 1.3.4 分区表的索引66 1.3.4.4.1 Local 本地索引............................67 1.3.4.4.2 Global 索引......68 1.3.4.4.3 索引重建问题71 1.3.5 Oracle 11g 中的分区表............... 74 1.3.5.1 11g 中的分区表新特性........................74 1.3.5.1.1 Interval Partitioning ......................74 1.3.5.1.2 System Partitioning ....................... 1.3.5.1.3 More Composite Partitioning........75 1.3.5.1.4 Virtual Column-Based Partitioning75 1.3.5.2 11g 虚拟列实现 按星期分区表......76 1.3.5.3 Interval 分区 示例............................78 1.3.5.3.1 创建按月分区的分区表..............78 1.3.5.3.2 创建一个以天为间隔的分区表...80 1.4 ORACLE 锁.................82 1.4.1 锁(Lock).....82 1.4.1.1 锁的概念.................82 1.4.1.2 锁的分类.................83 1.4.1.2.1. 按用户与系统划分,可以分为自动锁与显示锁..83 1.4.1.2.2. 按锁级别划分,可分为: 排它锁 (Exclusive Locks,即X 锁)和共享锁(Share Locks, 即S 锁)........................84 1.4.1.2.3 按操作划分,可分为DML 锁(data locks,数据锁)、DDL 锁 (data dictionary lock) 和System Locks。.........84 1.4.1.2.4 DML 锁..........84 1.4.1.2.5 DDL 锁(dictionary locks).......87 1.4.1.2.6 System Locks .89 1.4.2 死锁................91 1.4.3 锁 和 阻塞....94 1.4.3.1 相关概念.................94 1.4.3.2 引起阻塞的几种常见情况..................97 1.4.3.2.1 DML 语句.....97 1.4.3.2.2 外键没有创建索引...................98 1.4.4 Latch 说明.......98 1.4.4.1 Latch.....................98 1.4.4.2 有关SPin 的说明.99 1.4.4.3 进程获取Latch 的过程.....................99 1.4.4.4 Latch 和 Lock..... 100 1.4.4.5 Latch 争用......... 100 1.4.4.5.1 共享池中的Latch 争用............. 101 1.4.4.5.2 数据缓冲池Latch 争用............. 102 1.4.4.6 热块产生的原因. 103 1.4.4.6.1 表数据块...... 103 1.4.4.6.2 索引数据块.. 103 1.4.4.6.3 索引根数据块........................... 104 1.4.4.6.4 段头数据块 104 1.4.4.7 检查Latch 的相关SQL ................... 105 1.4.4.7.1 查看造成LATCH BUFFER CACHE CHAINS 等待事件的热 快............... 105 1.4.4.7.2 查询当前数据库最繁忙的Buffer,TCH(Touch)表示访问次数越高, 热点快竞争问题就 存在. 105 1.4.4.7.3 查询当前数据库最繁忙的Buffer,结合dba_extents 查询得到这些 热点Buffer 来自哪些 对象. 106 1.4.4.7.4 如果在Top 5 中发现latch free 热点块事件时,可以从 V$latch_children 中查询具体的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值