1. 程式人生 > >程式包呼叫報ORA-06508: PL/SQL: 無法找到正在呼叫的程式單元

程式包呼叫報ORA-06508: PL/SQL: 無法找到正在呼叫的程式單元

        開發人員修改一個包裡一個過程,修改成功,並重新編譯成功,在程式日誌發現呼叫這個包報錯ORA-06508: PL/SQL: 無法找到正在呼叫的程式單元

先如下驗證:

開啟資料庫的一個會話建立一個包如下:

CREATE OR REPLACE PACKAGE SimplePkg AS  
   v_GlobalVar1 NUMBER := 1;  
   PROCEDURE UpdateVar;   
END SimplePkg;  
/
CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
   PROCEDURE UpdateVar IS  
   vv number;
   xx number;
   BEGIN  
      v_GlobalVar1 := 7;   
   END UpdateVar;  
END SimplePkg;  
/

第一個會話:

[email protected]>CREATE OR REPLACE PACKAGE SimplePkg AS  
  2     v_GlobalVar NUMBER := 1;  
  3     PROCEDURE UpdateVar;   
  4  END SimplePkg;  
  5  /
Package created.
[email protected]>CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
  2     PROCEDURE UpdateVar IS  
  3     BEGIN  
  4        v_GlobalVar := 7;   
  5     END UpdateVar;  
  6  END SimplePkg;  
  7  /
Package body created.

然後在開啟第二個會話呼叫這個包:

BEGIN   
   simplePkg.UpdateVar;   
END;  

第二個會話:

[email protected]>BEGIN   
  2     simplePkg.UpdateVar;   
  3  END; 
  4  /
PL/SQL procedure successfully completed.

然後在第一個會話中修改包

CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
   PROCEDURE UpdateVar IS  
   vv number;
   xx number;
   BEGIN  
      v_GlobalVar1 := 7;   
   END UpdateVar;  
END SimplePkg;  
/

第一個會話:

[email protected]>CREATE OR REPLACE PACKAGE BODY SimplePkg AS   
  2     PROCEDURE UpdateVar IS  
  3     vv number;
  4     xx number;
  5     BEGIN  
  6        v_GlobalVar1 := 7;   
  7     END UpdateVar;  
  8  END SimplePkg;  
  9  /
Package body created.
[email protected]>

第二個會話再次呼叫,報錯ORA-06508: PL/SQL: could not find program unit being called: "PROD.SIMPLEPKG"

第二個會話:

[email protected]>BEGIN   
  2     simplePkg.UpdateVar;   
  3  END;  
  4  /
BEGIN
*
ERROR at line 1:
ORA-04068: existing state of packages has been discarded
ORA-04061: existing state of package body "PROD.SIMPLEPKG" has been invalidated
ORA-04065: not executed, altered or dropped package body "PROD.SIMPLEPKG"
ORA-06508: PL/SQL: could not find program unit being called: "PROD.SIMPLEPKG"
ORA-06512: at line 2

在一次執行條用,條用正常

[email protected]>BEGIN   
  2     simplePkg.UpdateVar;   
  3  END;
  4  /

PL/SQL procedure successfully completed.
[email protected]>

出現這種情況的原因是因為,對於全域性變數,每一個session會生成一個本地copy,如果程式重新編譯的話,就會因程式裡原變數找不到而丟棄該變數,繼而導致這個錯誤。

也就是說在一個會話中呼叫程式包package時,會生成package中全域性變數的副本,如果在另一個會話中對此package進行編譯就會使前一個會話中的副本失效,故而產生錯誤。

要想避免這個錯誤,可以使程式捕獲ORA-06508:的錯誤進行處理,也可以重新初始化會話

相關推薦

程式呼叫ORA-06508: PL/SQL: 無法找到正在呼叫程式單元

        開發人員修改一個包裡一個過程,修改成功,並重新編譯成功,在程式日誌發現呼叫這個包報錯ORA-06508: PL/SQL: 無法找到正在呼叫的程式單元 先如下驗證: 開啟資料庫的一個會話建立一個包如下: CREATE OR REPLACE PACKAGE Si

Oracle Web ADI 載入時錯誤:ORA-06508: PL/SQL: 無法呼叫之前找到程式單元

Oracle EBS 的Web ADI給批量匯入資料提供一個不錯的解決方案。但是,Web ADI開發比較麻,主要缺點如: 1.整合器設定好以後不能修改,必須要事先考慮包的儲存過程或函式的引數。則否,儲存過程和函式修改要新增引數時,必須要重新定整合器,不能修改和刪除。 2.對

除錯經驗——ORA-06502: PL/SQL: numeric or value error: character string buffer too small的解決方法

問題描述: 生產環境中,有一個在報表自動刷新系統中排期的報表(scheduled report)生成失敗。 報以下錯誤: ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA-

ORA-06502: PL/SQL: 數字或值錯誤 : 字串緩衝區太小 錯誤分析

1. 問題起因 最近在進行oracle的一些操作時,總會遇到這個錯誤: ORA-06502: PL/SQL: 數字或值錯誤 : 字串緩衝區太小,錯誤如下: ORA-00604: 遞迴 SQL 級別 1 出現錯誤 ORA-0650

ORA-06502:PL/SQL :numberic or value error: character string buffer too small

原文地址為: ORA-06502:PL/SQL :numberic or value error: character string buffer too small 今天遇到一個錯誤提示:ORA-06502:PL/SQL :numberic or value error: charac

ORACLE 儲存過程的建立以及ORA-06502:PL/SQL:數字或值錯誤的解決方法

建立四個儲存過程,分別是簡單不帶引數的儲存過程、帶兩個輸入引數IN的儲存過程、帶一個輸入引數IN,一個輸出引數OUT的儲存過程和帶兩個輸入輸出引數IN OUT的儲存過程。 建立一張全域性臨時emp表 CREATE GLOBAL TEMPORARY TAB

ORA-06502: PL/SQL: 數字或值錯誤 : 字元到數值的轉換錯誤 問題解決

        今天在plsql中執行儲存過程的時候發現,日誌記錄中有“SQLCODE(-6502) SQLERRM(ORA-06502: PL/SQL: 數字或值錯誤 :  字元到數值的轉換錯誤)”這個錯誤出現。後來

pl/sql developer中用execute呼叫儲存過程彈出‘無效的sql語句’解決方法

--------建立儲存過程------- create or replace procedure GetUserAccout as tatle number(10); begin

PL/SQL中建立、呼叫儲存過程--oracle

在oracle10中寫好了儲存過程,程式碼如下:CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sE

Oracle Client11g下載安裝以及本地服務名配置ORA針對PL/SQL設定小結

問題 安裝 Oracle\Win32_11G_R2_Client 客戶端時,檢查顯示出現 “失敗”,點選 忽略 繼續; network Configuration Assistant不能開啟,則使用CMD輸入 “netca”進行開啟; 若是由於沒有許可權

Win7下面PL/SQL無法使用

今天發現在使用PL/SQL時,無法登陸。經過群裡朋友的幫忙,最後圓滿解決,現留個記錄以便以後可查。 1、右鍵PL/SQL的執行圖示,然後選擇以管理員身份執行 , 2、登入時以正常的 普通使用者身份

Error:程式android.support.v4.app不存在;Error:不到類FragmentActivity

最近把在eclipse中開發的android專案匯入到AS中,出現了一點小錯誤。用的是以非gradle方式將 Eclipse 專案匯入Android Studio,具體方法參考http://blog.c

關於PL\SQL無法在64位Client下使用的原因及解決辦法

初次使用oracle時會使用到PLSQL圖形化工具,可是如果此時你安裝的是64位的資料庫,則安裝完PL\SQL後使用它是會出現一個錯誤對話方塊,提示圖如下: 點選下載  instantclien

pl/sql無法連線oracle的解決過程心得

剛裝好的oracle,pl/sql之前都好好的突然一天,pl/sql登入連線oracle失敗了。提示ora-01034:ORACLE NOT AVAI LABLE ora-27101:shared memory realm does not exist 然後試著在cmd中

PL/SQL Developer登入時候ORA-12638: 身份證明檢索失敗的解決辦法

net ces 默認 安裝目錄 多個 sem con 操作系統 p s 本地oracle客戶端用PLSQL Developer連接遠程數據庫,登入時候報ORA-12638: 身份證明檢索失敗的解決辦法 找到安裝目錄:C:\oracle\BIToolsHome_1\netwo

PL/SQL錯:ORA-28000:the account is locked

第一種方法(圖形操作):第一步:使用PL/SQL,登入名為system,選擇型別的時候把Normal修改為SYSDBA;第二步:選擇users下的system,右擊點選“編輯”; 第三步:修改密碼,把“帳戶被鎖住”的勾去掉; 第四步:點選最下面的“應用”再點選“關閉”; 第五步:重新登入就可以通過驗證了

[PL/SQL] 關於pl/sql編譯ORA-00934此處不允許使用分組函式 [複製連結]

     今天在開發的過程中碰到一個奇怪的現象:pl/sql編譯報ORA-00934此處不允許使用分組函式,但單獨執行該語句是可以成功執行的,並且業務邏輯也是正確的      舉個例子      1、建立兩張表           create table ABC           (          

安裝兩次ORACLE客戶端,PL-SQL登入ORA-12154

安裝兩次ORACLE客戶端,PL-SQL登入報錯 ORA-12154: TNS:could not resolve the connect identifier specified 原因:環境變數 path 配置 D:\oracle\product\10.2.0\clie

使用PL/SQL Developer 錯:ORA-01460 :轉換請求無法實現或不合理 解決辦法!!!

剛安裝好的oracle9i,使用pl/sql developer連線上去操作表的時候就報錯:ORA-01460 :轉換請求無法實現或不合理 。 問題原因是:客戶端和服務端字符集不一致。 事後回想一下,產生問題的原因應該是,事前裝過oracle10g,沒有解除安裝乾淨,後面又裝oracle9i設定的字符集和or

使用PL/SQL Developer 錯:ORA-01460 :轉換請求無法實現或不合理 解決辦法!!!...

剛安裝好的oracle9i,使用pl/sql developer連線上去操作表的時候就報錯:ORA-01460 :轉換請求無法實現或不合理 。問題原因是:客戶端和服務端字符集不一致。事後回想一下,產生問題的原因應該是,事前裝過oracle10g,沒有解除安裝乾淨,後面又裝or