使用
创建用户
create user 名字 identified by 密码;
授权
CONNECT角色: --是授予最终用户的典型权利,最基本的
RESOURCE角色: --是授予开发人员的
grant connect,resource,dba to 名字;
表创建
1 CREATE TABLE selection (
2 s_no varchar(12),
3 c_no varchar(4),
4 sc_grade number(4,1),
5 primary key (s_no, c_no),//创建主键
6 FOREIGN KEY (s_no) REFERENCES student (s_no),//创建外键
7 FOREIGN KEY (c_no) REFERENCES course (c_no)
8* )
函数
时间 转化成oracle存储的时间格式
TO_DATE('2000-01-01', 'YYYY-MM-DD')
avg() 平均函数
sum()求和函数
max()最大值函数
floor()向下取整
sysdate 调用当前时间
count()统计有效值行函数
decode(列名,条件一,结果一,条件二,结果二,其他的结果)
RAISE_APPLICATION_ERROR(-20001,'错误内容');错误提示
一.常见问题
(1)创建不了用户
解释:在12c以后oracle创建用户名需要前边加c##
(2)找不到scott测试用户
原因在10c之后scott用户便被取消掉了,需要的话需要自己创建,或者导入
解决方案戳这里
二 注意事项
在oracle中变量名的使用不能和函数名相同,会报错,显示缺少(
oracle中pl中需要自定义异常需要命名
三学习过程
PL学习
(1)基本模板
set serveroutput on //打开输出开关,如果这句话显示报错可以去掉
declare //变量的定义位置
begin 程序开始的地方
dbms_output.put_line('hello');
end; 程序结束
set serveroutput off//关闭
(2)条件
Ⅰ if 条件 then
.....
elsif 条件 then
. ....
else
. ...
end if;
Ⅱ
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2 ...
ELSE result_else END
(3)循环
loop
exit when 条件;
end loop;
for i in1..100
loop
end loop;
while 条件
loop
end loop;
(4)游标
定义在declare中
格式为 cursor 名字 if 语句
使用
for i in 名字://类似于增强型for循环,可以直接取出不用打开
其他使用方法
open 名字
fetch 名字 into 变量名字 这里是要列出全部变量名
close 名字
//过程存储
(函数)
格式
create or replace procedure 名字(变量名 方式 变量类型)
// or replace 是代表如果存在则覆盖 如果不存在变量名则新建
// ()如果是无参构造,则不需要括号
is
声明
begin
exception
end;
//函数
格式
create or replace function 函数名(变量名 变量类型)
return 返回类型
is
声明
begin
正常
exception
异常处理
end;
删除 drop function 名字
//触发器
格式 create or replace tigger 触发器名字
before
insert or delete or update (可以单选,也可以多选 ,多个之间用or 链接,如果是对某一列为条件,那就设置 of +列名)
on 表名
for each row(加这句也就是每行都会执行,不加则为一个命令执行一次)
when(条件)//可有可无
begin
内容
end;
注意:在when里边的 new和old不需要写成:new和:old形式,new为更改后,old为更改前的 (例子::old.sal)
删除触发器 drop rtigger 名
查看某表上的触发器:
select * from all_triggers WHERE table_name='表名‘
查看某触发器详细信息
select text from all_source
where type='TRIGGER' AND name='TR_XXX'; ?
查看某用户下的所有的触发器
SELECT * FROM USER_SOURCE WHERE TYPE='TRIGGER';