oralce 中字符值和日期值区分大小写;
2.常用sqlpluse 命令以下是一些sqlpus命令remark 注释行
set headsep 标题分隔符
ttitle 头标题
btitle 尾标题
column 列标题及列格式设定
break on 报表各部分间插入空格或将小计和总计断开compute sum 计算小计
set linesize 行的最大字符数
set pagesize 页中的行数
set newpage 页间的空行数
spool 将报表写入到文件
set pause 页间停顿
save 将建立的SQL查询存诸到文件
host 执行外部命令
start或@ 执行sqlplus脚本
edit 进入自定义的编辑器
define_editor 定义编缉器
exit或quit 退出sqlplus
rem bookshelf activity report
set headsep !
ttitle 'Checkout Log for 1/1/02-3/31/2'
btitle 'from the BookSelf'
column Name format a20
column Title format a20 word_wrapped
column DaysOut format 999.99
column DaysOut heading 'Day!Out'
break on Name skip 1 on report
compute avg of DaysOut on Name
compute avg of DaysOut on report
set linesize 80
set pagesize 60
set newpage 0
set feedback off
spool activity.lst
select Name,Title,CheckoutDate,ReturnedDate, ReturnedDate-CheckoutDate as DayOut
from BOOKSELF_CHECKOUT
order by Name,CheckoutDate;
spool off
这个脚本的基本结构:
注释
标题设定
列标题及列格式设定
小计及总计设定各部分间隔设定
页面设定
打印到文件
选择数据
alter procedure 编辑存储过程。
alter table 增加表列、重定义表列、更改给定表存储区分配。
analyze 收集数据库对象的性能统计资料并送往基本的优化器。
alter table add constraint 在已有的表上增加约束。
create table 创建表。
create index 创建索引。
drop index 删除索引。
drop table 删除表。
grant 将权限和角授予用户或角。
revoke 从用户或数据库角处收回角。
3.函数ceil函数返回大于数字N的最小整数与之对应的函数是floor函数:返回小于或者等于数字N的最大整数;
5.ASCII(CHAR) CHAR(N),CONCAT函数用于连接字符串,其用途和||完全相同。
6.INITCAP(char)函数用于将字符串首字母大写注意单词之间要有空格。、
7.INSTR(CHAR1,CHAR2.[N,[M]])该函数用于取得子串在字符串中的位置,其中N位其实搜索位置,数字M为出现的次数。如果N为负数,则从尾部开始搜索,数字M必须为正数,SQL> select instr('morming ','m',1,2) from dual;
INSTR('MORMING','M',1,2)
------------------------
4
8.LPAD(char1,N,char2)函数用于在字符串char1的左端填充字符串char2,知道字符串的长度为N
9.utl_inaddr包主要获取局域网或者internet 中的主机名和ip地址;get_host_name(ip in varchar2 default null)return varchar2 用于取得制定ip所对应的主机名,get_host_address(host in varchar2 default null)return varchar2 ;取得制
定主机所对应的ip地址
select _host_name from dual;
select _host_address from dual;
10.文件操作包utl_file包含24个函数
11.dbms_stats用于搜集,查看,修改数据库对象的优化统计信息;包含29个函数。
12.dbms_resource_manager包用于维护资源计划,资源使用组和资源计划指令,dbms_resourece_manager_privs用于维护与资源管理相关的权限。
13.dbms_repair用于检测,修复在表和索引上的损坏数据块;
14.Dbms_tts用于检查表空间集合是否是自包含的,并在执行了检查之后将违反自包含规则的信息写入临时表transport_set_violations中;
15.dbms_space_admin博爱提供了局部管理表空间的功能;
16.dbms_space用于分析段增长和空间的需求;
17.dbms_obfuscation_toolkit包用于加密和解密应用数据,另外还可以生成密码和校验和,通过加密输入数据,可以防止黑客或其他用户窃取私有数据,而通过结合使用加密和密码校验和,可以防止黑客破坏被加密的数据,当使用该包加密数据时,要求被加密的数据长度必须为8字节的整数倍,当使用DES算法加密数据时,密钥长度不能低于8字节,18.dbms_flashback包用于激活或者机制回话的flash特征,为了使得普通用户也使用该包,必须要将执行该包的权授予用户:GRANT EXECUTE ON DBMS_FLASHBACK TO SCOTT;
Oracle有个非常强大的功能:闪回,它可以修改ORACLE当前用户的时间,令其回到过去指定的某个时间点,并且可以还原当时的数据,就算数据被修改、删除,都能够通过闪回重现。
如果不小心删除了数据,并且已经commit了,那么可以利用闪回回到过去,将数据复制出来,手动恢复。
注意:闪回不能重现已经被TRUNCATE的数据。
下面进入历史重现——闪回的操作:
1、如果需要使用闪回功能,那么需要dba给当前用户赋予权限:
grant execute on sys.dbms_flashback to test;
2、假定原有一个表:table1
3、字段:ID,Name,并且存在8条数据,
4、SQL> select * from table1;
ID NAME
--------------------------------------- ----------
1 User_01
2 User_02
3 User_03
4 User_04
5 User_05
6 User_06
7 User_07
8 User_08
8 rows selected
5、现在删除数据:DELETE FROM table1;commit;
6、再次查询:
SQL> select * from table1;
ID NAME
-
-------------------------------------- ----------
7、已经没有数据了,那么开始闪回——回到过去:
execute able_at_time(sysdate - 10 /1440);
10/1440表示10分钟
8、再来查询一把:
SQL> select * from table1;
ID NAME
--------------------------------------- ----------
1 User_01
2 User_02
3 User_03
4 User_04
批量更新sql语句5 User_05
6 User_06
7 User_07
8 User_08
8 rows selected
历史重现了,系统闪回到了数据未被删除的时间点。
9、我们再回到现在:
execute dbms_flashback.disable;
10、再次查询:
SQL> select * from table1;
ID NAME
--------------------------------------- ----------
已经没有数据了,说明在当前时间点,数据已经被删除了。
11、做得彻底一点:TRUNCATE TABLE table1;
12、再次闪回:execute able_at_time(sysdate - 10 /1440);
13、SQL> select * from table1;
ID NAME
--------------------------------------- ----------
由于数据被TRUNCATE 了,所以就算闪回也没有办法了。
14、ORACLE还能够根据系统变更号SCN来进行闪回:
获取当前系统SCN:
SQL> var v_sys_cns number;
SQL> execute :v_sys_cns := _system_change_number;
PL/SQL procedure successfully completed
v_sys_cns
---------
383054
15、回到指定SCN的时间点:
SQL> execute able_at_system_change_number(383054);
16、禁止闪回:execute dbms_flashback.disable();
19.dbms_logmnr包可以分析重做日志和归档日志所记载的食物变化,最终确定误操作的时间,跟踪用户事务操作,跟踪并还原表的DML操作。
20.dbms_random提供了内置的随机数生成器,用于快速生成随机数。
21.dbms_shared_pool提供了对共享池的一些过程和函数访问,他使用户可以显示共享池中的对象尺寸,绑定对象到共享池,清除绑定到共享池的对象,
22.dbms_ddl提供了在PL/sql块中执行DDL语句的方法,并且也提供了一些DDL的特殊管理方法,
23.dbms_rls包用于实现精细的访问控制,
24.dbms_rouid用于在pl/sql程序和sql语句中取得标示符ROWID的信息并建立ROWID,通过使用该包,可以取得行行所在的文件号,行所在文件的数据块号,数据库对象号信息;
25.dbms_session包提供了使用pl/sql实现alter session命令,SET ROLE命令,和其他回话信息的方法。
26.dbms_tansaction用于在过程,函数和包中执行sql事物处理语句,
27.dbms_alert用于生成并传递数据库预警信息,合理的是使用包和数据库触发器,可以使得在发生特定的数据库时间时将信息传递给应用程序,但是某个用户若想使用此包必须以Sys登录,为其赋权,GRANT EXECUTE ON DBMS_ALERT TO SCOTT;
28;dbms_pipe
29:dbms_job用于安排和管理作业队列,通过使用作业,可以使oracle数据库定期执行特定的任务,使用此包是必须确定设置了初始化参数JOB_QUEUE_PROCESSES(不能为零);
30.DBMS_OUTPUT包用于输入和输出信息,使用PUT PUT_LINE可以讲信息发送到缓冲区,使用过程GET_LINE OET_LINES可以显示缓冲区的信息;
31:关于LOB对象的使用:lob类型专门用于存贮大对象的数据,包括大文本,图形,图像,视频分为内部lob (CLOB,BLOB,NCLOB)他们数据被存贮在数据库中,并且支持事务操作,外部lob只有BFILE,该类型的数据存在操作系统中,并且不支持事务操作,CLOB/NCLOB用于存储大批量的字符数据,BLOB用于存储大批量的二进制数据,而BFILE则存贮着指向OS文件的指针;
32.建立并使用对象类型,及复杂的对象类型,及对象类型的维护;
33.动态sqlzai 在pl/sql中只能使用动态sql执行DDL和DCL语句
动态sql处理方法
(1)execute immediate语句可以处理多数董岱sql操作,包括DDL(create,alter,drop),DCL(grant,
revoke),DML(insert,update,delete)以及单行select语句;注意的是:execute immediate 不能用于处理多行查询语句。
(2)使用open_for,fetch和close为了处理动态的多行查询操作,必须使用open-for语句打开游标,使用
fetch语句循环提取数据,最后使用close语句关闭游标
(3)使用批量动态sql:批量动态sql可以提高pl/sql程序的性能;
(4)个人总结:在使用动态sql时一定要注意字符串连接时要有空格;
34.触发器(由触发事件,触发条件,触发操作构成)
(1)触发事件类型:
1.启动和关闭例程
3.用户登录和断开回话
4.特定表或视图的DML操作
5.在任何方案上的DML 语句
(2)触发条件:指使用when子句指定一个boolean表达式,当布尔表达式为真时,会自动执行触发器相应代码,当布尔表达式为false或者unknown是不会执行触发操作
(3),触发操作:是指包含sql语句和其他执行代码的pl/sql块,不仅可以使用sql/pl进行开发,也可以使用java和其他语言进行开发。但是应该注意的是(1)触发器的大小不能超过32K,如果实际需要大量的代码,应该事先建立存储过程,然后调用存储过程。(2)触发器代码只能包含select,insert,update,delete语句,而不能包含DDL语句(create,alter,drop)和事物控制语句(commit,rollback,和SvaEpoint)
(4)触发时机,当指定before时,表示在执行dML操作之前触发触发器,当指定after时,表示在执行了DML操作之后触发触发器。
35.触发器重点知识:触发器由触发事件,触发条件和触发操作组成
1.触发事件
1)启动和关闭例程
2)oracle错误消息
3)用户登陆和断开会话
4)特定表或视图的DML操作
5)在任何方案上的DDL语句
2.触发条件(可选)
触发条件是指使用when字句指定一个boolean表达式,当满足时候执行触发器相应代码,反之则不执行
3.触发器操作
指包含SQL语句和其他执行代码的PL/SQL块,不仅可以使用pl/sql进行开发,也可以使用java和c语言进行开发但触发器执行代码时,需要注意以下限制:(1)触发器代码的大小不能超过32K,如果确实需要大量代码,可以用call语句调用存储过程.(2)触发器代码只能包含select,insert,update和delete语句,而不能包含ddl语句(create,alter,drop)和事务控制语句(commit,rollback,和savepoint)
建立DML触发器
1.触发时机
2.触发事件
3.表名
4.触发器类型(默认的语句触发类型还是行触发器类型)
5.触发条件
6.触发操作
7.dml触发器触发顺序
1)dml触发器在单行数据上的触发顺序
当针对某一表的相同DML操作而建立了多个DML触发器(before/after语句触发器,before/after行触发器)时,如果在单行数据上执行了改种DML操作,则案照如下顺序进行触发:before语句/before行/after行/after语句.
2)dml触发器在多行数据上的触发顺序
当针对某一表的相同DML操作而建立了多个DML触发器(before/after语句触发器,before/after行触发器)
时,如果在多行数据上执行了改种DML操作,则案照如下顺序进行触发:before语句/before行/after行/before行/after行/ after语句.即实际上语句触发器只被执行一次
语句触发器(审计DML操作或DML操作安全执行时)
create or replace trigger trigger_name timing event1(or event2 or event3) _disibledevent=AMERI CAN') in ('SAT','SUN') then
case
when inserting then
raise_application_error(-20001,'不能在休息日增加雇员');
when updating then
raise_application_error(-20002,'不能在休息日更新雇员');
when deleting then
raise_application_error(-20003,'不能在休息日解雇雇员');
end case;
end if;
end;
行触发器(审计数据变化时可以使用)
1.建立before行触发器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论