Oracle系统学习摘要
对于企业级大型系统,Oracle数据库的重要性不言而喻,作为长期使用Sql server的developer,花了点时间学习了一个Oracle的系列课程,总结一下。
1.oracle一些基础命令
sql*plus是操作Oracle的常用工具,以下一些常用命令:
(1)连接数据库:conn 用户名/密码 as sysdba/sysoper
(2)关闭连接:disc
(3)改密码:psssw, alter user *** identified by ***
(4)显示当前用户: show user
(5)创建用户:create user identified by pwd,删除用户: drop user [cascade]
2.Oracle的表,数据对象,权限管理和角色,数据字典
Oracle数据类型:
字符类型: char 定长,最大2000字符; varchar2 变长,最大4000字符; clob 字符型大对象,最大4G。
数字类型:number(n,m)
日期: date
权限和角色
方案(schema):讲权限之前,这里有个方案的概念,每个用户建立的时候,都对应一个方案,其名称与用户名相同。oracle的表,存储过程,函数,视图,触发器,游标等等,称为数据对象,每个用户的方案下面都会包含其自身的数据对象。
权限:执行特定的sql命令或者访问对象的权利。oracle包括系统权限、对象权限2大类。
系统权限:系统权限是指执行特定类型sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。oracle提供了100多种系统权限。比如,常用的有: create session 连接数据库 create table 建表 ;create view 建视图 ;create procedure 建过程、函数、包;create trigger 建触发器;create cluster 建簇等。
显示系统权限sql语句:select * from system_privilege_map order by name;
授予/回收系统权限:
grant create session,create table to user*** with admin option -- with admin option表示被授权的用户可以继续向下授予相应权限。
revoke create session from user*** (系统权限不级联回收,也即A->B->C,当A收回B的权限是,C的不回收。)
对象权限:访问其他方案的对象的权利。常用的有:alter, delete, select, insert, update, execute等。
查看对象权限:
select distinct privilege from dba_tab_privs ---查看所有的对象权限
select grantor, owner, table_name, privilege from dba_tab_privs where grantee = 'AAA'; ---查看AAA用户的对象权限
授予/回收对象权限
grant select,delete on TableA to AAA;
revoke select on TableA from AAA; ---(级联回收)
角色
角色就是相关权限命令的集合,使用角色的目的就是为了简化权限管理。角色有预定义角色和自定义角色2类。
预定义角色,比如, connect角色包含: alter session, create cluster, create database link, create session, create table, create view, create sequence权限。
自定义角色, create role 名称 identified by 密码
给角色增加权限: grant 权限 to 角色名 (with admin option).
分配角色给用户: grant 角色名 to 用户名 with admin option.
数据字典
数据字典:记录了数据库的静态信息,包括只读表和视图,其所有者为sys用户。包括:user_XXX, all_XXX, dba_XXX 3种类型。
user_tables:显示当前用户的所有表,只返回用户的方案的表。 select table_name from user_tables.
all_tables: 显示用户可以访问的所有表,包括其他方案的表。select table_name from all_tables.
dba_tables: 显示所有方案的所有表,当时只有dba角色的用户或拥有select any table权限的用户才能查询。
dba_users: 所有用户; dba_sys_privs:所有系统权限; dba_tab_privs:所有对象权限;dba_col_privs:所有列权限;dba_role_privs:所有角色。
3.PL/SQL编程,包,存储过程,函数,游标等。
Package,store procedure, function 模板:
包声明:
create or replace package PackageAAA is
procedure procedureAAA(par1 varchar2, par2 number);
function functionAAA(par1 varchar2);
end;
包体:
create or replace package body PackageAAA is
procedure procedureAAA(par1 varchar2, par2 number) is
begin /* 内容*/ end;
function functionAAA(par1 varchar2) is
begin /*内容*/ end;
end;
PL/SQL程序中的变量和复合类型
1.标量类型 2.复合类型 3.参照类型 4.lob(large object)
标量类型:也即常用类型,定义语法如下: identifier [constant] datatype [not null] [:=default value],比如:v_sal2 number(6,2):=5.4;定义一个数字
类型,默认赋值5.4。 使用%type类型, 比如 v_name tableAAA.Col1%type,定义v_name变量,类型和tableAAA的col1相同。
复合类型:有 pl/sql记录,pl/sql表,嵌套表,varray等。
type emp_record_type is record(name emp.ename%type, salary emp.sal%type, title emp.job%type); --定义pl/sql记录类型
参照变量:用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型。
--定义游标sp_emp_cursor
type sp_AAA_cursor is ref cursor;
--定义一个游标变量
test_cursor sp_AAA_cursor;
--定义变量
v_par1 AAA.Col1%type;
v_par2 AAA.Col2%type;
begin
--执行
open test_cursor for select Col1,Col2 from AAA where Col3=&?;
--循环取出
loop
fetch test_cursor into v_par1,v_par2;
--判断是否test_cursor为空
exit when test_cursor%notfound;
dbms_output.put_line('Column1:'||v_par1||' Column2:'||v_par2);
end loop;
PL/SQL 分页存储过程:
create or replace package testpackage as
TYPE test_cursor is ref cursor;
end testpackage;
#NAME?
create or replace procedure paging
(
tableName in varchar2,
Pagesize in number,--一页显示记录数
pageNow in number,
myrows out number,--总记录数
myPageCount out number,--总页数
p_cursor out testpackage.test_cursor--返回的记录集
) is
--定义sql语句参数
v_sql varchar2(1000);
#定义开始和结尾数
v_begin number:=(pageNow-1)*Pagesize+1;
v_end number:=pageNow*Pagesize;
begin
--主要逻辑
v_sql:='select * from (select t1.*, rownum rn from (select * from '||tableName||') t1 where rownum<='||v_end||') where rn>='||v_begin;
#关联sql和游标
open p_cursor for v_sql;
--计算myrows和myPageCount
--组织sql
v_sql:='select count(*) from '||tableName;
--执行sql,并把返回的值,赋给myrows;
execute inmediate v_sql into myrows;
--计算myPageCount
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
else
myPageCount:=myrows/Pagesize+1
end if;
--关闭游标
close p_cursor;
end;
Oracle系统学习摘要的更多相关文章
- 零基础如何系统学习Java Web
零基础如何系统学习Java Web? 我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...
- Oracle RAC学习笔记:基本概念及入门
Oracle RAC学习笔记:基本概念及入门 2010年04月19日 10:39 来源:书童的博客 作者:书童 编辑:晓熊 [技术开发 技术文章] oracle 10g real applica ...
- Oracle GoldenGate学习之Goldengate介绍
Oracle GoldenGate学习之Goldengate介绍 (2012-10-02 17:07:27) 标签: 检查点 数据传输 队列 进程 分类: Goldengate Goldengate介 ...
- Oracle RAC学习笔记01-集群理论
Oracle RAC学习笔记01-集群理论 1.集群相关理论概述 2.Oracle Clusterware 3.Oracle RAC 原理 写在前面: 最近一直在看张晓明的大话Oracle RAC,真 ...
- Hibernate的系统 学习
Hibernate的系统 学习 一.Hibernate的介绍 1.什么是Hibernate? 首先,hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBat ...
- CSS学习摘要-定位
CSS学习摘要-定位 注:全文摘自MDN-CSS定位 定位允许您从正常的文档流布局中取出元素,并使它们具有不同的行为,例如放在另一个元素的上面,或者始终保持在浏览器视窗内的同一位置. 本文解释的是定位 ...
- redhat5.8系统学习
# redhat5.8系统学习 ### 简介-----------------------------redhat操作系统是红帽公司的收费版操作系统 ### 查看系统版本号-------------- ...
- Oracle RMAN 学习:恢复
Oracle RMAN 学习:恢复 6 rman恢复 Rman中的恢复对应restore,recover Restore,数据修复,利用备份集的数据文件来替换已损坏的数据文件或将其恢复到另外一个位置, ...
- Oracle RMAN 学习:演练进阶篇
Oracle RMAN 学习:演练进阶篇 5 Rman备份演练进阶篇 5.1 是否选择增量备份 Backup命令生成的备份集中只备份了那些使用了的数据块,备份集实际大小已经较目标数据库的数据文件小了很 ...
随机推荐
- XSS跨站脚本小结
XSS漏洞验证经常遇到一些过滤,如何进行有效验证和绕过过滤呢,这里小结一下常见的一些标签,如<a><img>等. 参考链接:http://www.jb51.net/tools/ ...
- JSP代码加固
String id = request.getParameter("id"); String id = id.replace("'","") ...
- odoo-10.0 create database 失败
在初始化数据库的界面点击[create database] create database 失败 报错如下 2017-01-05 20:15:18,529 4652 INFO ? werkzeug: ...
- Git标签和别名管理
一.Git标签管理 标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态,也可以随时恢复到该状态 例如给master打一个v1.0的标签 先切换到master分支上去git checkou ...
- android WeakReference(弱引用 防止内存泄漏)与SoftReference(软引用 实现缓存机制(cache))
在Android开发中,基本上很少有用到软引用或弱引用,这两个东东若用的很好,对自己开发的代码质量的提高有很大的帮助.若用的不好,会坑了自己.所以,在还没有真正的去了解它们之前,还是慎用比较好. 下面 ...
- code complete part1
最近在看code complete,学习了一些东西,作为点滴,记录下来. 关于类: 类的接口抽象应该一致 类的接口要可编程,不要对类的使用者做过多的假设.不要出现类似于:A的输入量一定要大于多少小于多 ...
- 前端中JSON对象和JSON字符串的相互转换
资料来源: http://www.css88.com/archives/3919
- EnglishLeaning
今天看了些hadoop官方reference感觉自己词汇量和语法真是又回到解放前了.于是,痛下决心要好好学习英语.找到了一些学习的方法,自己记录下来,也和大家一起借鉴 努力目标: 掌握大量的计算机英语 ...
- css3 animation-fill-mode 对布局的影响
问题描述:在小米手机上,animation-fill-mode设置为 both时,在手机上的web页面会超出屏幕宽度,出现滚动条. 解决方法:animation-fill-mode设为none. .p ...
- Arcgis Server 10.2默认服务端口号修改方法
本人安装Arcgis Server 10.2之后发布了一个地图服务,该服务默认使用的端口号是6080,本人使用的是教育网,使用教育网均能正常使用该服务,但是使用电信或者移动网络均不能正常访问该网站. ...