包是SQL过程,函数,变量,语句等,它们被分组为一个单元。许多不同的应用程序可以共享程序包的内容,因为它存储在数据库中。
以下是Oracle中软件包的各个部分-
软件包规范包含有关存储在其中的所有过程,函数,变量,常量等的信息。它具有所有组件的声明,但没有代码。
规范中的所有对象都称为公共对象。如果有任何对象在规范中不可用,但在主体中编码,则称为私有对象。
软件包规格的语法是-
CREATE [OR REPLACE] PACKAGE name_of_package IS | AS [declaration_of_variable ...] [declaration_of_constant ...] [declaration_of_exception ...] [cursor_specification ...] [PROCEDURE [Schema..] name_of_procedure [ (parameter {IN,OUT,IN OUT} datatype [,parameter]) ] ] [FUNCTION [Schema..] name_of_function [ (parameter {IN,OUT,IN OUT} datatype [,parameter]) ] RETURN return_datatype ] END [name_of_package];
程序包主体包含程序包规范中声明的所有公共对象以及私有对象的代码。
可以使用CREATE PACKAGE BODY STATEMENT创建包主体。
包主体的语法是-
CREATE [OR REPLACE] PACKAGE BODY name_of_package IS | AS [declaration_of_private_variable ...] [declaration_of_private_constant ...] BEGIN [initialization_statement] [PROCEDURE [Schema..] name_of_procedure [ (parameter [,parameter]) ] IS | AS declaration_of_variables; declaration_of_constants; BEGIN statement(s); EXCEPTION WHEN ... END ] [FUNCTION [Schema..] name_of_function [ (parameter [,parameter]) ] RETURN return_datatype IS | AS declaration_of_variables; declaration_of_constants; BEGIN statement(s); EXCEPTION WHEN ... END ] [EXCEPTION WHEN built-in_exception_name1 THEN User defined statement (action) will be taken; ] END;
让我们首先创建一个名为STUDENTS的表-
CREATE TABLE STUDENTS( ID INT NOT NULL, NAME VARCHAR (25) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (30), FEES DECIMAL (18, 2), PRIMARY KEY (ID) ); Table Created
我们现在将插入值-
INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (1, Tom, 22,'Ohio', 17000 ); INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (2, Jack, 20, 'Washington', 25000 ); INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (3, Amy, 25, 'Boston', 30000 ); INSERT INTO STUDENTS(ID,NAME,AGE,ADDRESS,FEES) VALUES (4, Anne, 18, 'Texas', 27000 );
现在让我们将上述值分配给PL / SQL变量:
DECLARE s_id students.id%type := 2; s_name students.name%type; s_addr students.address%type; s_fees students.fees%type; BEGIN SELECT name, fees INTO s_name, s_fees FROM students WHERE id = s_id; dbms_output.put_line (‘Student ' ||s_name || ' from ' || s_addr || ' pays ' || s_fees); END; /
现在的输出将是:
Student Jack from Washington pays 25000 PL/SQL procedure completed successfully
现在让我们创建一个包:
CREATE OR REPLACE PACKAGE BODY stu_fees AS PROCEDURE find_fees(s_id students.id%TYPE) IS s_fees students.fees%TYPE; BEGIN SELECT fees INTO s_fees FROM students WHERE id = s_id; dbms_output.put_line('Fees = '|| s_fees); END find_sal; END stu_fees;
执行上述代码后,将显示以下结果:
Package body created.
以下是程序包的用途:
包对象可以由所有正在运行的子程序共享。它们将保留整个会话,并允许访问数据而无需将数据存储在数据库中。
软件包是模块化的主要示例。它们将所有类型的对象(如过程,函数,变量,语句)存储到一个整齐的包中。这使信息易于理解和易于阅读。
软件包分为软件包规格和定义。这意味着包的类型声明可以随意进行,并且可以在需要时在定义中编写代码。
子程序第一次需要该程序包时,它将完全加载到内存中。对于下一次,该软件包已经可用于其他子程序。
包规范中提供了对象声明的详细信息,而包定义中隐藏了实现细节,这使包更易于处理和使用。
本文向大家介绍软件的概念?相关面试题,主要包含被问及软件的概念?时的应答技巧和注意事项,需要的朋友参考一下 软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档的完整集合。
本文向大家介绍软件测试的概念?相关面试题,主要包含被问及软件测试的概念?时的应答技巧和注意事项,需要的朋友参考一下 使用人工或自动手段来运行或测试某个系统的过程, 其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别
Tazpkg - 软件包管理器 Slitaz提供一个小型软件包管理器,它能轻易在系统里安装许多软件。Tazpkg是一个由SHell脚本写的轻量级的软件包管理器,能安 装.tazpkg文件。它能在Busybox、ash shell和bash中正常运行。Tazpkg可以让你列出软件包列表、安装软件包、删除软件包、下载软件包、解压软件包、打包软件包、查找软件包或者取 得有关可用软件包或所有已安装软件包的
问题内容: 我知道如何使用Anaconda安装软件包,以及如何安装PyPi上的软件包,如手册中所述。 但是,如何才能将软件包/文件夹永久包含在Anaconda环境中,以便可以导入当前正在使用的代码,并且在重新启动后仍然可用? 我当前的方法是使用: 这不是很方便。 有什么提示吗? 提前致谢! 问题答案: 我在Anaconda论坛中找到了两个问题的答案: 1.)将模块放入站点包中,即始终位于的目录中。
问题内容: 我正在使用Eclipse,并且有一段时间没有使用Java了。但是,我可以在命令行上编译我的代码,并生成必要的文件。在Eclipse中,它抱怨。这是什么意思,我该如何解决? 样例代码: 我的项目的名称是。 问题答案: Eclipse希望声明的包与目录层次结构匹配-因此,它希望Java文件位于源根目录下的“ Devices”目录中。目前,该文件似乎直接位于您的源根目录中。因此,创建适当的目
主要内容:Linux源码包,Linux二进制包,源码包 VS RPM二进制包,如何选择Linux下的软件包众多,且几乎都是经 GPL 授权、免费开源(无偿公开源代码)的。这意味着如果你具备修改软件源代码的能力,只要你愿意,可以随意修改。 GPL,全称 General Public License,中文名称“通用性公开许可证”,简单理解 GPL 就是一个保护软件自由的一个协议,经 GPL 协议授权的软件必须开源,请猛击《开源协议》了解更多信息。 Linux下的软件包可细分为两种,分别