1

sysでsf_timerという名前のパッケージを作成し、次にこれにパブリックシノニムを作成しました。

create or replace public synonym sf_timer for sys.sf_timer;
select * from all_synonyms where synonym_name = 'SF_TIMER';

次に、別のユーザーからこのパッケージを呼び出します。

set serveroutput on
declare
  i integer;
  j integer;
begin
  sf_timer.start_timer;
  for i in 1..100000
  loop
    j := j +1;
  end loop;
  sf_timer.show_elapsed_time('Test 1');
end;
/

残念ながら、以下のエラーが発生しました。

Error report:
ORA-06550: line 5, column 3:
PLS-00201: identifier 'SF_TIMER' must be declared
ORA-06550: line 5, column 3:
PL/SQL: Statement ignored
ORA-06550: line 10, column 3:
PLS-00201: identifier 'SF_TIMER' must be declared
ORA-06550: line 10, column 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

all_synonymsからこのパブリックシノニムを確認できますが、スキーマでパッケージを呼び出せない理由がわかりません。

前もって感謝します。

4

1 に答える 1

2

許可を与えましたか?

SYSとして実行している場合は、これを実行します...

GRANT EXECUTE ON SYS.SF_TIMER TO <user-you're-using>;

さらに注意すると、SYSスキーマでオブジェクトを作成することは一般的に悪い習慣と見なされています:-)

于 2012-10-10T16:45:16.427 に答える