oracle课程内容摘要,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;

原文:http://www.cnblogs.com/Cyzin11/p/4183661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值