gpt4 book ai didi

oracle - PLS-00201 - 必须声明标识符

转载 作者:行者123 更新时间:2023-12-03 11:02:15 41 4
gpt4 key购买 nike

我执行了创建下表的 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

编辑:我更改了参数并收到与插入命令相关的新错误
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 下创建 TABLE 时,请务必在 PL/SQL 函数前加上 Schema 名称;即B2BOWNER.F_SSC_Page_Map_Insert .

直到 DBA 指出这一点,我才意识到这一点。我本可以在我的根 USER/SCHEMA 下创建表,并且 PL/SQL 函数可以正常工作。

关于oracle - PLS-00201 - 必须声明标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23526870/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com