저장된 절차 내에서 DBA_TAB_COL을 선택할 수 없습니다 (PL/SQL)
-
03-07-2019 - |
문제
저장된 절차 내에서 DBA_TAB_COLS보기에서 선택하려고합니다. 작동하지 않고 이유를 모르겠습니다.
다음 SQL을 쿼리로 실행하면 다음과 같습니다.
SELECT t.data_type FROM dba_tab_cols t
WHERE
t.table_name = 'ACCOUNTTYPE' AND
t.column_name = 'ACCESSEDBY';
잘 작동합니다. 그러나 저장된 절차로 복사하면 :
SELECT t.data_type INTO dataType FROM dba_tab_cols t
WHERE
t.table_name = 'ACCOUNTTYPE' AND
t.column_name = 'ACCESSEDBY';
"PL/SQL : ORA-00942 : 테이블 또는 뷰가 존재하지 않는다"는 오류 메시지가 표시되고 편집자는 컴파일을 시도하는 동안 DBA_TAB_COL을 강조합니다. 두 경우 모두 동일한 DB 사용자가 사용되고 있습니다.
데이터 유형은 다음과 같이 선언됩니다 : Datatype varchar2 (128);
PL/SQL (Oracle 9)
누구든지 문제를 아는 사람이 있습니까?
해결책
특권 문제 일 가능성이 높습니다. 액세스 권한입니다 dba_tab_columns
역할을 통해 또는 사용자에게 직접 선택한 보조금입니까? Sprocs에서는 역할을 통해 부여 된 특권은 없습니다.
Google의 간단한 모습은 사용을 제안합니다 all_tab_cols
대신 해당 테이블에 필요한 정보가 있는지 확인하십시오.
다른 팁
Eoin의 답변에 추가하려면 :
대부분의 사람들의 경우 사용자가 직접 선택 권한을 부여받지 못한 경우 (역할을 통해서는) 사용자가 절차 내에서 테이블을 선택할 수 없다는 것은 놀라운 일입니다.
테이블 사용자 가이 절차를 컴파일하려고한다면,이 테이블이 확실히 존재 하고이 테이블을 선택할 권리가 부여되었지만 ORA-00942를 얻습니다. 문제는 절차가 역할을 존중하지 않는다는 것입니다. 직접 부여 된 권리만이 존중됩니다. 따라서 테이블 소유자가 선택할 권리를 다시 한 번 다시 한번해야한다는 것을 의미합니다.
Oracle이 설치되어 있지 않지만 데이터 유형은 예약 된 단어 일 것입니다. 나는 다른 것을 시도 할 것입니다.