2011-04-20 6 views
2

저는 PL/SQL을 배우는 학생입니다. 10g의 로컬 설치가 있는데 내 쿼리를 실행하고 있습니다. DBMS_ALERT, DBMS_PIPE 또는 다른 기본 패키지를 사용할 때마다 "잘못된 SQL"메시지가 나타납니다. TOAD 및 SQL + Plus에서 동일한 결과로 쿼리를 시도했습니다. 이렇게하면이 패키지가 설치되지 않았거나 내 사용자 세션에 액세스 할 수 없다고 생각하게됩니다. 'SYS'사용자 로그인을 사용하고 있으므로 권한이 문제가 될 것이라고 생각하지 않습니다.Oracle 10g 제공 패키지 없음

누군가가 이러한 패키지를 만드는 법을 가르쳐 주시겠습니까? 나는 그들이 기본적으로 제공되었다는 인상하에 있었습니까?

당신이 잘못하고 될 수

+2

우리에게 실행중인 SQL을 보여주십시오 –

답변

2

이러한 패키지는 단순히 설치되지 않을 수 있습니다. 설치하려면 $ ORACLE_HOME/rdbms/admin 디렉토리를보고 SYS로 스크립트를 실행하십시오. 위에 나열된 패키지에 대한 파일 참조가 포함되었습니다.

DBMS_ALERT dbmsalrt.sql 및 prvtalrt.plb

DBMS_PIPE dbmspipe.sql 및 prvtpipe.plb

3

한 가지가 PL/SQL 블록 외부의 PL/SQL 함수 또는 프로 시저를 호출하려고

카일 주셔서 대단히 감사합니다. 당신은 예를 들어, beginend에서 절차에 대한 호출을 포장해야 할 수 있습니다.

 
SQL> dbms_lock.sleep(1); 
SP2-0734: unknown command beginning "dbms_lock...." - rest of line ignored. 
SQL> begin dbms_lock.sleep(1); end; 
    2/

PL/SQL procedure successfully completed. 

(자체 라인에 하나의 /가 입력의 끝에 있다는 SQL의 *를 알려줍니다 플러스 일반적으로 SQL * 플러스 세미콜론을 사용하여 명령문의 끝을 표시하지만 PL/SQL은 세미콜론을 포함 할 수 있으며 SQL * Plus가 PL/SQL을 입력하는 것을 인식하면 입력을 전달하기 전에 단일 /을 기다립니다.

표시되는 오류의 다른 가능한 원인은 쿼리 내에서 저장 프로 시저를 호출하려고한다는 것입니다. 저장 프로 시저가 결과를 반환하지 않기 때문에 가능하지 않습니다. 틀림없이, 쿼리 내에서 프로 시저를 호출 할 경우 당신이 얻을 오류가 특히 도움이되지 않습니다 :

 
SQL> select dbms_alert.register('test') from dual; 
select dbms_alert.register('test') from dual 
     * 
ERROR at line 1: 
ORA-00904: "DBMS_ALERT"."REGISTER": invalid identifier 

이 오류의 원인은 오라클이 저장 프로 시저 중 찾고 귀찮게하지 않는 될 가능성이 높습니다 dbms_alert.register이라는 이름을 사용하고 있으므로 대신 '이 이름을 찾을 수 없습니다'오류가 발생합니다.

내가 설명한대로 문제가 해결되지 않으면 알려 주시기 바랍니다.