如何使用dbvisual建设使用存储过程的好处

html滑动门兑现_js中未结束字符串常量解决方法_Oracle 小弟我的总结__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
html滑动门兑现
js中未结束字符串常量解决方法
Oracle 小弟我的总结
html滑动门兑现
C++ builder XML4.dll我的程序是从bcb6迁移过来的,因为以前的程序中用了xml4.dll。他生成的有MSXML2_TLB.h 和 MSXML2_OCX.h两个文件,在新版2010编译环境下,他会有异常,异常指示位置是utilcls.h中的~TAutoDriver()这,一直不晓得怎么解决,希望大家帮帮我。------解决方案--------------------
更新控件到最新版
js中未结束字符串常量解决方法
js中未结束字符串常量解决办法
js在项目经常会遇到未结束的字符串常量的困扰,经php666整理后,加上自己的开发经验为大家列举了以下几种常见的案例以及解决的方案 :第一类:
就是js文件与页面编码不一致,导致文件内部特殊字符因格式不一致就会在解码时出现乱码,从而导致编译器在未到达引号( "或' )前提前结束,产生“未结束的字符串常量”。解决办法:如果是外部引入js文件 ,可以在&script type text/javascript” src=”XXX.js” charset=”###″& 中设置charset="###"与你的网页编码一致就可以了;第二类:
在JAVASCRIPT中,字符串前后标记(如单引号或双引号)不匹配或者嵌套错误
解决办法: 让前后引号正确配对;共有两层嵌套时,双引号内嵌套单引号是正确的,单引号内嵌套双引号也是正确的。共有三层嵌套时,最里面一层引号不能和最外面一层相同,这样是错误的,可以在最里面一层引号前加上转义字符“\”。第三类:
JAVASCRIPT的字符串不能跨行,源码如下 :
document.write('&table width=770 border=0 cellpadding=0 cellspacing=0&
&td&&img src=../images/f_01.gif border=0 /&&/td&
&td&&img src=../images/f_02.gif border=0 /&&/td&
&/table&')
Error:未结束的字符串常量
解决方法:
一种方法用\N分隔每一行
源码修改为:
document.write('&table width=770 border=0 cellpadding=0\n cellspacing=0&\n&tr&\n&td&&img src=../images/f_01.gif border=0 /&&/td&\n&td&&img src=../images/f_02.gif border=0 /&&/td&\n&/tr&\n&/table&');另一种方法使用多个document.write输出语句,比如源码修改如下:1.document.writeln('&table width=770 border=0 cellpadding=0 ');document.writeln('cellspacing=0& ');
2.document.writeln('&tr& ');
3.document.writeln('&td&&img src=../images/f_01.gif border=0 /&&/td& ');
4.document.writeln('&td&&img src=../images/f_02.gif border=0 /&&/td& &/tr& ');
5.document.writeln('&/table&'); 第四类:
传递的参数变量内或者脚本变量中包含HTML标记语言、包含换行符或包含引号:
这种情况是最难发现的,容易忽略了变量内部文字原因产生的,将字符串以参数形式传递给一个函数或者href、action时,该字符串里包含换行符、引号或HTML标记,造成了此错误。如:a.测试时使用单行数据是正常的,未出现这个错误;使用多行数据并使用回车键换行,就出现了此错误,因为里面包含换行符。源码 b.mArray[&%=n_id%&]="&%=loopnum%&&&&%=n_topic%&&&&%=state%&&&&%=n_sendtime%&&&&%=n_content%&";看似无误,但是&%=n_topic%&、&%=n_content%&中包含了多个单双引号,就出现了此错误。
解决办法:对于这种情况,我的解决方法有两个,一个是将字符串变量进行替换操作,将双引号替换成单引号,单引号替换成“\"”,不过这样在传递后读取时还得替换成原文;第二种方法是不直接将数据以参数形式传递,而是先将其赋值给一个隐藏文本内,函数里只需读取文本中的内容即可。
Oracle 小弟我的总结
Oracle 我的总结第一部分
基础知识与体系结构
一、Oracle概述
1.数据库基础
@ 数据-----描述事物的符号,是数据库中存储的基本对象
@ 数据库-----按照一定的数据模型组织、描述和存储的数据的集合,具有较高的数据独立性,小的冗余度,可以实现数据共享
@ 数据库管理系统-----为科学组织和存储数据库中的数据,高效率的获取和维护数据,采用DBMS的系统软件来管理数据库
位于用户和操作系统之间的一层数据管理软件,通常所说的数据库产品(Oracle,DB2,Informix,Sybase)都是DBMS。
@ 数据库系统-----数据库、数据库管理系统、计算机系统共同组成了一个数据库系统,通常由数据库,操作系统,DBMS,开发工具,应用系统,DBA,用户组成
用户(另类系统)
用户(终端)
应用系统(订票系统)
开发工具(PL/SQL,Dbvisual)
2.数据库的发展
@ 人工管理阶段,1950以前,数据不共享,不独立,冗余量大
@ 文件系统管理阶段,,数据可以长期保存,共享性差,独立性差
@ 数据库系统管理阶段,1965以后,数据结构化存,共享性强,独立性好,冗余量低,统一数据管理和控制
3.数据模型
实体(Entity)-矩形
属性(Attribute)-椭圆
关系(Relation)-菱形
@ 四种对象模型
层次模型---树
网状模型---图
关系模型---表,Oracle,DB2等流行数据库都是关系数据库
优点:存储路径对用户透明,具有更高的数据独立性和保密性,简化了程序员的开发工作
缺点:查询效率往往不太乐观,必须对用户的查询语句进行优化。
对象模型---对象
4.Oracle数据库简介
Oracle公司于1979年发布的世界上第一个关系数据库
1992发布oracle7,1997.6发布oracle8,1998.9发布oracle8i,2000发布oracle9i,2004发布oracle10g
支持多用户、大事物量的事物处理
提供标准操作接口
实施安全性控制和完整性控制
支持分布式数据处理
具有可移植、可兼容性和可连接性
@ 应用结构
客户机-服务器(C/S)模式--客户端需要安装客户端程序,直接访问服务器,速度快,维护升级不方便,如PL/SQL DEVELEPOR
浏览器-服务器(B/S)模式--三级架构,客户端只要安装浏览器就OK了,通过访问WEB服务器对数据库进行操作和访问,方便了程序的维护和升级,但是降低了网络执行效率
分布式数据库模式--分布于计算机网络的多个逻辑相关的数据库组成,每个数据库都具有独立的处理能力
@ 创建数据库:安装时创建;DCBA创建
@ OEM和SQL*PLUS
二、体系结构
1.DML语句,包含insert、update、delete、select等常用语句
●增删改操作
新增:insert into book(id,name) values(2,"Wade");
批量新增:insert into book(id,name) select t.id,t.nameCn from book_
修改:update book set name="McGrady" where id=2;
删除:delete book where id=2
全部删除(低效):delete book
全部删除(高效):Truncate table book
employee雇员信息表
emp_id 雇员编号 NOT NULL NUMBER(4)
emp_name 雇员姓名 VARCHAR2(10)
emp_station 工作岗位 VARCHAR2(9)
emp_managerId 该雇员经理人的编号 NUMBER(4)
emp_inDate 入职时间 DATE
emp_salary 薪水 NUMBER(7,2)
emp_allowance 津贴 NUMBER(7,2)
emp_depId 雇员所在部门编号 NUMBER(2)
departmentà部门信息表
dep_id 部门编号 NOT NULL NUMBER(2)
dep_name 部门名字 VARCHAR2(14)
dep_loction 部门所在地 VARCHAR2(13)
salarygradeà薪水等级表
Sg_id 薪水等级 NUMBER
Sg_minSal 该等级的最低薪水值 NUMBER
Sg_maxSal 该等级的最高薪水值 NUMBER
●基本查询(消除重复或字段)
select distinct *
select emp_id, emp_name, emp_
●查询算术表达式语句
select emp_id, emp_salary*2
select 55/2
select sysdate from employee where emp_id = 3;
select emp_name,emp_salary*12+emp_allowance from employee
select emp_id, emp_salary*2 ‘doubleSal’
select em.emp_id, em.emp_salary*2 as‘doubleSal’
●where过滤数据
select * from employee where emp_depId = 3;
Select * from employee where emp_name = 'Wade' and emp_depId = 3;
Select emp_name, emp_salary from employee where emp_salary between 800 and 1500;
Select emp_name, emp_salary from employee where emp_salary &= 800 or emp_salary &=1500;
Select * from employee where emp_a
Select * from employee where emp_allowance is in(100,200,400,800,1000);
select * from t_application_info where app_id in (select t.bussines_id from t_profile t);
select * from t_application_info app where exists
(select 1 from t_profile t where t.bussines_id =app.app_id );
Select * from employee where emp_name is not in('Wade','McGrady','James');
Select * from employee where emp_inDate & '20-2月-2010';
Select * from employee where emp_inDate between to_date('','yyyy-mm-dd')
Select * from employee where emp_name like‘%Wade%’escape '\';
包含或等于Wade,%代表多个字符
Select * from employee where emp_name like‘_W%’escape '\';
第二个字母为w,_代表一个字符
Select * from employee where emp_name like '%\%%' escape '\' or emp_name like '%\_%' escape '\';
查找包含%或_的词
●order by 语句
Select emp_name, emp_salary from employee order by emp_name,emp_salary,emp_inD
Select emp_name, emp_salary from employee order by emp_
●group by语句
Select emp_depId , avg(emp_salary) as ‘平均工资’,max(sal) as ‘最大工资’ from employee group by emp_depId having max(sal) & 2000;
Select emp_depId ,avg(emp_salary) from employee where emp_salary & 1200 group by emp_depId having avg(emp_salary) & 1500 Order by avg(emp_salary);
使用group by 的规律:
出现在select列表中的字段,如果没有出现在组函数中,则必须出现在group by子句中。 ●表的连接
select * from t_application_info ap,t_profile t where ap.app_id = t.bussines_
--自然连接
select * from t_application_info ap join t_profile t on
ap.app_id = t.bussines_
--等效自然连接,写法不一样而已
select * from t_application_info ap left join t_profile t on
ap.app_id = t.bussines_
--左连接,以左表为基准,右表为空的记录页查询出来
select * from t_application_info ap right join t_profile t on
ap.app_id = t.bussines_
--右连接,以右表为基准,左表为空的记录页查询出来
select * from t_application_info ap full join t_profile t on
ap.app_id = t.bussines_
--全连接,左表和右表为空的记录页查询出来
select * from t_application_info ap where ap.app_id in(select distinct(t.bussines_id) from t_profile t); --类似自然连接,但只能查询左表的属性
select * from t_application_info ap left join
(select * from t_application_info ap,t_profile t where ap.app_id = t.bussines_id) w1
on ap.app_id = w1.bussines_id
--多表连接,原理是把一个或若干个连接的结果当做一个表再与外表进行连接
from t_application_info ap, (select * from t_profile t1 where t1.bussines_id is not null) t
where ap.app_id = t.bussines_
--原理是把一个或若干个连接的结果当做一个表在与外表自然连接
select w2.* from (select w1.*, rownum mynum
from (select * from t_application_info) w1
where rownum &= 100) w2 where mynum &= 20
--分页语句
●子查询(理解子查询的关键--&把它当成一张表)
Select emp_name,emp_salary from employee where emp_salary =(Select max(emp_salary) from employee);
按照部门进行分组之后挣钱最多的那个人的名字,部门编号?
Select emp_salary,emp_name, emp_deptId from employee e , (Select max(emp_salary) as‘maxSalary’,emp_deptId from employee group by emp_deptId) t where e.emp_salary = t.maxSalary and e.emp_deptId = t.emp_deptId;
求每个部门的平均薪水等级是多少?
Select t.avgSalary, t.emp_deptId, s.sg_id from salarygrade s, (Select avg(emp_salary) as‘avgSalary’,emp_deptId from employee group by emp_deptId) t where t.avgSalary between s.sg_minSal and s.sg_maxSal group by emp_deptId.
2.DDL语句,包含create、alter、truncate、drop等常用语句
(1)模式对象:用户数据是以对象的形式存在的,并以模式的单位进行组织
(2)表、视图、索引、索引化表、序列、同义词、PL/SQL包、存储过程、存储函数、JAVA类属于模式对象;
表空间、用户、角色、回退段、概要文件不属于模式对象;
创建普通表:
create table book
id number(10) not null,
name varchar2(50) default ‘wade’ ,
shopId number(10) not null constraint book_shopId_fk refrences shop(id),
produceDate date default sysdate,
constraints pk1 primary key(id, produceDate)
利用子查询创建表:
a:可以修改列的名称,不能修改数据类型
b:子查询返回数据则新标包含查到的数据,否则为一个空表
create table t2(no,name,dept)
select e.empno,e.name,e.
创建临时表
约束的种类
表级约束--同时约束多个列名
列级约束--约束一个列名,跟随在列名之后
主键约束--唯一、非空、一个表只有一个主键,但一个主键可以包含多个字段,同时建立一个唯一索引
id number(20) primary key
constraint pk1 primary key (id)
alter table book add constraint pk1 primary key (id)
alter table drop constraint pk1
唯一性约束--建立一个唯一索引,如果未定义非空约束,则可以包含多个空值
id number(20) unique
alter table book add constraint puk unique(name)
alter table book drop unique(name)
alter table book constraint puk
外键约束--取值要么是外表对应的值,要么为空
shopId number(10) constraint fk1 refrences shop(id)
constraint fk1 foreign key (shopId) refrences shop(id)
alter table book add constraint fk1 foreign key (shopId) refrences shop(id) on delete cascade/set null/resttricted
cascade/set null/resttricted: 删除字表相关的数据/设为空值/受限删除
alter table book drop constraint fk1
非空约束--列级约束
alter table book modify name not null
alter table book modify name null
检查约束--限制列值所允许的取值范围的
age number(20) check(age between 20 and 30)
alter table book add constraint fc1 check(age between 20 and 30)
alter table book drop constraint fc1
禁用和激活约束
alter table book disable unique(name)
alter table book modify constraint puk disable
alter table book enable unique(name)
alter table book modify constraint puk enable
查询book表所有约束信息
select * from user_constraints where table_name = 'book'
alter table book add(id number(20),author varchar(20) not null)
alter table book modify author number(40)
alter table book drop column author
alter table book modify name default ‘McGrady’
alter table book rename column author to author2
alter table book rename to book2
comment on table book is '书籍信息表'
comment on column book.name is '书名 '
drop table book
truncate table book
常见的系统表
user_constraints-----约束表
dual-----哑表
user_indexes-----索引表
all_users-----包含数据库所有的用户的用户名,ID,创建时间
dba_users-----包含数据库所有的用户的详细信息
user_users-----包含当前用户的详细信息
v$open_cursor-----包含用户执行的SQL语句信息
dba_tab_privs-----包含数据库所有对象的授权信息
user_tab_privs-----包含当前用户的授权信息
dba_roles-----所有角色及其描述
@ 提高表的查询效率,建立在表列上的数据库对象,有独立的物理和逻辑结构
@ 如果没有建立索引,则进行全表扫描,否则索引记录了数据的物理地址,即rowid,根据rowid可以很快找到数据。
@ 唯一索引--索引值不重复的索引
@ 位图索引--每一个索引值建立一个位图
@ 复合索引--多个列上建立索引
@ 优点:增加查询速速,特别是连接查询
@ 缺点:作为一个独立的模式对象存在,需要占用存储空间和间期进行维护
create index index1 on book(id)
create unique index index1 on book(id)
create index index1 on book(id,name, produceDate)
drop index index1
alter index iudex1 rename to index2
select * from user_indexes
(5)索引化表---是一种特殊的表,将表的数据和索引的数据存储在一起,主要是和经常通过主键查询整个记录或部分记录的情况。
create table book
id number(10) not null,
name varchar2(50) default ‘wade’ ,
shopId number(10) not null constraint book_shopId_fk refrences shop(id),
produceDate date default sysdate,
constraints pk1 primary key(id, produceDate)
(6)视图--一个或多个表或视图中提取出来的一种表现形式,是一个虚表,通过视图可以提高数据的安全性,隐藏数据的复杂性,简化查询语句,保存复杂查询,分离引用程序和基础表。
create or replace view v1 as select * from book where id &200 with read only (只能查询)
select * from v1
drop view v1
可以对视图进行DML操作,前提是没有with read only,但是出现以下的关键字时不能操作
@集合操作符(union,union all,intersect,minus)
@聚集函数(avg,sum,count,max)
@group by,connect by或start with,distinct等语句
(7)序列--产生唯一序号的数据库对象吗,一般为主键,长度为38位的十进制数
create sequence s1 increment by 1 start with 1 maxvalue 1000000;
select s1.
select s1.
insert into book(id,name) values(s1.nextval,'james');
drop sequence s1
(8)分区表和分区索引
@随着数据库技术的飞速发展,数据库数据容量越来越大,表中数据达到GB甚至是TB的十分普遍,如何对这些海量数据进行管理是数据库的难题
分区技术是ORACLE对巨型表或巨型索引进行维护和管理的重要技术。
@将一个巨型表或巨型索引分成若干个独立的组成部分进行存储和管理叫分区技术
create table student_rang
sno number(20) primary key,
name varchar2(50),
birth date
partition by rang/list/hash(birth)
partition p1 values less then to_date('','yyyy-mm-dd') tablespace oracle1,
partition p2 values less then to_date('','yyyy-mm-dd') tablespace oracle2,
partition p3 values less then to_date('','yyyy-mm-dd') tablespace oracle3,
create index
i1 on p1(name)
(9)同义词-----数据库中表、视图、索引或其他模式对象的别名
A:可以保证对象的安全性(隐藏实际名称)
B:可以简化对象访问
C:数据对象改变时,可以修改同义词而不要修改应用程序
create public synonym book_syn for czj.
update book_syn set name = 'wade' where id = 34500 ;
drop synonym book_
(10)数据库连接
分布式系统数据库环境一个数据库与另一个数据库之间的通信途径,将远程数据库映射到本地,所有可以访问本地数据库的应用程序都可以操作远程
create database link d_link connect to czj identified by wade399 using 'w3en' ;
update emp@d_link set name = 'wade' where id = 34500
3.TCL语句,commit、rollback等常用语句
v_idDelete number(10):=3;
v_idUpdate number(10):=2;
v_name varchar(20):="James";
delete book where id= v_idD
update book set name=v_name where id = v_idU
when others then
java代码里面使用:
Connection con =
con = DriverManager.getConnection(“jdbc:oracle:thin:@127.0.0.1:1521:MyOrcl”, ”czj”,”cc”);
con.setAutoCommit(false);
addBook(book);
addCostumer(cos);
updateSum(1);
catch(Exception ex)
con.rollback();
throw new RuntimeException(“Sorry! System error!”,ex);
con.close();
4.DCL语句,invoke、voke主要用于权限的分配与回收.(见第四部分)
5 SQL语句优化:
使用表的别名
只查询需要的列,不要select *
in关键字清晰易懂,但是效率不高,建议用exists代替,not in用not exists代替
is null或is not null 是不会引用索引的,因为索引是不会索引空值的,建议用其他功能
相似的关键字
&或&操作符,&2和&=3的效果完全不一样,&2会先找到=2的记录在进行比较,而&=3的会直
接找到=3的记录
用union all 代替union,union不仅会把两个结果合而且会去掉重复的排序,union all仅
from多个表时候,把数据量最少的表写在最后面,首先扫描;
where字句采用自下而上的顺序依次过滤,所以把表的连接条件写在最前面,那些可以过滤
掉最大数量的条件写在末尾
用where字句代替having子句,having只会在检索出所有记录之后才会进行过滤
& 把'0755-'、''、'转23'三个字符串连接起来
select concat('0755-','')||'转23'
& 将'wade'字符串的第一个字母变为大写
select initcap('wade')
& 从'oracleoracle'搜索'a'第2次出现的位置,从第4个字母开始搜索
select instr('oracleoracle','a','4','1')
& 返回数字5555的长度
select length(5555)
& 返回'Wade'所有的字符大写和小写的字符串
select upper('Wade'),lower('Wade')
& 先在字符串'gao'的右边贴上10个'*',再在左边贴上27个'*'
select lpad(rpad('gao',10,'*'),27,'*')
& 字符串'wade and mcgrady'从第3个开始取,取8个
select substr('wade and mcgrady',3,8)
& 字符串'he love no you'中'he'换成'i'
select replace('he love no you','he','i')
& 返回-100的绝对值
select abs(-100)
& 返回大于或等于3.14156的最小整数
select ceil(3.14156)
& 数值55.5和-55.7的四舍五入和去掉小数部分
select round(55.5),round(-55.7),trunc(55.3),trunc(-55.7)
& 增加2月和减少2月
select add_months(to_date('199912','yyyymm'),2),add_months(sysdate,-2)
& 返回日期所在月的最后一天
select last_day(sysdate)
& 用来得到系统的当前日期
select to_char(sysdate,'yyyy--mm--dd')
& 把日期、数字转化成字符串
select to_char(sysdate,'yyyy--mm--dd')
select to_char(sysdate,'yyyy/mm/dd')
select to_char(44444)
& 把字符串转化成日期
select to_date('','yyyy-mm-dd')
& 把字符串转化成数字
select to_number('1999')
& 返回当前的用户
& 求一个字段的平均值、最小值、最大值、总数量、总数
select avg(t.app_info_source),min(t.app_info_source),max(t.app_info_source),count(t.app_info_source),sum(t.app_info_source) from t_application_info t
& case when then 语句
(1)和decode用法一样
case t.name
when 'wade' then 'WWW'
when 'james' then 'jjj'
else 'Other'
(2)特有的用法
select case when 55 &60 then 'd'
when 55 &=60 and 55 &70 then 'c'
when 55 &=70 and 55 &80 then 'b'
& NVL和NVL2用法
select nvl(null,1)
select nvl(3,1)
select nvl2(null,1,2)
select nvl2(5,3,1)
&DECODE函数
decode(concat('wa','de'),'wade','www','james','jjj','other')
& 结果处理函数
UNION: 将多个结果集的行合并,并移除重复的行。
UNION ALL: 将多个结果集所有的行合并,不论是否有重复的行。
EXCEPT: 提取只在 EXCEPT 左侧存在,但右侧不存在的行。
INTERSECT: 只提取两个结果集里,都存在的行。
select t1.app_name_en from t_application_info t1
select t2.app_name_en from t_application_info_change t2
select t1.app_name_en from t_application_info t1
select t2.app_name_en from t_application_info_change t2
select t1.app_name_en from t_application_info t1
select t2.app_name_en from t_application_info_change t2
SELECT t1.app_name_en from t_application_info t1
select t1.app_name_en from t_application_info t1
select t2.app_name_en from t_application_info_change t2;
& 分析函数
select name,row_number() over(partition by name order by point)
以name分区,以point排序的rownumber
select name,rank() over(partition by name order by point)
和row_number()类似
select name,min(point) over(partition by name order by point)
以name分区,以point排序的point最小值
select name,max(point) over(partition by name order by point)
以name分区,以point排序的最大值
select name,count(point) over(partition by name order by point)
以name分区,以point排序的数量
select name,avg(point) over(partition by name order by point)
以name分区,以point排序的平均数
select name,sum(point) over(partition by name order by point)
以name分区,以point排序的总数
(1)排序总规则(中文-拼音-数字)
select * from wade order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
(2)找出id等于3的所有子记录
start with id = 3
connect by nocycle prior id = parentId
(3)判断该字段是否是全数字组成
select replace(translate('22','',' '),' ','')
select replace(translate('ee22','',' '),' ','')
select replace(translate('','',' '),' ','')
select replace(translate(null,'',' '),' ','')
权限与备份
一、安全方面
安全性是对于一个数据库系统是至关重要的,衡量一个数据库产品的重要指标,如果没有足够的安全性,可能导致数据的丢失、泄露、破坏,造成无法估计的损失。
数据库安全性包括2个方面:一是防止非法用户对数据库的访问,未授权的用户不能登录数据库;二是每个数据库用户都有不同的权限,只能进行自己权限范围内的操作。
Oracle安全性包括2个部分:
@系统安全性---有效的用户名与口令的组合、用户是否被授权、用户的磁盘空间使用大小、用户的资源限制、是否启动了数据库审计功能。
@数据安全性---控制数据的存取和操作机制
1、用户管理
@Oracle初始化用户
sys---具有最高权限的用户,可启动修改关闭数据库,拥有数据字典
system---辅助的数据库管理员,不能启动关闭数据库,但能创建用户,删除用户等操作
scott---用于测试网络连接的用户,口令为tiger
public---实际上是一个用户组,数据库所有的用户都属于该组
@用户认证方式
数据库身份认证---用户口令以加密的方式保存在数据库内部
create user u1 identified by wade399
外部身份认证---用户的账户由ORACLE数据库管理,但口令管理和身份验证有外部服务完成,外部服务可以使操作系统和网络服务,
数据库不要求用户输入口令,但会从外部服务获取用户的登录信息,在这种方式下,oracle不会保存用户的口令信息,但需要创建响应的用户,
create user u2 identified externally
全局身份认证---使用网络中的安全管理服务器对用户进行身份认证
create user u3 identified globally as 'cn=d1,l=dalian,c=us'
创建用户名字为wade,口令为wade399,默认表空间名称为users,表空间配额为10M,初始状态密码过期需要修改,账户锁定
create user wade inentidied by wade399 default tablespace users quota 10M on users password
修改用户wade的默认表空间users表空间配额为50M,orcltbs1表空间为10M,账户不锁定
alter user wade default tablespace users quota 50M on users quota 10M on orcltbs1
drop user wade cascade
---用户wade被删除,该用户所拥有的对象也随之删除
drop user wade
---用户wade被删除,该用户所拥有的对象失效
2、权限管理
系统权限-----数据库级别执行某种操作的权限,超过100种系统权限,可将这些权限授予用户、角色、public用户组,若授予public用户组某些权限,则所有用户都具备;
对象权限-----对数据库对象执行某种操作的权限,增删改查
直接授权-----利用grant命令直接授权
间接授权-----先授权给角色,再把角色授予用户
ORACLE权限管里的过程就是权限授予与回收的过程
(1)只有DBA才有alter database的权限
(2)应用程序开发者一般具有create table,create view,create index等权限
(3)普通用户一般只具有create session系统会话连接权限
(4)授权时带有with admin option时,授权传递性,用户可以把这些权限传给其他用户
为public用户组授权create session
grant create session to public
为用户wade授予create table,create view,create session权限,wade再给wade2用户授予create table权限
system: grant create table,create view,create session to wade with admin option
: grant create table to wade2
revoke create table,create view,crea
虽然wade的权限被收回了,但是前段时间wade传给wade2的权限不受到影响
对象权限:
将scott用户下的emp表的select、update权限授予wade,wade再给wade2用户授予emp表的select权限
system: grant select,update on scott.emp to wade with admin option
: grant select on scott.emp to wade2
revoke select,update on scott.
wade的权限被收回了,同时前段时间wade传给wade2的权限也没了
3、角色管理
所谓角色就是相关权限的集合,角色、用户、权限、授权的关系相当于工作流中的角色、用户、模块、权限的关系。
@预定义角色-----在数据库创建的时候系统自动创建的一些常用的角色,oracle中有30种,常见的有connect、resource、dba等
@自定义角色
create role r1
(此不需要进行验证)
create role r2 identidied by r2
(此进行验证的口令为r2)
alter role r1 identidied by r1
alter role r2 not identidied
@角色的生效于失效
set role none
set role r1 none
drop role r1
@权限授予角色
grant create session,create table,create view to r1
revoke create session,create table,create view from r1;
@角色授予角色
grant connect,dba to r1
revoke connect,dba from r1;
@角色授予用户
grant connect,dba to wade
revoke connect,@权限授予用户
grant create session to wade
revoke create session from wade
@用户角色屏蔽与激活
alter user wade default role none
alter user wade default role connect,dba
4、概要文件管理
概要文件是数据库和系统资源限制的集合,是安全策略的组成部分,每个用户必须有一个概要文件,创建数据库的时候,会创建一个default的默认文件。
分为资源管理参数和口令管理参数。
@创建一个概要文件,用户连续4次登录失败,锁定该账户,10天后自动解锁
create profile res_pro limit failed_login_attempts 4 password_lock_time 10;
@创建一个概要文件,用户最多创建4个并发会话,每个回话最多持续60分钟,连续回话有20分钟空闲,停止会话,每个会话私有SQL区为100K,每个SQL语句占用CPU时间总量不超过10秒
create profile res_pro2 limit session_per_user 4 connect_time 60 idle_time 20 private_sga 100k cpu_per_call 10;
@将概要文件分发给用户
alter user wade profile res_pro
@删除概要文件
drop profile res_pro2
二、备份恢复与数据导出
数据库备份的目的是防止意外丢失或毁坏数据,如果对数据库进行了备份,如果发生了意外也可以进行恢复
1、物理备份与恢复
将数据库物理文件进行备份,包括数据文件、控制文件、重做日志文件、归档重做日志文件的物理复制
@冷备份----在数据库关闭状态下进行备份,恢复就是用备份的文件替换原来的文件
@热备份----在数据库开启状态下进行备份
2、逻辑备份与恢复
对表结构、模式对象进行备份,是SQL语句的集合
oracle的export工具读取数据并保存在一个称为导出转储文件(dmp)的二进制文件汇总,可以选择导出整个数据库、用户、表的内容。
exp help = y 显示导出工具帮助信息
(1)交互式数据导出
导出文件:expdat& d:\test.dmp
(2)U(用户),或(3)T表:U
在没有警告的条件下成功终止导出
(2)命令行模式导出
exp userid = scott/tiger file =d:/test.dmp tables=test
(3)参数模式导出
I: 创建一个参数文件test.parfile
userid=scott/tiger
file=d:\test.dmp
tables=test
II: 输入命令行:exp parfile=d:\test.parfile
(4)oOEM界面导出
orcl-数据管理-导出
(1)交互式数据导入
导入文件:expdat& d:\test.dmp
在没有警告的条件下成功终止导入 (2)命令行模式导入
imp userid = scott/tiger file =d:/test.dmp tables=test rows=y
(3)参数模式导入
I: 创建一个参数文件test.parfile
userid=scott/tiger
file=d:\test.dmp
tables=test
II: 输入命令行:imp parfile=d:\test.parfile
(4)oOEM界面导入
orcl-数据管理-导入
Oracle net监听器简称监听器,是位于服务器端的一个后台进程,负责对客户端传入的连接请求进行监听,接收客户端的连接请求后,交给服务器进行处理,一旦
客户端和服务器的连接建立起来,两端可以直接通信,不需要监听器的参与。
常见的网络配置工具
Oracle Net Configuration Assistant
Oracle Net Manager
PL/SQL编程
PL/SQL是oracle对标准SQL语言的过程化扩展,是Oracle专用的一种高级程序设计语言。
PL/SQL块分成2类,一为匿名块,动态生成,只能执行一次,不能由其它程序调用的块;
另一类为命名块,一次编译可多次执行的块,包括函数、存储过程、包、触发器等,编译后放在服务器中由应用程序或指定环境调用。
(1)与sql语句紧密集成,所有SQL语句在PL/SQL中都得到支持;
(2)减少网络流量,提高应用程序的运行性能,一个PLSQL程序可包含多个SQL语句;
(3)模块化的程序设计功能,提高系统的可靠性;
(4)服务器端的程序设计,可移植性好,以编译的形式存储在数据库中;
&PL/SQL程序块的组成
申明部分,定义变量,数据类型,异常,局部子程序等【可选】
执行部分,实现块的功能,可嵌套其它的子程序【必选】
异常处理部分【可选】
&定义一个包含子块的PL/SQL块
v_name varchar2(20);
v_sal number(5);
select name into v_name from emp where empno = 1887;
select avg(sal) into v_sal from emp where name = v_
dbms_output.putline(v_sal);
注: select ... into ...语句: 只能查出一条记录信息,没数据生成no_data_found异常,查询到多个记录则生成too_many_rows异常,返回多个记录用游标处理。
数字类型:number(2,1),binary_integer。number(2,1)表示总共2位,小数点后1位
字符类型:varchar2(30),char,varchar。varchar2最大字节数oracle为4000,PL/SQL中为32767
日期类型:date,timestamp。
布尔类型:true,false,null。
%type和%rowtype: 定义一个变量的数据类型和表某一列的数据类型一致,表示为%type;和表结构一致,表示为%rowtype。
v_name emp.name%
v_emp emp%
&变量与常量
变量名称 [constant] 数据类型 [not null] [default|:=
v1 number(3);
v2 varchar2(20) not null := '4455';
v3 constant number(3,1) default 50.5;
v_empno emp.empno%
v_sal_after emp.sal%
select empno+'555' into v_empno from emp where empno = 7600;
insert into emp(empno,ename,sal,deptno) values (v_empno,'Jon',2300,20);
update emp set sal = sal+100 where empno = v_empno returning sal into v_sal_
//returning把修改之后的薪水返回
delete emp where empno = v_
dbms_output.putline(v_sal_after);
&控制流程之【if】
v_no number(1) :=5;
v_result varchar2(2);
if v_no & 5
then v_result := 'less then 5';
else if v_no = 5
then v_result := 'equals 5';
else if v_no & 5
then v_result := 'more then 5';
else v_result := 'error';
&控制流程之【case】
v_no number(1) :=5;
v_result varchar2(2);
when 1 then v_result := 'equals 1';
when 3 then v_result := 'equals 3';
when 5 then v_result := 'equals 5';
else v_result := 'other';
when v_no&5 then v_result := 'less then 5';
when v_no=5 then v_result := 'equals 5';
when v_no&5 then v_result := 'more then 5';
else v_result := 'error';
&控制流程之【简单循环】
v_no binary_integer :=1;
insert into emp(empno,ename) values (v_no,'Jon');
v_no:=v_no+1;
exit when v_no = 50;
&控制流程之【while循环】
v_no binary_integer :=1;
while v_no &50 loop
insert into emp(empno,ename) values (v_no,'Jon');
v_no:=v_no+1;
&控制流程之【for循环】
v_no binary_integer :=1;
for v_no in 1..50 loop
insert into emp(empno,ename) values (v_no,'Jon');
预定义异常--常见的异常
非预定义异常--不常见的异常
自定义异常
v_no binary_integer :=2000;
if v_no&1500 then raise v_
when v_ex then dbms_output.put_line('too high!');
when others then
dbms_output.put_line(v_code+':
'+v_text);
&游标 --处理select语句返回多条数据
显示游标:用户自定义和操作
隐式图标:系统自动进行操作,用于处理DML语句和单行数据
1. 显示游标
cursor c1 is select id,
//定义游标
v_id book.id%
v_name book.name%
//打开游标
fetch c1 into v_id,v_
//检索游标
exit when c1%
dbms_output.put_line(v_id+”;”+v_name);
//关闭游标
3种方式检索游标,以上是简单loop方式
fetch c1 into v_id,v_
while c1%found
fetch c1 into v_id,v_
dbms_output.put_line(v_id+”;”+v_name);
for v_id,v_name
fetch c1 into v_id,v_
dbms_output.put_line(v_id+”;”+v_name);
注意:用for循环检索的时候不用打开、关闭游标
显示游标的属性
布尔型,游标是否打开
布尔型,是否最近一次能检索到数据
布尔型,与%found相反
数字型,返回到目前为止游标从缓冲区检索到的记录个数
参数化游标
cursor c_1(e_name emp.ename%type,e_sal emp.sal%type) is select * from emp where ename = e_name and sal & e_
v_emp emp%
open c_1('wade',4000);
fetch c_1 into v_
dbms_output.put_line(v_emp.empno);
exit when c_1%
利用游标更新或删除数据
cursor c_1(e_name emp.ename%type,e_sal emp.sal%type) is select * from emp where ename = e_name and sal & e_
v_emp emp%
open c_1('wade',4000);
fetch c_1 into v_
update emp set sal =sal+100 where current of c_1;
exit when c_1%
2.隐式游标
sql%isopen
布尔型,游标是否打开
布尔型,是否最近一次能检索到数据
sql%notfound
布尔型,与%found相反
sql%rowcount
数字型,返回到目前为止游标从缓冲区检索到的记录个数
update emp set sal =sal+100 where empno =1009;
if sql%notfound or sql%rowcount =0 then
insert into emp(empno,sal) values (');
&存储子程序-----指被命名的PL/SQL块,以编译的形式存储在数据库服务器中,可以在应用程序中进行调用,包括存储过程、函数
存储过程和函数区别:
通常存储过程是一个独立的表达式被调用,没有返回值;
函数是一个独立的表达式的组成部分被调用,有返回值;
1. 存储过程
(1) 参数模式
in- 默认的,调用过程中实参没有被形参改变;
out - 返回调用环境时,形参的值赋予实参;
inout- 返回调用环境时,形参的值赋予实参;
create or replace proceduce p1(v_id in number(10),v_name in varchar(10)) as
v_id number(10);
v_name varchar(20);
dbms_output.put_line(v_id+”;”+v_name);
v_id number(10):=10;
v_name varchar(20):=’wade’;
exec p1(v_id,v_name);
call p1(v_id,v_name);
&触发器----是特殊的存储过程,由系统自动的调用,不能由应用程序调用。
1 触发器的组成
(1)建立在基本表的操作(DML触发器),响应基本的增删改操作;
建立在视图上面的操作(instead of触发器);
建立在系统或模块上面的操作(系统触发器);
(2)触发事件可以用OR连接起来
(3)触发时间可以是before和after
(4)触发级别:
语句级(触发一次执行一次)
行级for each row(触发事件每作用于一行记录,触发一次)
(5)触发条件和触发操作
create or replace trigger t1 after insert or delete or update
v_id number(10):=1;
v_name number(10):=1;
insert into shop(id,name) values(v_id, v_name);
exit when v_id = 100000;
create or replace trigger t2 before update of sal on emp for each row when (old.sal&new.sal)
raise_application_error(-2000,'error...');
alter trigger t1
alter trigger t1
drop trigger t1;
create or replace function f1(e_no emp.empno%type) return emp.sal%type as
v_sal emp.sal%
select sal into v_sal from emp where empno = e_
v_sal emp.sal%
v_sal = f1(1996);
alter function f1
drop function f1;
&包------将相关的PL/SQL块或元素(过程、函数、变量、游标等)组织在一起,成为一个完整的单元,供应用程序调用。
create or replace package body pp1 as
create or replace proceduce p1(v_id number(10),v_name varchar(10)) as
dbms_output.put_line(v_id+”;”+v_name);
create or replace proceduce p2() as
dbms_output.put_line('55555');
pp1.p1(23,'wade');
如果您喜欢IT行业或者对IT行业感兴趣,想开拓技术视野,欢迎加入本站官方QQ群:,在群里认识新朋友和交流技术^_^
本站联系邮箱:}

我要回帖

更多关于 为什么使用存储过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信