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';
테이블 작성 시B2BOWNER
PL/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 |