第十课Oracle PLSQL块基础、编写规则
- 格式:ppt
- 大小:425.00 KB
- 文档页数:55
plsql的注册方法1.简介在O ra cl e数据库中,P L/SQ L是一种程序设计语言,它是在S QL语言的基础上添加了过程性编程的能力。
在PL/SQ L中,我们可以定义存储过程、函数和触发器等,以实现更复杂的业务逻辑和数据处理操作。
本文将介绍在P L/SQ L中的注册方法和使用技巧,帮助您更好地理解和应用P L/S QL。
2. PL/SQL的注册过程在使用P L/SQ L之前,我们需要在数据库中注册我们编写的PL/SQ L程序,以便可以在其他程序或者数据库操作中调用和执行。
下面是P L/SQ L 的注册过程:2.1创建P L/S Q L程序首先,我们需要在数据库中创建我们的PL/SQ L程序。
可以使用O r ac le的开发工具如S QL De ve lo pe r或者PL/S QL De ve lop e r来创建程序,也可以在SQ L*Pl u s命令行工具中使用C RE AT EP RO CE DU RE或者C R EA TE FU NC TI ON语句来创建。
2.2编译P L/S Q L程序创建完成后,我们需要对PL/S QL程序进行编译。
编译的过程会检查程序的语法、语义等错误,并生成可以直接执行的二进制代码。
我们可以使用AL TE RP RO CE DUR E或A LT ER FU NC TIO N语句对程序进行编译。
2.3注册P L/S Q L程序编译完成后,我们需要在数据库中注册我们的PL/S QL程序,以便可以被其他程序或者数据库操作调用和执行。
可以使用C R EA TE OR RE PL AC EPR O CE DU RE或C RE ATE O RR EP LA CE FU NC TIO N语句来注册程序。
创建或替换的过程将会在数据库中创建或更新相应的元数据。
2.4授权P L/S Q L程序在注册完成后,我们还需要为我们的P L/S Q L程序授权,以便其他用户或者角色能够调用和执行它。
plsql developer14使用技巧PL/SQL Developer是一款功能强大的Oracle数据库开发工具,用于编写、调试和优化PL/SQL代码。
无论是新手还是有经验的开发人员,在使用PL/SQL Developer时都可以从以下几个方面提高开发效率和代码质量。
一、界面设置及快捷键1.适应自己的工作习惯,可以根据需要配置界面布局、字体大小等。
2.设置自己喜欢的配色方案,减少眼部疲劳。
3.学习并使用PL/SQL Developer的快捷键,例如Ctrl+空格可以自动补全关键字和对象名称,F9可以执行选中的代码块等。
二、导航和对象查看1.使用对象浏览器可以方便地查看数据库对象的结构,双击可直接编辑对象。
2.使用查找功能可以快速定位代码中的特定关键字。
3.在代码中使用Ctrl+点击可以快速跳转到对象的定义或引用位置。
三、代码编写和调试1.编写代码时,利用代码提示和补全功能,避免拼写错误和语法错误。
2.使用代码块编辑器可以快速生成常用代码块,提高开发效率。
3.使用断点和调试功能,可以逐行调试代码,查看变量值和执行路径,帮助定位问题和解决bug。
四、性能调优和优化1.使用性能分析器可以对SQL语句进行调优和优化,定位性能瓶颈并提出优化建议。
2.使用执行计划分析工具可以查看SQL语句的执行计划,优化查询性能。
3.使用性能图表可以直观地查看数据库的性能状况,及时调整参数和优化SQL语句。
五、版本控制和团队协作1.将代码纳入版本控制系统,保证代码的版本管理和历史记录。
2.使用代码注释和文档功能,方便他人理解和维护代码。
3.与团队成员共享代码和工作成果,可以通过文件比较功能检查代码的差异和合并更新。
六、自动化和批处理1.使用脚本编辑器和批处理功能可以批量执行SQL语句,提高工作效率。
2.学习并使用PL/SQL Developer的命令行工具,可以通过命令行执行常用操作,如导出数据、执行脚本等。
七、学习和社区支持1.阅读PL/SQL Developer的官方文档,了解每个功能的详细用法和注意事项。
翻译:陈拓 chentuo@2006 年 6 月16 日创建过程Copyright © Oracle Corporation, 2001. All rights reserved.进度表: 时间 主题40 分钟 讲演25 分钟 练习65 分钟 总共目标完成本课程后, 您应当能够:• 描述过程• 创建过程• 形式参数和实际参数之间的区别• 列举不同参数模式的特性• 创建带参数的过程• 调用过程• 在过程中处理异常• 删除过程22 Copyright © Oracle Corporation, 2001. All rights reserved.本课目标在本课中,你将学习创建、执行和删除过程。
什么是过程?• 过程是执行一个动作的子程序的一种类型• 过程可以作为一个方案对象被存储在数据库中,用于重 复执行23 Copyright © Oracle Corporation, 2001. All rights reserved.过程的定义过程是一个命名的 PL/SQL 块,它能够接收参数 (在英文中 parameters 有时也称 为 arguments),并且被调用,一般而言,你使用一个过程来完成一个动作。
一个过程有 一个头,一个声明部分,一个执行部分和一个可选的异常处理部分。
一个过程可以被编译并且被作为方案对象存储在数据库中。
过程提高可重用性和可维护性。
当可用时,他们可以在应用程序中被多次使用。
如 果需求改变了,仅仅过程序要被更新,应用程序可以不受影响。
24 Copyright © Oracle Corporation, 2001. All rights reserved.创建过程的语法• REPLACE 选项指示如果过程存在,它将被删除并且用语句创建的新版本代替• PL/SQL 块,既可以用 BEGIN 开始也可以用局部变量的声明开始,既可以用 END 结束也可以用 ENDprocedure_name 结束CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .)] IS|AS PL/SQL Block;CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .)] IS|AS PL/SQL Block; 创建过程的语法语法定义 参数说明 procedure_name过程的名字 parameterPL/SQL 变量的名字,依据所使用的模式,参数值由过程被 传递到主叫环境或反之,或两者都有 mode参数的类型:IN (默认)、OUT 、IN OUT Data type参数的数据类型 可以是任何 PL/SQL 数据类型。
sql语句的编程手册SQL PLUS一、SQL PLUS1 引言SQL命令以下17个是作为语句开头的关键字:alter drop revokeaudit grant rollback*commit* insert selectcomment lock updatecreate noaudit validatedelete rename这些命令必须以“;”结尾带*命令句尾不必加分号,并且不存入SQL缓存区。
SQL中没有的SQL*PLUS命令这些命令不存入SQL缓存区@ define pause# del quit$ describe remark/ disconnect runaccept document saveappend edit setbreak exit showbtitle get spoolchange help sqlplusclear host startcolumn input timingcompute list ttitleconnect newpage undefinecopy---------2 数据库查询数据字典TAB 用户创建的所有基表、视图和同义词清单DTAB 构成数据字典的所有表COL 用户创建的基表的所有列定义的清单CA TALOG 用户可存取的所有基表清单select * from tab;describe命令描述基表的结构信息describe deptselect *from emp;select empno,ename,jobfrom emp;select * from deptorder by deptno desc;逻辑运算符= !=或<> > >= < <=inbetween value1 and value2like%_in nullnotno in,is not null谓词in和not in有哪些职员和分析员select ename,jobfrom empwhere job in ('clerk','analyst');select ename,jobfrom empwhere job not in ('clerk','analyst');谓词between和not between哪些雇员的工资在2000和3000之间select ename,job,sal from empwhere sal between 2000 and 3000;select ename,job,sal from empwhere sal not between 2000 and 3000;谓词like,not likeselect ename,deptno from empwhere ename like 'S%';(以字母S开头)select ename,deptno from empwhere ename like '%K';(以K结尾)select ename,deptno from empwhere ename like 'W___';(以W开头,后面仅有三个字母)select ename,job from empwhere job not like 'sales%';(哪些雇员的工种名不以sales开头)谓词is null,is not null没有奖金的雇员(即commision为null)select ename,job from empwhere comm is null;select ename,job from empwhere comm is not null;多条件查询select ename,jobfrom empwhere deptno=20and job!='clerk';表达式+ - * /算术表达式选择奖金高于其工资的5%的雇员select ename,sal,comm,comm/sal from emp where comm>.05*salorder by comm/sal desc;日期型数据的运算add two days to 6-Mar-876-Mar-87 + 2 = 8-Mar-87add two hours to 6-Mar-876-Mar-87 + 2/24 = 6-Mar-87 and 2hrsadd 15 seconds to 6-Mar-876-Mar-87 + 15/(24*60*60) = 6-Mar-87 and 15 secs列名的别名select ename employee from empwhere deptno=10;(别名:employee)select ename,sal,comm,comm/sal "C/S RATIO" from empwhere comm>.05*salorder by comm/sal desc;SQL命令的编辑list or l 显示缓冲区的内容list 4 显示当前SQL命令的第4行,并把第4行作为当前行,在该行号后面有个*。
Oracle数据库之PLSQL触发器Oracle数据库之PL/SQL触发器1. 介绍触发器(trigger)是提供给程序员和数据分析员来保证数据完整性的⼀种⽅法,它是与表事件相关的特殊的存储过程,它的执⾏不是由程序调⽤,也不是⼿⼯启动,⽽是由事件来触发,⽐如当对⼀个表进⾏操作(insert,delete,update)时就会激活它执⾏。
触发器经常⽤于加强数据的完整性约束和业务规则等。
触发器有三种类型,分别是:DML触发器、替代触发器和系统触发器。
DML触发器顾名思义,DML触发器是由DML语句触发的。
例如数据库的INSERT、UPDATE、DELETE操作都可以触发该类型的触发器。
它们可以在这些语句之前或之后触发,或者在⾏级上触发(就是说对于每个受影响的⾏都触发⼀次)。
替代触发器替代触发器只能使⽤在视图上,与DML不同的是,DML触发器是运⾏在DML之外的,⽽替代触发器是代替激发它的DML语句运⾏。
替代触发器是⾏触发器。
系统触发器这种触发器是发⽣在如数据库启动或关闭等系统事件时,不是在执⾏DML语句时发⽣,当然也可以在DDL时触发。
触发器功能强⼤,轻松可靠地实现许多复杂的功能,但是我们也应该慎⽤。
为什么⼜要慎⽤呢?触发器本⾝没有过错,但如果我们滥⽤,会造成数据库及应⽤程序的维护困难。
在数据库操作中,我们可以通过关系、触发器、存储过程、应⽤程序等来实现数据操作,同时约束、缺省值也是保证数据完整性的重要保障。
如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
2. 触发器组成触发器主要由以下⼏个要素组成:1. 触发事件:引起触发器被触发的事件。
2. 触发时间:触发器是在触发事件发⽣之前(BEFORE)还是之后(AFTER)触发,也就是触发事件和该触发器的操作顺序。
3. 触发操作:触发器被触发之后的⽬的和意图,是触发器本⾝要做的事情。
4. 触发对象:包括表、视图、模式、数据库。
PL/SQL Developer使用指南作为oracle的第三方开发工具,PL/SQL Developer使oracle PL/SQL语句的编译及执行显得更加简单易用。
而在其他的方面,和其他的第三方工具(如Toad)都有相似的功能和操作方法。
一、安装PL/SQL Developer不需要执行安装程序,只要从其他机上copy一个来就可以使用。
二、登录在使用PL/SQL Developer之前,首先需要在本机上配置数据库客户端(在oracle自带工具Net8 Assistant中可配置)。
配置完成后,在以下窗口中敲入用户名和密码就可进入PL/SQL Developer了。
进入PL/SQL Developer以后,会见到以下窗口:在这里,可以对数据库中的任何对象(包括函数、存储过程、包、表、触发器等等)进行编辑、修改、运行等。
(要视乎该用户的权限而定)。
如果用户要重新登录另一数据库,则可以按下“”重新输入本地数据库标识和用户及密码重新登录。
三、修改对象或编译存储过程我们以存储过程为例:双击菜单项“procedures”,按右键即可选择新建存储过程(new)或是修改存储过程(edit)等等。
选择完毕后则用oracle的PL/SQL语句对存储过程进行编辑,在编辑完以后按下可以对它进行编译,如果编译未通过,会在窗口中出现错误提示(如下图所示),用户可根据提示进行修改和再次编译。
当完全编译通过后,用户可单击存储过程并按右键,选择“test”(执行存储过程),出现以下窗口:在执行前,首先按“”进行调试,然后按“”执行该存储过程;如果用户在执行过程中发生错误异常退出了,PL/SQL Developer会在窗口中显示错误,并提示退出。
在发生错误后,用户可以选择在存储过程中添加“DBMS_OUTPUT.put_line(字符串)”语句来进行错误跟踪或是通过一步步执行存储过程(按)来查看执行过程中数据的变化从而进行纠错。
--修改表的内容 DDLselect*from emp;--使用insert添加行insert into emp(ename,job,empno)values('WANGYI','DBA','2000');commit;--忽略列的的列表insert into emp values(3000,'ZHANG','DBA',1000,to_date('1990-07-15','yyyy-mm-dd'),2000,null,10); commit;--为列指定空值insert into emp values(3001,'ZHANG1','DBA',1000,to_date('1990-07-15','yyyy-mm-dd'),null,null,null); rollback;--在列值中使用单引号和双引号单引号里面的双引号表示单引号,例如插入 O’nal insert into emp(ename,empno)values('O''nal',2222);--复制一个表create table emp2 as select*from emp ;truncate table emp2;--从一个表向另外一个表复制行insert into emp2(empno,ename,sal)select empno,ename,sal from emp where empno=7369;rollback;insert into emp2 select*from emp where empno=7369;--使用update修改行update emp set ename='KKKK'where ename='WANGYI';--如果有两个WANG则两个都修改COMMIT;--returning 子句variable sk numberupdate emp set sal=3000where ename='KKKK'returning avg(sal)into: sk;----有问题--使用delete 删除行delete from emp where ename='KKKK';commit;--jdbc_lobselect*from emp;drop table JDBCTEST;SELECT*FROM jdbct1;alter table jdbct1 add(comm number(10));alter table jdbct1 drop(comm);--包:规范+包体--创建包规范create or replace package emp2_package as --指定包的用户可以使用的过程和函数的列表(同时包括变量,类型定义,游标)function func_sum(n number,m number) return number ;end emp2_package;--创建包体create or replace package body emp2_package as --实现声明中的方法 function func_sum(n number, m number) return number assums number;beginsums:=n+m;return sums;end func_sum;end emp2_package;--调用包中的函数和过程select emp2_package.func_sum(1,2) from dual;--获取包中函数和过程的信息select * from user_procedures ;--删除包drop package emp2_package;--触发器--创建触发器(简单的)create or replace trigger trigger_testbefore insert on emp2for each row when (new.sal>10000) --行级触发器begin-- raise_application_error('-20011','工资不能超过1W!');dbms_output.put_line('工资不能超过1W!');end trigger_test;--测试触发器insert into emp2(empno,ename,sal) values (9527,'gggg',11111);--创建触发器create or replace trigger trigger_test3after insert or update of sal on empfor each row when (new.sal>old.sal*0.75)begin--update emp set sal=:old.sal;dbms_output.put_line(:old.sal);end trigger_test3;--创建触发器(insert)create or replace trigger trigger_2before insert or update on empfor each row when (new.sal<100)begininsert into emp(empno,ename,sal) values(1111,'tttttt',:new.sal*10);end;--测试触发器insert into emp(empno,ename,sal) values(2312,'rrrr',1000);update emp set sal=9999 where ename='rrrr';select * from emp;select * from dual;--dual是oracle 中的一张虚表,用于测试函数用--大小写转换select upper('abc') from dual; --转换为大写select upper(DUMMY) from dual;select lower(DUMMY) from dual; --转换为小写select lower(dummy) from dual; --字段不区分大小写select initcap('this is a test') from dual; --单词首字母大写--字符操作select concat('aaa', 'bbb') from dual; --连接两个字符串select 'aaa' || 'bbb' from dual; --也可以用||连接字符串select substr('abcdef', 3) from dual; --拆分字符串。