Plsql pl/sql包/过程未找到数据错误
在执行过程时,我面临“未找到数据”错误。但该行实际上存在于表中。请帮我做这件事Plsql pl/sql包/过程未找到数据错误,plsql,Plsql,在执行过程时,我面临“未找到数据”错误。但该行实际上存在于表中。请帮我做这件事 **Code** *CREATE OR REPLACE PACKAGE BODY SCOTT."TRUNC_ANALYZE_PKG" as PROCEDURE TRUNC_TABLE(v_owner in varchar2, v_tab_name IN VARCHAR2) AS t_owner varchar2(30) ; BEGIN -- Truncate only EMP tables SEL
**Code**
*CREATE OR REPLACE PACKAGE BODY SCOTT."TRUNC_ANALYZE_PKG"
as
PROCEDURE TRUNC_TABLE(v_owner in varchar2, v_tab_name IN VARCHAR2) AS
t_owner varchar2(30) ;
BEGIN
-- Truncate only EMP tables
SELECT owner
INTO t_owner
FROM all_tables
WHERE table_name = upper(v_tab_name)
and owner in ('EMP') ;
execute immediate ('TRUNCATE TABLE EMP.'||upper(v_tab_name)) ;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RAISE_APPLICATION_ERROR(-20023, v_tab_name||' Schema name or Table name is not valid. '||SUBSTR(SQLERRM,1,500));
WHEN OTHERS
THEN
RAISE_APPLICATION_ERROR(-20023, v_tab_name||SUBSTR(SQLERRM,1,500));
END TRUNC_TABLE;
PROCEDURE ANALYZE_TABLE(v_owner in varchar2, v_tab_name IN VARCHAR2) AS
v_tab_owner varchar2(30) := upper(v_owner) ;
v_tab_name2 varchar2(30) := upper(v_tab_name) ;
BEGIN
dbms_ddl.analyze_object('TABLE',v_tab_owner,v_tab_name2,'ESTIMATE','',20,'');
exception
when others then
/* Raise the error to the calling proc id
required. */
raise;
END ANALYZE_TABLE;
END TRUNC_ANALYZE_PKG;
/*
错误消息:
SQL> exec SCOTT.DBA_PKG.TRUNC_TABLE('EMP','EMPLOYEE');
BEGIN DBA_PKG.TRUNC_TABLE('EMP','EMPLOYEE'); END;
*
ERROR at line 1:
ORA-20023: STG_FIRMINFO Schema name or Table name is not valid. ORA-01403: no
data found
ORA-06512: at "EIB_USER.DBA_PKG", line 21
ORA-06512: at line 1
但实际上,EMPLOYEE表存在于所有的_表中。我无法解释为什么会捕获此异常。请帮我做这件事
**Code**
*CREATE OR REPLACE PACKAGE BODY SCOTT."TRUNC_ANALYZE_PKG"
as
PROCEDURE TRUNC_TABLE(v_owner in varchar2, v_tab_name IN VARCHAR2) AS
t_owner varchar2(30) ;
BEGIN
-- Truncate only EMP tables
SELECT owner
INTO t_owner
FROM all_tables
WHERE table_name = upper(v_tab_name)
and owner in ('EMP') ;
execute immediate ('TRUNCATE TABLE EMP.'||upper(v_tab_name)) ;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RAISE_APPLICATION_ERROR(-20023, v_tab_name||' Schema name or Table name is not valid. '||SUBSTR(SQLERRM,1,500));
WHEN OTHERS
THEN
RAISE_APPLICATION_ERROR(-20023, v_tab_name||SUBSTR(SQLERRM,1,500));
END TRUNC_TABLE;
PROCEDURE ANALYZE_TABLE(v_owner in varchar2, v_tab_name IN VARCHAR2) AS
v_tab_owner varchar2(30) := upper(v_owner) ;
v_tab_name2 varchar2(30) := upper(v_tab_name) ;
BEGIN
dbms_ddl.analyze_object('TABLE',v_tab_owner,v_tab_name2,'ESTIMATE','',20,'');
exception
when others then
/* Raise the error to the calling proc id
required. */
raise;
END ANALYZE_TABLE;
END TRUNC_ANALYZE_PKG;
/*
谢谢,
Poova.当您在程序中选择时:
从所有_表中选择count(*)到xx中
:xx是可以选择的表数
但是当您在sql developer中选择时:
从所有表中选择count(*)到xx
:xx是数据库中所有表的数量
因此,在您的情况下,您必须
将“选择任何表”授予scott
您作为什么用户登录?用户SCOTT是否有权选择访问ALL_TABLES视图?另外,为什么错误消息的前缀是STG_FIRMINFO
,而不是EMPLOYEE
?在包EIB_用户中出现一些代码。DBA_PKG
正在尝试截断STG_FIRMINFO
表,而不是EMP.EMPLOYEE
。是..SCOTT有权访问所有表。很抱歉,我试图使用scott和employee表替换我的实际模式名和表名,但我错误地发布了我的实际错误消息。请从所有表中选择owner,其中table_name=upper('employee')和owner in('EMP');此查询在程序包外部工作。这将返回EMP作为结果。但在包内它不起作用。请帮我找出根本原因。已为此包创建公共同义词。那会有问题吗