当前位置:首页 » 编程软件 » oracle编译包

oracle编译包

发布时间: 2022-12-07 17:30:40

A. oracle如何批量编译包体

sql">alterpackageusername.xxxxcompilebody;

语法如上

B. ORACLE 中无法编译包,查过没有锁,是什么原因

报什么错误呢? 一般出现无法编译的情况 都是有过程或者包在在正被执行而被加锁,另外其他过程或者包当中如果包含了其他的包或者过程的话,也会是锁定状态无法编译。

C. Oracle PL/SQL中编译失败的包怎么删除

只需要drop package package_name;就行了,如果你建包的语句写的是
create or replace开头的话,就不用先删除了,改好重新跑一遍就行。

D. oracle 中的包是什么

在一个大型项目中,有很多模块,每个模块都可能有很多的过程和函数,这些过程和函数默认就是放在一起,不方便查询和维护,甚至会发生误删除的事件。

所以通过使用包,就可以分类管理过程和函数。

使用包还有一个好处,就是可以在包中定义自定义类型,从而在过程和函数可以直接用于定义变量。

包的概念与java程序中包的概念是非常类似的,java程序中包也是为了分类管理不同的类,关键字都是package。
(1)包的意义

PL/SQL为了满足程序模块化的需要,除了块(block)和子程序结构外,还引入了包的构造。

包是一种数据库对象,将逻辑上相关的PL/SQL类型、对象和子程序组合成一个更大的单位。包有两个部分:包说明(specification)和包体(body)。说明部分是为应用程序的接口,它申明类型、常量、例外、游标和可用的子程序。体定义游标和子程序,实现说明。应用程序仅对包说明中的申明是可见的和可存取。如果ORACLE具有Procere选件,包可以编译、存贮在ORACLE数据库中,其内容可为许多应用共享。当用户第一次调用一包装的子程序时,整个包装入到内存,所以在以后对包中子程序调用时,不再需要I/O操作,故包可提高效率和改进性能。

PL/SQL的包具有信息隐蔽性(information hiding),仅在算法和数据结构设计有关层可见。在前面讲到的过程中,可将过程说明和过程体组成一个程序单位。也可将过程说明与它的过程体分开,在这种情况下,将过程放置在一个包中,可隐蔽实现的细节。也可在包中定义过程,而该过程在包说明中没有定义过程说明,这样定义的过程仅在包内使用。

(2)包的定义

包的定义形式如下:

包说明:

PACKAGE 包名 IS

--变量说明;

--游标说明;

--例外说明;

--记录说明;

--Plsql表说明;

--过程说明;

--函数说明;

END[包名];

包体:

PACKAGE BODY 包名 IS

--变量名说明;

--游标说明;

--游标申明;

--例外说明;

--记录说明;

--plsql说明;

--过程体;

--函数体;

BEGIN

--语句序列

END[包名];

其中,包名为命名包的标识符。

包不能嵌入在PL/SQL块或子程序中,然而使用支持PL/SQL的任何工具可定义包。要使包为全体使用,必须用CREATE命令建立,存贮在一个ORACLE数据库中。可在SQL*PLUS、SQL*DBA或从ORACLE预编译宿主程序中利用CREATE PACKAGE和CREATE PACKAGE BODY 语句建立。

例 2.52: 建立包:

.包说明建立

CREATE PACKAGE emp_actions AS

TYPE EMPRECTYP IS RECORD(emp_id INTEGER,salary REAL);

CURSOR desc_salary(emp_id NUMBER)RETURN EMPRECTYP;

PROCEDURE hire_employee

(ename CHAR,

job CHAR,

sal NUMBER,

mgr NUMBER,

comm NUMBER,

deptno NUMBER;

PROCEDURE fire_employee(emp_id NUMBER);

END emp_actions;

(A):其中语句TYPE EMPRECTYP IS RECORD(emp_id. INTEGER,Salary REAL)是指用户定义EMPRECTYP为RECORD(记录)类型对象。用户定义记录

的一般格式是:

TYPY 类型名 IS RECORD

(字段名1{字段类型|变量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],

字段名2{字段类型|变量名%TYPE|表名.列名%TYPE|表名%ROWTYPE}[NOT NULL],...);其中:类型名为类型说明符,可在记录说明中使用。字段

类型为PL/SQL允许的任何数据类型,包括RECORD类型和TABLE(表)类型。可用%TYPE或%ROWTYPE属性指定一字段的数据类型。

利用%TYPE属性可提供变量,常量或数据库列的数据类型。例如变量my_dname是同SCOTT的DEPT表的DNAME列类型相同,则可如下定义:

my_dname SCOTT.dept.danme%TYPE ,%ROWTYPE属性提供一记录类型,它表示一表(或视图)中的一行。记录可存贮由表所选择的一整行或者由

一游标所获取的一整行。例如:

DECLARE

emp_rec emp% ROWTYPE;

CURSOR C1 IS SELECT deptno,dname,loc FROM dept;

dept_rec C1%ROWTYPE;

其中 emp_rec记录可存贮从表EMP中选择的行,dept_rec记录可存贮由C1游标所获取的行。这样定义的记录中的字段与行中列有相同的名和相同数据类型。记录中的字段可以下列形式引用:

记录名.字段名

emp_rec.ename:=’JOHNSON’;

E. oracle后台表查看包是否编译通过

我在Oracle中安装了一些软件包,我想看看它们是否是本地编译的。有没有办法在数据字典中检查它

F. 求看看这个ORACLE包体编译的时候提示必须声明标识符emp,我该怎么声明它呀

emp表是oracle安装包里的example,它属于scott,确认一下这个表是否存在:
select owner,object_type from dba_objects where object_name='EMP';
如果这个表存在,出现这个错误,有以下几个原因:
1.这个包的所有者没有对emp表的select权限
2.虽然有权限,但在引用它的时候必需明确这个表的schema,也就是上面那个查询的owner,你应该用scott.emp

G. oracle 包太大编译时间长怎么办

一般情况下不会出现一个包编译时间很长的情况,出现何种情况一般是你的数据库慢,可能是服务器慢,也可能是网络慢,也可能是客户端慢。
先看看数据库现在在忙什么?如果现在数据库真的很忙,或者数据库出现要夯住的状态,其他的操作也慢,那么就要考虑数据库的瓶颈了,这个分析起来就麻烦了。
如果仅仅编译这个慢,其他的不那么慢,那么可能是你的机器的问题,换一台试试,有时可能你的这个用户操作过多,或者过长时间不操作,导致进程假死,这个也是有可能发生的。另外看看,是不是有人也在操作这个包,如果是的话,那么编译确实很慢。
如果是网络慢,或者服务器慢,那么就几乎真的没办法了,数据库工程师如果对系统较熟悉的可以找找看问题,不过真的没啥可以改的。
如果就是因为服务器不行,包太大,那么就分包,把一个包变成两个,标_1和_2,或者_A,_B呗。

H. oracle创建包编译报错

先要创建package description 才能创建package body

SQL> create or replace package my_package is
2 procere my_procere(name varchar2,num number);
3 function my_function(name varchar2) return number;
4 end;
6 /

Package created.

SQL> show error
No errors.

I. ORACLE 过程编译错误,高手来解答!

凭感觉,你的语法没错。今天连不起公司服务器。周一连上给你试试,等着。。

我们创建的时候,用的是create or replace package。我将你包的内容改变了(因为我没有创建你的那个数据表emp),运行成功了的。内容如下:

create or replace package xxemp_pkg is

procere update_sal(name varchar2,newsal number);

function annual_income(name varchar2) return number;

end;
/
create or replace package body xxemp_pkg is
procere update_sal(name varchar2,newsal number)
is
begin
/*update emp set sal=newsal
where lower(ename)=lower(name);*/null;
end;
function annual_income(name varchar2) return number
is
annual_salary number(7,2);
begin
/*select sal*12+nvl(comm,0) into annual_salary
from emp where lower(ename)=lower(name);*/null;
return annual_salary;
end;
end;
/
你再到你的系统试一试。

J. oracle 编译包的时候,一直提示正在编译

编译的存储过程的时候,程序死住,等待一会出现ora-04021错误解决办法:

1.可能被锁住

查看v$lockedselect b.sid,b.serial#,b.machine,b.terminal,b.program,b.process,b.status from v$lock a , v$session b

where a.SID = b.SID

得到死锁session的SID,SERIAL#参看这个是否为你自己用户下的,然后kill掉session

2.可能被挂起

查看v$session_waitselect b.serial#,a.* from v$session_wait a,v$session
bwhere a.sid = b.sid得到等待的session的sid和serial#3.查看dba_ddl_locksselect
session_id sid, owner, name, type,

mode_held held, mode_requested request

from dba_ddl_locks
where name = '&your_package_name'

热点内容
pythonforinkeys 发布:2024-05-19 01:55:44 浏览:792
电脑如何局域网共享文件夹 发布:2024-05-19 01:25:01 浏览:68
手机存储越大性能越好吗 发布:2024-05-19 01:14:28 浏览:176
我的世界hyp服务器怎么玩 发布:2024-05-19 00:51:25 浏览:801
手机如何解压百度云文件 发布:2024-05-19 00:32:24 浏览:905
centos使用python 发布:2024-05-18 23:39:48 浏览:869
幻影天龙脚本 发布:2024-05-18 23:38:17 浏览:714
编程的py 发布:2024-05-18 23:36:22 浏览:76
安卓系统怎么改序列号 发布:2024-05-18 23:28:16 浏览:785
c语言中实数 发布:2024-05-18 23:21:03 浏览:897