首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PLS-00201 -必须声明标识符

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

Stack Overflow用户
提问于 2014-05-08 03:40:57
回答 3查看 259.1K关注 0票数 32

我执行了一个创建下表的PL/SQL脚本

代码语言:javascript
复制
TABLE_NAME VARCHAR2(30) := 'B2BOWNER.SSC_Page_Map';

我使用参数为这个表创建了一个插入函数

代码语言:javascript
复制
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作为函数的参数出现之前,我必须声明它。为什么我会得到这个错误?

编辑:实际错误

代码语言:javascript
复制
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 

SQL:完整的PL/函数

代码语言:javascript
复制
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

insert EDIT:我更改了参数,并收到与命令相关的新错误

代码语言:javascript
复制
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);

错误

代码语言:javascript
复制
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                                    

已在正确的方案中使用正确的属性名称和类型对表进行了验证

EDIT:我执行了以下命令来检查我是否有访问权限

代码语言:javascript
复制
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;

我收到的输出是

代码语言:javascript
复制
1
PL/SQL procedure successfully completed.

我可以进入那张桌子。

编辑:

因此,我最终使用PL/SQL通过模式将insert插入到表中,它工作得很好。看起来我根本没有创建函数的权限,但这只是一个假设。

编辑:

实际表DDL语句

代码语言:javascript
复制
 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'; 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-08 21:23:25

B2BOWNER下创建表时,请确保在PL/SQL函数前面加上模式名;即B2BOWNER.F_SSC_Page_Map_Insert

直到DBA指出后,我才意识到这一点。我可以在根用户/模式下创建表,PL/SQL函数就可以很好地工作了。

票数 12
EN

Stack Overflow用户

发布于 2014-08-12 14:49:06

在数据库中创建过程时,过程名称应为大写。在从Java类调用时,可以使用小写字母作为过程名称,如下所示:

代码语言:javascript
复制
String getDBUSERByUserIdSql = "{call getDBUSERByUserId(?,?,?,?)}";

在数据库中,过程的名称应为:

代码语言:javascript
复制
GETDBUSERBYUSERID    -- (all letters in caps only)

这是解决这个问题的方法之一。

票数 4
EN

Stack Overflow用户

发布于 2017-06-15 19:32:31

您应该在您的数据库上授予权限

代码语言:javascript
复制
grant execute on (packageName or tableName) to user;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23526870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档