簡體   English   中英

java.sql.SQLException: ORA-06550: 從 java 代碼調用過程后

[英]java.sql.SQLException: ORA-06550: after calling procedure from java code

嗨,我在調用存儲過程時遇到問題。 當我試圖從下面的 Java 代碼中調用我的過程時

connection = ConnectionManager.getInstance().getConnection(dataBaseURL, serverName, portNumber, sid, username, password);

callable = connection.prepareCall("{call SCHEMA_RESTORE.restore()}");

callable.executeUpdate();
..................................

我收到此異常

Exception in thread "main" java.sql.SQLException: ORA-06550: line 1, column 7:

PLS-00201: identifier 'SCHEMA_RESTORE.RESTORE' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2709)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:656)

我的程序是

CREATE OR REPLACE PACKAGE BODY SCHEMA_RESTORE IS 
  PROCEDURE backup (pbRecreateBackupTable IN BOOLEAN DEFAULT FALSE)
    IS
      TableAlreadyExists EXCEPTION;
      PRAGMA EXCEPTION_INIT (TableAlreadyExists, -955);
      nCount NUMBER;
      CURSOR cTables IS SELECT tbls.table_name tbl, SUBSTR(tbls.table_name,4) name FROM user_tables tbls, FT_T_TBDF tbdf
        WHERE tbls.table_name NOT LIKE gsPrefix || '%' AND tbls.table_name NOT LIKE 'FT_CFG%' AND tbls.table_name NOT IN ('FT_WF_APEV','FT_WF_WFTJ','FT_WF_WFTN','FT_WF_WFNP','FT_WF_WFNV','FT_WF_WFIO','FT_WF_WFGV','FT_WF_WFND','FT_WF_WFDF','EXCEPTIONS','TESTDSFP') and tbls.table_name NOT LIKE 'FT_LOG%'
          AND tbdf.tbl_id(+) = SUBSTR(tbls.table_name,-4) AND tbdf.tbl_desc NOT LIKE '%Note: This table is obsolete%';
BEGIN

        RAISE;
    END;
  END LOOP; 
EXCEPTION
  WHEN OTHERS THEN
    RAISE;
END backup; 

錯誤消息說找不到 SCHEMA_RESTORE.RESTORE。 有幾種可能的原因:

  • 包(和過程)處於不同的模式中,例如,您以用戶 A 的身份編譯它,但試圖以用戶 B 的身份調用它們。
  • 您沒有從包中執行過程的訪問權限。 因此它變得不可見。
  • 您已經在包體中定義了過程,但沒有在包頭中聲明它。

我可以看到的另一個問題是括號。 如果您調用不帶參數的過程,則應省略括號:

{ call SCHEMA_RESTORE.restore }

當您在一個用戶中創建一個過程並在另一個用戶中連接數據庫時,它就會出現。 要解決這個問題試試這個

GRANT EXECUTE ON procedureName TO username

否則使用您使用的正確用戶名連接

程序編譯成功了嗎? 還要檢查您是否可以通過模式下的某個編輯器(PL/SQL dev ?)看到它

或者你可以用它來看看它是否在那里——

SELECT * FROM DBA_OBJECTS WHERE object_name = '%your proc name%';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM