十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
oracle是块结构语言,oracle程序划分成几个部分,并在每个部分中写入逻辑代码块,每个块由三个子部分组成。
成都网站制作、做网站的关注点不是能为您做些什么网站,而是怎么做网站,有没有做好网站,给成都创新互联一个展示的机会来证明自己,这并不会花费您太多时间,或许会给您带来新的灵感和惊喜。面向用户友好,注重用户体验,一切以用户为中心。
声明部分:此部分是以关键字DECLARE开头。这是一个可选部分,并定义了程序中要使用的所有变量,游标,子程序和其他元素。
可执行命令部分:此部分包含在关键字BEGIN和END之间,这是一个强制性部分。由程序的可执行oracle语句组成。应该有至少一个可执行代码行,可以只是一个NULL命令,表示不执行任何操作。
异常处理部分 :此部分以关键字EXCEPTION开头。这是一个可选部分,包含处理程序中错误的异常。
每个oracle语句以分号(;)结尾。使用BEGIN和END可以将oracle块嵌套在其他oracle块中。以下是Poracle块的基本结构。
Hello World示例:
END;行表示oracle块的结尾。要从oracle命令行运行代码,需要在代码的最后一行之后键入/字符。当上述代码在oracle提示符下执行时,它会产生以下结果:
oracle标识符:oracle标识符是常量,变量,异常,过程,游标和保留字。标识符包括一个字母,可选地后跟多个字母,数字,美元符号,下划线和数字符号,不得超过30个字符。
默认情况下,标识符不区分大小写。例如,可以使用integer或INTEGER来表示一个数值。 不能使用保留关键字作为标识符。
扩展资料
oracle注释程序:注释可以在编写的oracle代码中包含的说明性文字,并帮助其他人阅读源代码。所有编程语言都允许某种形式的注释。
oracle支持单行和多行注释。注释中的所有字符都被oracle编译器忽略。oracle单行注释以分隔符开头 --(双连字符),多行注释由/*和*/括起来。
当上述代码在oracle提示符下执行时,会产生以下结果:
oracle变量的名称由可选的字母,数字,美元($)符号,下划线和数字符号组成,不能超过30个字符。 默认情况下,变量名不区分大小写。不能将保留的oracle关键字用作变量名称。
oracle编程语言允许定义各种类型的变量,如:日期时间数据类型,记录,集合等,我们将在后面的章节中介绍。 在本章中仅学习基本的变量类型。
IN主要用于传入参数,可以是变量,常量,表达式,在子程序内部不能改变其值.
复制代码
代码如下:
DECLARE
n
NUMBER
:=
10;
PROCEDURE
do_something
(
n1
IN
NUMBER)
IS
BEGIN
dbms_output.put_line(n1);
--
prints
10
--n1:=20;
--illegal
assignment.
END;
BEGIN
do_something(n);
do_something(20);
END;
OUT模式用于返回值,必须传入变量调用,变量的初始的值不会传给形式参数,如1所示.
形参的值在子程序返回时(不是在形式参数改变时)才copy给实参,
,如2所示,如果在
返回之前发生异常,实际参数的值不会被改变.
复制代码
代码如下:
DECLARE
n
NUMBER
:=
10;
PROCEDURE
do_something
(
n1
OUT
NUMBER)
IS
BEGIN
dbms_output.put_line('before
assign:
'
||
n1);
--
prints
none
1
n1:=20;
dbms_output.put_line('before
return:
'
||
n);
--
prints
10
2
END;
BEGIN
do_something(n);
dbms_output.put_line('after
return:
'
||
n);
--
prints
20
END;
NOCOPY模式用于限定OUT模式在调用时是不是以传引用的方式进行(它只是一个编译器暗示,不一定总是起作用),默认情况下,OUT模式的参数是以传值的方式进行调用的.
IN主要用于传入参数的,虽然n2
:=
20被调用,但是要到返回的时候才生效.如1所示.
NOCOPY是传引用,会在赋值的时候立即生效
,如2所示,如果在
返回之前发生异常,实际参数的值也会被改变.
由于OUT参数在
子程序返回的时候会将值copy到实际参数,所以调用完后n的值为20,如3所示.
复制代码
代码如下:
DECLARE
n
NUMBER
:=
10;
PROCEDURE
do_something
(
n1
IN
NUMBER,
n2
IN
OUT
NUMBER,
n3
IN
OUT
NOCOPY
NUMBER)
IS
BEGIN
n2
:=
20;
dbms_output.put_line(n1);
--
prints
101
n3
:=
30;
dbms_output.put_line(n1);
--
prints
30
2
END;
BEGIN
do_something(n,
n,
n);
dbms_output.put_line(n);
--
prints
20
3
END;
存储过程
在Oracle中,可以在数据库中定义子程序,这种程序块称为存储过程(Procedure)。它存放在数据字典中,可以在不同用户和应用程序之间共享,可实现程序的优化和重用。使用存储过程的优点是:
(1) 过程在服务器端运行,执行速度快;
(2) 过程执行一次后代码就驻留在高速缓冲存储器中,在以后的操作中,只需从高速缓冲存储器中调用已编译代码执行即可,可以提高系统性能。
(3) 确保数据库的安全。可以不授权用户直接访问应用程序中的一些表,而是授权用户执行访问这些表的过程。非表的授权用户除非通过过程,否则就不能访问这些表。
(4) 自动完成需要预先执行的任务。过程可以在系统启动时自动执行,而不必在系统启动后再进行手工操作,可以自动完成一些需要预先执行的任务。
oracle存储过程中,begin和end中存放的存储过程的主体。
Oracle存储过程基本语法 存储过程:
CREATE OR REPLACE PROCEDURE 存储过程名
IS
BEGIN
NULL;
END;
行1:
CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;
行2:
IS关键词表明后面将跟随一个PL/SQL体。
行3:
BEGIN关键词表明PL/SQL体的开始。
行4:
NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句;
行5:
END关键词表明PL/SQL体的结束
SELECT B.DEPTNO,COUNT(B.ENAME) FROM EMP B,(Select DEPTNO,AVG(SAL) SAL_A FROM EMP GROUP BY DEPTNO) A WHERE B.SAL A.SAL_A AND A.DEPTNO = B.DEPTNO
试一下,看看是否好用。