创建和管理独立子程序
可以创建和管理独立的 PL/SQL 子程序。
注:要执行本文档中的教程,必须以 SQL Developer 用户 HR 的身份连接到 Oracle Database。
关于子程序结构
子程序遵从 PL/SQL 块结构;也就是说,它具有下列部分:
-
声明部分(可选)
声明部分包括类型、常量、变量、异常错误、声明的游标和嵌套子程序的声明。这些项是子程序的本地项,当子程序执行完毕时,它们将不复存在。
-
可执行部分(必需)
可执行部分包括赋值语句、控制执行语句以及数据操纵语句。
-
异常错误处理部分(可选)
异常错误处理部分包含用于处理异常错误(运行时错误)的代码。
注释可以出现在 PL/SQL 代码中的任何位置。PL/SQL 编译器将会忽略它们。在程序中添加注释可提高程序的可读性,并可帮助理解。单行注释以双连字符 (--) 开头,并扩展到行末。多行注释以斜杠和星号 (/*) 开头,并以星号和斜杠 (*/) 结束。
过程的结构如下:
PROCEDURE name [ ( parameter_list ) ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
statement; [ statement; ]...
[ EXCEPTION -- executable part ends, exception-handling part begins]
exception_handler; [ exception_handler; ]... ]
END; /* exception-handling part ends if it exists;
otherwise, executable part ends */
函数的结构类似于过程的结构,只是函数包含一个 RETURN 子句,并至少包括一个 RETURN 语句(此外还有一些可选的子语句,本文档不再述):
FUNCTION name [ ( parameter_list ) ] RETURN data_type [ clauses ]
{ IS | AS }
[ declarative_part ]
BEGIN -- executable part begins
-- at least one statement must be a RETURN statement
statement; [ statement; ]...
[ EXCEPTION -- executable part ends, exception-handling part begins]
exception_handler; [ exception_handler; ]... ]
END; /* exception-handling part ends if it exists;
otherwise, executable part ends */
以 PROCEDURE 或 FUNCTION 开头并且在 IS 或 AS 之前结束的代码是子程序签名。声明性、可执行性和异常错误处理部分组成了子程序主体。exception-handler 的语法位于“关于异常错误和异常错误处理程序”中。
另请参见: Oracle Database PL/SQL Language Reference(了解有关子程序部件的详细信息)
教程:创建独立过程
本教程介绍如何使用“创建过程”工具创建一个名为 ADD_EVALUATION 的独立保存过程,该存储过程将在 EVALUATIONS 表中添加一行。
EVALUATIONS 表是在 Example 4-1 中创建的。
要创建独立保存过程,请使用 SQL Developer 工具“创建过程”或 DDL 语句 CREATE PROCEDURE。
使用“Create Procedure(创建过程)”工具创建独立过程的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型列表中,右键单击过程。
-
在选项列表中,单击新建过程。
此时将打开“Create Procedure(创建过程)”窗口。
-
对于“方案”,请接受默认值 HR。
-
对于“名称”,请将 PROCEDURE1 更改为
ADD_EVALUATION。 -
单击添加参数图标。
在列标题下将出现一行。其字段具有以下默认值:名称、PARAM1、模式、IN、无副本、取消选择;数据类型、VARCHAR2;默认值为空。
-
对于“名称”,请将 PARAM1 更改为
EVALUATION_ID。 -
对于“模式”,请接受默认值 IN。
-
对于“数据类型”,从菜单中选择 NUMBER 。
-
保留“默认值”为空。
-
通过重复步骤 6 至 10 以添加第二个参数,将其“名称”设为
EMPLOYEE_ID,并“数据类型”设为 NUMBER。 -
重复步骤 6 至 10 以添加第三个参数,并将其“名称”设为
EVALUATION_DATE,并将“数据类型”设为 DATE。 -
通过重复步骤 6 至 10 以添加第六个参数,将其“名称”设为
DEPARTMENT_ID,并将数据类型设为 NUMBER。 -
重复步骤 6 至 10 以添加第 7 个参数,将其“名称”设为
TOTAL_SCORE,并将数据类型设为 NUMBER。 -
单击确定。
CREATE OR REPLACE PROCEDURE ADD_EVALUATION ( EVALUATION_ID IN NUMBER , EMPLOYEE_ID IN NUMBER , EVALUATION_DATE IN DATE , JOB_ID IN VARCHAR2 , MANAGER_ID IN NUMBER , DEPARTMENT_ID IN NUMBER , TOTAL_SCORE IN NUMBER ) AS BEGIN NULL; END ADD_EVALUATION;ADD_EVALUATION 窗格的标题为斜体,这表示该过程尚未保存在数据库中。
由于该过程的执行部分仅包含 NULL 语句,因此该过程不执行任何操作。
-
将 NULL 语句替换为以下语句:
INSERT INTO EVALUATIONS ( evaluation_id, employee_id, evaluation_date, job_id, manager_id, department_id, total_score ) VALUES ( ADD_EVALUATION.evaluation_id, ADD_EVALUATION.employee_id, ADD_EVALUATION.evaluation_date, ADD_EVALUATION.job_id, ADD_EVALUATION.manager_id, ADD_EVALUATION.department_id, ADD_EVALUATION.total_score );(使用过程名来限定参数名可确保参数名不会与具有相同名称的列名产生混淆。)
-
从“文件”菜单,选择保存。
Oracle 数据库将会编译并保存此过程。此时“ADD_EVALUATION”窗格的标题字体将不再是斜体。“消息 - 日志”窗格包含消息 Compiled。
另请参见:
-
Oracle SQL Developer User’s Guide(关于使用 SQL Developer 创建独立过程的另一个示例)
-
“关于数据定义语言 (DDL) 语句”,了解适用于 CREATE PROCEDURE 语句的一般信息
-
Oracle Database PL/SQL Language Reference(了解有关 CREATE PROCEDURE 语句的信息)
教程:创建独立函数
本教程介绍如何使用“创建函数”工具创建一个名为 CALCULATE_SCORE 的独立函数,该函数具有三个参数并返回一个 NUMBER 类型的值。
要创建独立函数,请使用 SQL Developer 工具“CREATE FUNCTION(创建函数)”或 DDL 语句 CREATE FUNCTION。
使用“Create Function(创建函数)”工具创建独立函数的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,右键单击函数。
-
在选项列表中,单击新建函数。
此时将打开“创建函数”窗口。
-
对于“方案”,请接受默认值 HR。
-
对于“名称”,请将 FUNCTION1 更改为
CALCULATE_SCORE。 -
对于退货类型,请从菜单中选择 NUMBER 。
-
单击添加参数图标。
在列标题下将出现一行。其字段具有以下默认值:名称、PARAM1、模式、IN、无副本、取消选择;数据类型、VARCHAR2;默认值为空。
-
对于“名称”,请将 PARAM1 更改为
cat。 -
对于“模式”,请接受默认值 IN。
-
对于“Data Type(数据类型)”,接受默认值 VARCHAR2。
-
保留“默认值”为空。
-
单击确定。
此时将打开 CALCULATE_SCORE 窗格,并显示创建该函数的 CREATE FUNCTION 语句:
CREATE OR REPLACE FUNCTION CALCULATE_SCORE ( CAT IN VARCHAR2 , SCORE IN NUMBER , WEIGHT IN NUMBER ) RETURN NUMBER AS BEGIN RETURN NULL; END CALCULATE_SCORE;CALCULATE_SCORE 窗格的标题为斜体,这表示该函数尚未保存在数据库中。
由于在该函数的执行部分中唯一的语句是 RETURN NULL 语句,因此该函数不执行任何操作。
-
将 NULL 替换为
score * weight。 -
从“文件”菜单,选择保存。
Oracle 数据库将会编译并保存此函数。此时 CALCULATE_SCORE 窗格的标题字体将不再是斜体。“消息 - 日志”窗格包含消息
Compiled。
另请参见:
-
关于数据定义语言 (Data Definition Language,DDL) 语句(适用于 CREATE FUNCTION 语句的一般信息)
-
Oracle Database PL/SQL Language Reference(了解有关 CREATE FUNCTION 语句的信息)
更改独立子程序
要更改独立子程序,请使用 SQL Developer 工具“Edit(编辑)”或 DDL 语句 ALTER PROCEDURE 或 ALTER FUNCTION。
使用“编辑”工具更改独立子程序的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开 Functions(函数)或 Procedures(过程)。
即会出现函数或过程列表。
-
单击要更改的函数或过程。
在“连接”框架右侧将会出现框架。其顶级选项卡中具有要更改的子程序的名称。“Code(代码)”窗格显示用于创建子程序的代码。
“代码”窗格处于写入模式。(单击铅笔图标可将模式从写入模式切换为只读模式,或相反。)
-
在“Code(代码)”窗格中,更改代码。
该窗格的标题字体将更改为斜体,这表示尚未将更改保存在数据库中。
-
从“文件”菜单,选择保存。
Oracle 数据库将会编译并保存子程序。此时该窗格的标题字体将不再是斜体。“消息 - 日志”窗格包含消息
Compiled。
另请参见:
-
“关于数据定义语言 (Data Definition Language,DDL) 语句”,了解适用于 ALTER PROCEDURE 和 ALTER FUNCTION 语句的一般信息
-
Oracle Database PL/SQL Language Reference(了解有关 ALTER PROCEDURE 语句的信息)
-
Oracle Database PL/SQL Language Reference(了解有关 ALTER FUNCTION 语句的信息)
教程:测试独立函数
本教程介绍如何使用 SQL Developer 工具“Run(运行)”测试独立函数 CALCULATE_SCORE。
使用“运行”工具测试 CALCULATE_SCORE 函数的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开 Functions(函数)。
-
在函数列表中,右键单击 CALCULATE_SCORE 。
-
在选项列表中,单击运行。
即会打开“运行 PL/SQL”窗口。其“PL/SQL 块”框架中包含以下代码:
v_Return := CALCULATE_SCORE ( CAT => CAT, SCORE => SCORE, WEIGHT => WEIGHT ); -
将 SCORE 和 WEIGHT 的值分别更改为
8和0.2:v_Return := CALCULATE_SCORE ( CAT => CAT, SCORE => 8, WEIGHT => 0.2 ); -
单击确定。
在“代码”窗格下,将打开“运行”窗口,显示以下结果:
Connecting to the database hr_conn. Process exited. Disconnecting from the database hr_conn.选项卡 "Running" 的右侧是选项卡 "Output Variables"。
-
单击选项卡 Output Variables(输出变量)。
此时将显示两个帧,分别包含值 <Return Value> 和 1.6 的“Variable”和“Value”。
另请参见: Oracle SQL Developer User’s Guide,了解有关使用 SQL Developer 运行和调试过程和函数的信息
删除独立子程序
要删除独立子程序,请使用 SQL Developer Connections 框架和删除工具,或使用 DDL 语句 DROP PROCEDURE 或 DROP FUNCTION。
注意:请勿删除过程 ADD_EVALUATION 或函数 CALCULATE_SCORE —以后教程需要这些过程。如果您要练习删除子程序,请创建一些简单的子程序,然后删除它们。
使用“删除”工具删除独立子程序的步骤:
-
在 "Connections"(连接)框架中,展开 hr_conn 。
-
在方案对象类型的列表中,展开 Functions(函数)或 Procedures(过程)。
-
在函数或过程列表中,右键单击要删除的函数或过程的名称。
-
在选项列表中,单击删除。
-
在 "Drop" 窗口中,单击 Apply 。
-
在“确认”窗口中,单击确定。
另请参见:
-
关于数据定义语言 (Data Definition Language,DDL) 语句”,了解适用于 DROP PROCEDURE 和 DROP FUNCTION 语句的一般信息
-
Oracle Database SQL Language Reference(了解有关 DROP PROCEDURE 语句的信息)
-
Oracle Database SQL Language Reference(了解有关 DROP FUNCTION 语句的信息)