3

こんにちは、ストア プロシージャの呼び出しに問題があります。次の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; 
4

3 に答える 3

4

エラー メッセージには、SCHEMA_RESTORE.RESTORE が見つからないことが示されています。いくつかの原因が考えられます。

  • パッケージ (およびプロシージャ) が別のスキーマにあります。たとえば、ユーザー A としてコンパイルしたのに、ユーザー B として呼び出そうとしています。
  • パッケージからプロシージャを実行するアクセス権がありません。したがって、それは見えなくなります。
  • パッケージ本体でプロシージャを定義しましたが、パッケージ ヘッダーで宣言していません。

私が見ることができるさらなる問題は、括弧です。引数なしでプロシージャを呼び出す場合は、括弧を省略します。

{ call SCHEMA_RESTORE.restore }
于 2012-12-11T07:27:35.127 に答える
4

あるユーザーで手順を作成し、別のユーザーでデータベースに接続すると発生します。この問題を解決するには、これを試してください

GRANT EXECUTE ON procedureName TO username

それ以外の場合は、使用している正しいユーザー名で接続します

于 2017-01-07T01:32:51.543 に答える
1

プロシージャは正常にコンパイルされましたか? また、スキーマの下のエディター (PL/SQL dev ?) で表示できるかどうかも確認してください。

または、これを使用して、そこにあるかどうかを確認できます-

SELECT * FROM DBA_OBJECTS WHERE object_name = '%your proc name%';
于 2012-12-11T06:43:28.680 に答える