永发信息网

如何在package中添加或修改function或存储过程

答案:2  悬赏:50  手机版
解决时间 2021-02-06 14:47
如何在package中添加或修改function或存储过程
最佳答案
一、过程
PL/SQL过程是一个编译到oracle数据库模式的单机程序。过程可以接受参数。当编译一个过程时,CREATE PROCEDURE语句的过程标识符成为数

据字典中的对象名。
CREATE OR REPLACe PPROCEDURE procedure_name (optional parameters) IS | AS
declarative part
BEGIN
program body
EXCEPTION
exception handler
END procedure_name;

Declarative Part 是声明变量的地方,比如:
local_counter NUMBER := 0;
也可以声明复合类型结构,如records和tables
也可以声明异常,但必须在Exception部门进行处理。
Subprogram Body 包含使用PL/SQL控制结构的逻辑算法实现。PL/SQL控制结构支持loops、if-then-else、case、和声明块结构。
Exception handler 可选,类似于其他语言的try-catch模型,你可以对特定错误类型或一般异常编写处理器.

应当以动词来命名一个过程。过程常常执行一些操作如更新数据库、写数据到一个文件或者发送一条消息。
一个过程不必要有参数,如果没有参数创建过程是不需要括号。当调用一个过程时(过程没有参数)括号是可选的。
例如:
CREATE OR REPLACE PROCEDURE insert_temp IS
BEGIN
INSERT INTO TEMP (n) VALUES (0);
END insert_temp:

sqlplus调用过程:
SQL>execute insert_temp;
SQL>execute insert_temp();
都是正确的。

IS 或 AS关键字是一样的,都可以用。
PROCEDURE insert_temp IS | AS

END关键字后加过程名也是可选的,但建议加过程名。一个过程可能跨越几屏的长度,当滚屏时,有助于看到END子句知道没有跳到下一个包过

程中。

完整的过程结构如下:
CREATE OR REPLACE PROCEDURE print_temp
IS
v_average NUMBER;
v_sum NUMBER;
BEGIN
SELECT AVG(n), SUM(n) INTO v_average, v_sum
FROM TEMP;

dbms_output.put_line('Average:'||v_average);
dbms_output.put_line('Sum:'||v_sum);
END print_temp;

二、函数
函数提供了获取对象状态和情形信息的手段,函数有返回值。
CREATE OR REPLACe FUNCTION student_status(optional parameters)
RETURN VARCHAR2 IS
declarative part
BEGIN
program body
RETURN expression;
EXCEPTION
exception handler code
that should include a RETURN
END student_student_status;

参数是可选的,但RETURN语句是必须的。FUNCTION必须有一个return 语句。
下面的例子是返回一个DATE类型的函数:
CREATE OR REPLACE FUNCTION tomorrow RETURN DATE
IS
next_day DATE;
BEGIN
next_day := SYSDATE + 1;
RETURN next_day;
END tomorrow;

函数中的return语句可以是一个表达式,上面函数可以直接返回一个表达式而不用本地变量:
FUNCTION tomorrow RETURN DATE IS
BEGIN
RETURN SYSDATE + 1;
END tomorrow;
函数于过程结果相似,只是函数返回值,而过程不返回值

三、包说明
1、语法和风格
包说明基本语法:
CREATE PACKAGE package_name IS
Type definitions for records, index-by tables,
varrays, nested tables
Constants
Exceptions
Global variable declarations
PROCEDURE procedure_name_1 (parameters & types);
PROCEDURE procedure_name_2 (parameter & types);
FUNCTION function_name_1 (parameters & types) RETURN type;
END package_name;

包说明中过程和函数没有顺序限制。
包主体将包含包说明中每一个子程序的PL/SQL代码。包说明中的每一个子程序包体中必须有相应的子程序体。
在包说明中的数据对象声明是全局的。因此,仅声明需要全局定义的对象。
在包体内的过程语句,包括子程序名、参数名、参数模式、参数类型,必须匹配包说明中的过程语句。同样,函数也是一样。
包主体模板如下:
CREATE PACKAGE BODY package_name IS
PROCEDURE procedure_name_1 (parameters & types)
IS
local variables
BEGIN
body of code
END procedure_name_1;
PROCEDURE procedure_name_2 (parameter & types)
IS
local variables
BEGIN
body_of_code
END procedure_name_2;
FUNCTION function_name_1 (parameters & types) RETURN type
IS
local variables
BEGIN
body of code
RETURN statement;
END function_name_1;
END package_name;

2、示例:

CREATE OR REPLACE PACKAGE students_pkg IS
PROCEDURE add_student
(v_student_name IN students.student_name%TYPE,
v_college_major IN students.college_major%TYPE,
v_status IN students.status%TYPE,
v_state IN students.state%TYPE DEFAULT NULL,
v_license_no IN students.license_no%TYPE DEFAULT NULL);

FUNCTION NO_OF_STUDENTS
(v_major IN major_lookup.major_desc%TYPE DEFAULT NULL,
v_status IN students.status%TYPE DEFAULT NULL)
RETURN NUMBER;
END students_pkg;

四、包主体
下面是上例的包主体实现:
CREATE OR REPLACE PACKAGE BODY students_pkg IS
PROCEDURE add_student
(v_student_name IN students.student_name%TYPE,
v_college_major IN students.college_major%TYPE,
v_status IN students.status%TYPE,
v_state IN students.state%TYPE DEFAULT NULL,
v_license_no IN students.license_no%TYPE DEFAULT NULL)
IS
BEGIN
INSERT INTO students VALUES
('A'||students_pk_seq.NEXTVAL,
v_student_name,
v_college_major,
v_status,
v_state,
v_license_no);
END add_student;

FUNCTION NO_OF_STUDENTS
(v_major IN major_lookup.major_desc%TYPE DEFAULT NULL,
v_status IN students.status%TYPE DEFAULT NULL)
RETURN NUMBER
IS
ccount INTEGER;
BEGIN
SELECT COUNT (*) INTO ccount
FROM students, major_lookup
WHERe students.college_major = major_lookup.major
AND major_lookup.major_desc =
nvl(v_major,major_lookup.major_desc)
AND students.status = nvl(v_status,students.status);
RETURN ccount;
END NO_OF_STUDENTS;
END students_pkg;

开发包主体可能需要其他本地过程和函数,这些是隐藏的,叫私有(过程或函数)。
常常情况下要把一个单独的过程放入一个新包或一个已存在包里面。
PACKAGE temp_operations IS
PROCEDURE insert_temp;
END temp_operations;

PACKAGE BODY temp_operations IS
PROCEDURE insert_temp IS
BEGIN
INSERT INTO temp (n) VALUES (0);
END insert_temp;
END temp_operations;

使用下面方式调用:
temp_operations.insert_temp;
temp_operations.insert_temp();
全部回答
package.json 同样,首先看 package.json 因为他涉及到你的发布和各种配置。跟npm的很像,但是有自己的东东 main : 这个是你执行命令后进入的主文件,也就是入口文件,默认是寻找index的,同时atom支持 coffee 和 js styles :一个字符串数组声明来让atom加载样式文件顺序,如果没有,就顺序的读取styles文件夹里面的文件。 keymaps : 一个字符串数组声明package需要加载的key map文件顺序,如果没有,按顺序读取keymaps文件夹的文件。 activationcommands :一个对象来声明触发你的package的行为,key是css选择器形式,value是一个字符串数组声明命令。知道规定的css 选择器中一个触发了,才会载入你的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
罗定素龙供电所(罗定供电局素龙营业厅)地址在
人川大药房富河国际小区门店我想知道这个在什
扣得钱分摊到每个人身上,业绩越少摊的越多,
收集个性签名 含搞笑 忧伤 附有人生哲理的签
我发现石字旁的字大都与什么有关
加州阳光怎么去啊,有知道地址的么
笔记本电脑开不开机,显示器亮,但是开不开,
罗定太平供电所(罗定供电局太平营业厅)地址在
我要到外地打工,孩子上学的问题,能解决吗
罗定围底供电所(罗定供电局围底营业厅)地址有
天丽不锈钢在哪里啊,我有事要去这个地方
error report
罗定榃滨供电所(罗定供电局榃滨营业厅)地址在
打开话匣子
土味饭店我想知道这个在什么地方
推荐资讯
中国式关系马伊琍吃煎饼第几集
在兴业银行申请信用卡。验证码没有了。影响面
我理发或者照相一紧张头就控制不住的发抖,是
处女座的女生和水瓶座的男生相配吗?
新东方怎么样啊?新东方助教都是干嘛的 啊?
已知函数fx=X^2 2x m 有一个根大于2一个根小
在事故中失去了双脚,是lost his feet During
总经理侵犯商业秘密总经理助理不知情协助工作
即发润发家园停车场(出入口)地址在什么地方,
做空人民币是什么意思
中短发怎么盘好看图解
带黄字的成语形容美女
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?