PLS-00201: 식별자를 선언해야 합니다.
다음 테이블을 생성한 PL/SQL 스크립트를 실행했습니다.
TABLE_NAME VARCHAR2(30) := 'B2BOWNER.SSC_Page_Map';
인수를 사용하여 이 테이블에 대한 삽입 함수를 만들었습니다.
CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert(
         p_page_id   IN B2BOWNER.SSC_Page_Map.Page_ID_NBR%TYPE, 
         p_page_type IN B2BOWNER.SSC_Page_Map.Page_Type%TYPE, 
         p_page_dcpn IN B2BOWNER.SSC_Page_Map.Page_Dcpn%TYPE)
신고해야 한다는 통보를 받았다.B2BOWNER.SSC_Page_Map내 기능에 대한 논쟁으로 보이기 전에 말이야이 에러가 발생하는 이유는 무엇입니까?
편집: 실제 오류
Warning: compiled but with compilation errors
Errors for FUNCTION F_SSC_PAGE_MAP_INSERT
LINE/COL ERROR                                                            
-------- -----------------------------------------------------------------
2/48     PLS-00201: identifier 'SSC_PAGE_MAP.PAGE_ID_NBR' must be declared
0/0      PL/SQL: Compilation unit analysis terminated 
편집: 완전한 PL/SQL 기능
RETURN INTEGER
IS
   TABLE_DOES_NOT_EXIST exception;  
   PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942
BEGIN
   INSERT INTO 
       B2BOWNER.SSC_Page_Map VALUES(
           p_page_id, 
           p_page_type, 
           p_page_dcpn);
   RETURN 0;
   EXCEPTION
       WHEN TABLE_DOES_NOT_EXIST THEN
           RETURN -1;
       WHEN DUP_VAL_ON_INDEX THEN
           RETURN -2;
       WHEN INVALID_NUMBER THEN
           RETURN -3;
       WHEN OTHERS THEN
           RETURN -4;
END;
SHOW ERRORS PROCEDURE F_SSC_Page_Map_Insert;
GRANT EXECUTE ON F_SSC_Page_Map_Insert TO B2B_USER_DBROLE; 
RETURN INTEGER
EDIT: 인수를 변경하고 insert 명령과 관련된 새 오류를 받았습니다.
CREATE OR REPLACE FUNCTION F_SSC_Page_Map_Insert(
                            p_page_id   IN INTEGER, 
                            p_page_type IN VARCHAR2, 
                            p_page_dcpn IN VARCHAR2)
RETURN INTEGER
IS
TABLE_DOES_NOT_EXIST exception;  
PRAGMA EXCEPTION_INIT(TABLE_DOES_NOT_EXIST, -942); -- ORA-00942
BEGIN
INSERT INTO 
    B2BOWNER.SSC_Page_Map VALUES(
        p_page_id, 
        p_page_type, 
        p_page_dcpn);
에러
Errors for FUNCTION F_SSC_PAGE_MAP_INSERT
LINE/COL ERROR                                                            
-------- -----------------------------------------------------------------
17/18    PL/SQL: ORA-00942: table or view does not exist                  
16/5     PL/SQL: SQL Statement ignored                                    
테이블이 올바른 스키마 내에서 올바른 속성 이름과 유형을 사용하여 확인되었습니다.
편집: 다음 명령을 실행하여 액세스 권한이 있는지 확인했습니다.
DECLARE
    count_this INTEGER;
BEGIN
select count(*) into count_this 
from all_tables 
where owner = 'B2BOWNER' 
and table_name = 'SSC_PAGE_MAP';
DBMS_OUTPUT.PUT_LINE(count_this);
END;
제가 받은 출력은
1
PL/SQL procedure successfully completed.
나는 그 테이블에 접근할 수 있다.
편집:
그래서 마침내 PL/SQL을 사용하여 스키마를 통해 테이블에 삽입을 진행했고 정상적으로 작동했습니다.단순히 기능을 만들 권한이 없는 것처럼 보이지만 그것은 가정입니다.
편집:
실제 테이블 DDL 문
 v_create := 'CREATE TABLE ' ||  TABLE_NAME || ' (
                PAGE_ID_NBR   NUMERIC(10)   NOT NULL Check(Page_ID_NBR > 0),
                PAGE_TYPE     VARCHAR2(50)  NOT NULL, 
                PAGE_DCPN     VARCHAR2(100) NOT NULL,
                PRIMARY KEY(Page_ID_NBR, Page_Type))';
EXECUTE IMMEDIATE v_create; 
COMMIT WORK;
COMMIT COMMENT 'Create Table'; 
테이블 작성 시B2BOWNERPL/SQL 함수 앞에 스키마 이름을 붙여야 합니다. B2BOWNER.F_SSC_Page_Map_Insert.
DBA가 지적할 때까지 몰랐습니다.root USER/SCHEMA 아래에 테이블을 만들 수 있었고 PL/SQL 기능은 정상적으로 작동했을 것입니다.
데이터베이스에 프로시저를 작성할 때는 프로시저 이름을 대문자로 입력해야 합니다.Java 클래스에서 호출할 때 절차 이름에 다음과 같은 작은 문자를 사용할 수 있습니다.
String getDBUSERByUserIdSql = "{call getDBUSERByUserId(?,?,?,?)}";
데이터베이스에서 절차 이름은 다음과 같아야 합니다.
GETDBUSERBYUSERID    -- (all letters in caps only)
이것은 이 문제의 해결 방법 중 하나입니다.
db에 대한 권한을 부여해야 합니다.
grant execute on (packageName or tableName) to user;
언급URL : https://stackoverflow.com/questions/23526870/pls-00201-identifier-must-be-declared
'programing' 카테고리의 다른 글
| woocommerce를 사용하여 wordpress에서 카트의 항목 수를 가져옵니다. (0) | 2023.03.25 | 
|---|---|
| WordPress 블로그를 iOS 앱에 통합하려면 어떻게 해야 합니까? (0) | 2023.03.25 | 
| ObjectResult와 JsonResult의 차이점 (0) | 2023.03.20 | 
| useEffect 내의 Redx 저장소에서 상태 가져오기 반응 (0) | 2023.03.20 | 
| Oracle SQL 스키마의 모든 테이블을 나열하려면 어떻게 해야 합니까? (0) | 2023.03.20 |