當前位置:首頁 » 編程軟體 » 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'

熱點內容
不屬於編譯程序組成的部分是什麼 發布:2024-05-05 19:05:34 瀏覽:613
壓縮麵食 發布:2024-05-05 18:55:45 瀏覽:804
linux的gz解壓命令 發布:2024-05-05 18:24:13 瀏覽:311
伺服器機櫃屬於什麼輻射 發布:2024-05-05 18:02:10 瀏覽:336
存儲成本計算 發布:2024-05-05 18:02:10 瀏覽:584
如何把手機改安卓10 發布:2024-05-05 17:39:07 瀏覽:498
我的世界怎麼擴容伺服器內存 發布:2024-05-05 17:19:54 瀏覽:48
java讀取文件字元 發布:2024-05-05 17:15:18 瀏覽:11
三星怎麼應用加密 發布:2024-05-05 17:13:18 瀏覽:152
cad字體在那個文件夾 發布:2024-05-05 17:08:20 瀏覽:331