sqlplus中启动实例
startup [nomount/mount/open]
nomount :仅打开实例
mount:读取控制文件,但不读取数据文件
open:读取数据文件,打开数据库
一般备份的是用mount
shutdown normal:不允许新的连接,等待旧的连接断掉
sqlplus命令
list,l
作用:显示缓冲区里的sql语句
list 行号
显示缓冲区中某一行的内容
del 行号
作用:
删除缓冲区的sql语句
例如:
del 2 删除缓冲区的第2行
注意:
list N后,第N行理解为当前行
再del * 5,即可删除当前行到第5行
input:往缓冲区增加内容
典型用法:
l1 列出缓冲区第一行
input XXXXXX 在第一行后新增一行xxxxxx
append 在某一行后追加内容
典型用法:
l 行号,列出行的内容
append xxxx 把xxxx内容追加到当前行的后面
change /d/dd/
将缓冲区中的d替换成dd
sqlplus与外部编辑器交互
命令:edit,ed
注意:使用时 需要配置在glogin.sql中添加DEFINE_EDITOR=vi
vim /oracle/ora11/product/sqlplus/admin/glogin.sql
DEFINE_EDITOR=vi
get 路径/文件名
作用:
是把外部文件的内容读到缓冲器,但是不执行
经过试验:
这种方法总是报无效字符错误(实际没有任何问题)
@ 路径/文件名
作用: 把外部文件内容读到缓冲区(但不显示),并执行
start 路径/文件名 同上
run 路径/文件名
作用:
读取外部文件内容,显示出来,并执行
经过试验:
该命令执行完后不报错,但实际根本没有做需要的操作
save 路径/文件名 [create/append/replace]
将缓冲区里的内容保存到文件中
表和字段的注释
给表注释
comment on table 表名is '内容';
给表中字段注释
comment on column 表名.字段名 is '内容';
列操作
建表
create table stu(
id number not null,
sname varchar2(100)
);
添加字段
alter table stu ( Height number(8,2),Weight number(8,2));
删除字段
方案一:(删除一个)
alter table stu drop column sname;
方案二:(删除多个)
alter table stu drop (height,weight);
修改字段
alter table stu modify id number(8,2);
没有数据可以增加,也可以减少
有数据的话,只能增加,不能减少
给字段重命名
alter table stu rename column id to id_new;
修改表中字段的默认值
alter table 表名 modify 字段名 default(内容);
the account is locked
1. 切换到管理员下
conn sys/sys as sysdba;
2. 执行语句
alter user 用户 account unlock;
约束
外键约束
create table cat (
cat_id number,
catname varchar2(30),
constraint plcat_id primary key(id)
);
create table goods (
goods_id number,
cat_id number,
goods_name varchar2(30),
constraint fkcatid foreign key(cat_id) references cat(cat_id)
);
序列
创建序列语法
create sequence increment by n -–步长
start with n -–开始的值
maxvalue n | nomaxvalue –-最大的值
minvalue n | nominvalue -–最小的值
cycle | nocycle -–是否循环
cache n | nocache -–缓存n个
修改序列
Alter sequence 序列名
选项 新值
例子:
alter sequence 序列名
maxvalue 5
注意:
不能修改开始值
修改只影响新产生的值,不影响已产生的值
删除序列
drop sequence 序列名
同义词
同义词就是别名,外号
给scott用户赋 create synonym权限
conn sys/sys as sysdba;
grant create synonym to scott;
创建同义词
conn scott/scott;
create synonym g for scott.goods;
删除同义词
drop synonym g;
视图
创建视图
create or replace view 视图名
as select 语句
with read only --是否只读
with check option –是否执行约束检查
例子
create view view_look as select t.attrid,t.attrval,t.createtime from bak t
with read only;
删除视图
drop view 视图名
索引
索引信息存放在
user_indexes
uer_ind_columns
PLSQL
declare
变量声明部分
begin
执行部分
exception
异常处理部分
end;
默认:调用一个匿名块/存储过程,只执行不输出
学习调试时:set serveroutput on
变量和默认值设置
变量的基础分类
varchar2(n)
char(n)
number
默认值设置1
declare
i number default 9;
begin
i := i + 1;
dbms_output.put_line('double i is '||i);
end;
默认值设置2
declare
age int default 20;
height int :=170;
begin
dbms_output.put_line('his age is '||age);
dbms_output.put_line('his height is '||height);
end;
PLSQL上执行存储过程
call 存储过程
自定义记录类型
自定义记录类型record
type people is record
(
name varchar2(10),
age number,
gender char(2)
);
自定义集合类型charset
create procedure p13
is
type charset is table of char;
answ charset := charset('a','b','c','d');
begin
dbms_output.put_line('has '||answ.count()||' option answer');
end;
异常处理
异常机制
when no_data_find then
dbms_out.put_line();
when too_many_rows then
dbms_out.put_line();
when others then
dbms_out.put_line();
隐式游标
定义
当执行一个dml语句时,隐式游标由系统自动创建叫SQL,
SQL有几个属性 isopen true/false
rowcount 增删改影响的行数,对于select无意义(只有1行时,才能读到该值)
found true/false 是否影响到行
notfound true/false,与上同,只是值恰相反
显示游标
语法
cursor 游标名 is select 语句;
使用的逻辑步骤:
声明
打开
取值
关闭
例子1(读取一次)
declare
--声明
cursor cur18 is select * from dept;
e dept%rowtype;
beign
open cur18;--打开
fetch cur18 into e;--取值
dbms_output.put_line(e.dname||':'||e.loc);
close cur18;--关闭
end;
例子2(循环读取)
declare
--声明
cursor cur18 is select * from dept;
e dept%rowtype;
beign
open cur18;--打开
fetch cur18 into e;--取值
while cur18%FOUND loop
dbms_output.put_line(e.dname||':'||e.loc);
fetch cur18 into e;--取值
end loop;
触发器
前提条件
create table odr(
oid number,
gid number,
much number
)
insert into goods values(5,'pig',80);
insert into goods values(6,'dog',40);
insert into goods values(7,'cat',30);
insert into odr values (seq1.nextval,5,3);
update goods set cnt=cnt-3 where gid=5;
表级触发器
//只能以表为单位,监视insert/update/dalete操作,
//不能精确知道新的insert/update/dalete的行是什么内容的
create or replace trigger tr1
after insert
on odr
begin
end;
语句级触发器
create or replace trigger tr1
after insert
on odr
for each row
begin
update goods set cnt=cnt-:new.much where gid=:new.gid;
end;
文档信息
- 本文作者:fei
- 本文链接:https://ayee1616166.github.io/2016/11/03/Oracle%E4%B9%8B%E5%9F%BA%E7%A1%80%E7%AC%94%E8%AE%B0/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)