当前位置:网站首页>常用Oracle命令
常用Oracle命令
2022-08-09 06:21:00 【嘿嘿潶黑黑】
用户管理
创建用户
create user 用户名 identified by 密码;
修改用户密码
alter user 用户名 identified by 密码;
删除用户
drop user 用户名;
-- 关键字cascade
-- 可删除用户所有的对象,然后在删除用户
drop user 用户名 cascade;
用户权限
-- 1、连接权限
-- connect 临时用户,赋给不需要建表的用户
-- 2、资源权限
-- resource 提供给用户另外的权限以创建他们自己的表、序列、过程、触发器、索引和簇
-- 3、数据库管理员权限
-- dba 无限制的空间限额和给其他用户授予各种权限的能力
授权
grant 权限 to 用户名;
撤权
revoke 权限 from 用户名;
角色
创建角色
create role 角色名;
授权角色
grant 增删改查权限 on 表名 to 角色名;
删除角色
drop role 角色名;
表管理
创建表
CREATE TABLE 表名(
字段名 字段类型 字段约束
)
-- 例子,创建一个用户表,并给用户表字段添加属性
CREATE TABLE users(
userid NUMBER(8) PRIMARY KEY,
username VARCHAR2(24) NOT NULL,
usersex VARCHART2(4)
)
COMMENT ON TABLE users IS '用户表';
COMMENT ON COLUMN users.userid IS '用户编号';
COMMENT ON COLUMN users.username IS '用户姓名';
COMMENT ON COLUMN users.usersex IS '用户性别';
表字段操作
-- 例子,基于上面的例子的用户表
-- 给表增加一个字段
ALTER TABLE users ADD(userphones VARCHAR2(24));
-- 给表字段修改名字
ALTER TABLE users RENAME COLUMN userphones TO userphone;
-- 给表字段修改类别
ALTER TABLE users MODIFY userphone VARCHAR2(48);
-- 删除一列表字段
ALTER TABLE users DROP COLUMN userphone;
表数据操作
-- 插入一条数据
INSERT INTO users VALUES(1,'王五','男');
-- 更新一条数据
UPDATE users SET username='李四' WHERE userid = 1;
-- 查询一条数据
SELECT * FROM users;
-- 删除一条数据
DELETE FROM users WHERE userid=1;
视图
CREATE OR REPLACE VIEW 视图名
AS
一条select语句
序列
CREATE SEQUENCE 序列名
minvalue 1 --最小值
nomaxvalue --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue
maxvalue 999 -- 最大值
start with 1 --从1开始计数,数值可变
increment by 1 --每次加1,数值可变
nocycle --一直累加,不循环;cycle:达到最大值后,将从头开始累加
nocache; --不建缓冲区。 如果建立cache那么系统将自动读取cache值个seq,这样会加快运行速度;如果在单机中使用cache,或者oracle死了,那么下次读取的seq值将不连贯,所以不建议使用cache。
-- 例子
drop table book;
--创建表
create table book(
bookId varchar2(4) primary key,
name varchar2(20)
);
--创建序列
create sequence book_seq start with 1 increment by 1;
--创建触发器
create or replace trigger book_trigger
before insert on book
for each row
begin
select book_seq.nextval into :new.bookId from dual;
end ;
--添加数据
insert into book(name) values ('cc');
insert into book(name) values ('dd');
commit;
函数
-- 创建一个函数
CREATE OR REPLACE FUNCTION 函数名
(参数名 参数类型,参数名 参数类型)
RETURN 返回参数类型
IS
参数名 参数类型;
BEGIN
PL/SQL程序块
RETURN 返回参数名;
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('data not found');
END;
-- 调用函数
SELECT 函数名(参数) FROM dual;
-- 例子
CREATE OR REPLACE FUNCTION queryUsers(
uid NUMBER
)
RETURN NUMBER
IS
v_sum NUMBER;
BEGIN
SELECT count(*) INTO v_sum from users WHERE userid = uid;
return v_sum;
EXCEPTION
when no_data_found then
dbms_output.put_line('data not found');
end;
SELECT queryUsers(1) from dual;
存储过程
-- 创建存储过程
CREATE OR REPLACE PROCEDURE 过程名(
参数名 IN 参数类型, -- 输入参数
参数名 OUT 参数类型 -- 输出参数
)
IS
cot number:=0; --变量声明
BEGIN
PL/SQL语句;
num:=cot; --赋值语句
END;
-- 调用存储过程
-- 方法一
BEGIN
过程名(参数,...);
END;
-- 方法二
var 变量名 number;
EXEC 过程名(参数,...);
PRINT 变量名;
-- 例子
CREATE OR REPLACE PROCEDURE queryUserBySex(
sex IN VARCHAR2,
num OUT NUMBER
)
IS
cot number:=0;
BEGIN
SELECT COUNT(*) INTO cot FROM users WHERE usersex = 'nan';
num:=cot;
END;
DECLARE
retureCount NUMBER;
BEGIN
queryUserBySex('nan',retureCount);
DBMS_OUTPUT.PUT_LINE('性别nan的学生人数为'||retureCount);
END;
触发器
CREATE OR REPLACE TRIGGER 触发器名
BEFORE/AFTER INSERT/UPDATE/DELETE
ON 表名
FOR EACH ROW
-- DECLARE 设计要对表进行增删改时,需要加上
-- PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
PL/SQL语句;
-- COMMIT;
END;
-- 例子:
CREATE OR REPLACE TRIGGER in_del_trigger
AFTER DELETE
ON users
FOR EACH ROW
declare
pragma autonomous_transaction;
BEGIN
dbms_output.put_line(:old.userid);
INSERT INTO copyuser VALUES(:old.userid,'li','nan');
COMMIT;
END;
索引
创建索引
CREATE OR REPLACE 索引名 ON 表名(字段名)
单一索引
-- 创建索引
CREATE INDEX uname ON USERS(username);
-- 使用索引
select * from users where username='hong';
复合索引
CREATE INDEX uname ON USERS(userid,username);
select * from users order by userid,username;
基于函数的索引
CREATE INDEX uname ON USERS(UPPER(username));
select * from users where upper(username) = 'HONG';
如果经常再索引列上执行DML操作,需要定期重建索引
ALTER INDEX 索引名 REBUILD
游标
DECLARE
CURSOR cur_user IS SELECT * FROM USERS; -- 声明游标
v_user cur_user%ROWTYPE;
BEGIN
OPEN cur_user; -- 打开游标
LOOP
FETCH cur_user INTO v_user; -- 提取数据
EXIT WHEN cur_user%NOTFOUND;
IF cur_user%FOUND THEN
dbms_output.put_line(v_user.userid || ' ' || v_user.username);
ELSE
dbms_output.put_line('none');
END IF;
END LOOP;
CLOSE cur_user; -- 关闭游标
EXCEPTION
WHEN OTHERS THEN
IF cur_user%ISOPEN THEN
CLOSE cur_user;
END IF;
END;
边栏推荐
- se2clam
- 运算放大器(OPA)超详细参数讲解-运放---以及8个型号的运算放大器分析对比
- Qt 学习(三) —— Qt 模块
- kubernetes apparmor 简介
- Regular Expression - Determine if a string matches the "AABB" pattern
- 手把手教你用C语言制作七夕流星雨---优雅永不过时(详细教程)
- 半胱氨酸/半乳糖/苝二酰亚胺功能化Fe3O4四氧化三铁纳米材料|科研试剂
- 2022-08-08:给定一个数组arr,表示从早到晚,依次会出现的导弹的高度。 大炮打导弹的时候,如果一旦大炮定了某个高度去打,那么这个大炮每次打的高度都必须下降一点。 1) 如果只有一个大炮,返回
- phpstudy install flarum forum
- SiO2-NH2/Fe3O4表面氨基化的Fe3O4/SiO2复合磁性纳米粒子(齐岳试剂)
猜你喜欢
qt发送邮件程序
牛客每日刷题之链表
【JMeter】jmeter测试 - 上传多个图片/批量上传图片接口 CSV文件参数化方法
Build a "firewall" for safety and carry out firefighting training in Fengzhuang Township, Tongxu County, Henan Province
PDF不能打印和复制的问题如何解决?
qt send mail program
GNNExplainer applied to node classification task
[MySQL] Second, the relationship between processes, MySQL password cracking, table building and database building related commands
Bismuth sulfide nanorods with CT imaging function | Bismuth sulfide-zinc protoporphyrin composites (PAMAM/Bi2S3 composite nanoparticles)
5年测试开发工程师感悟——写给还在迷茫中的朋友
随机推荐
Adds, deletes, searches, and changes the leading doubly circular linked list (implemented in C language)
[HNOI2002]营业额统计
Program Performance Analysis - Complexity Analysis
【R语言】对文件进行归一化整理到各文件类型文件夹
中英文说明书丨TRC 交替醇(Catalogue NumberA575760)
SiO2/KH550修饰四氧化三铁纳米磁性颗粒|PDA包裹四氧化三铁磁性纳米颗粒(科研级)
qt发送邮件程序
22年下高项论文题目预测
VScode安装了ESlint以后不管用、不生效的解决办法
2022-08-08:给定一个数组arr,表示从早到晚,依次会出现的导弹的高度。 大炮打导弹的时候,如果一旦大炮定了某个高度去打,那么这个大炮每次打的高度都必须下降一点。 1) 如果只有一个大炮,返回
PDF不能打印和复制的问题如何解决?
Qt 学习(三) —— Qt 模块
一道很简答但是没答对的SQL题
手把手教你用C语言制作七夕流星雨---优雅永不过时(详细教程)
Introduction of convenient functions and convenient shortcut keys of vs tomato assistant
S7-200SMART PLC Modbus TCP communication
Unity 五子棋游戏设计和简单AI(3)
推进产教融合 赋能教育创新发展 | 华云数据荣获“企业贡献奖”
治疗消化性溃疡—Toronto Research Chemicals 甘氨酸铝
[GO]、数组与切片