通过SQL*Plus
安装多个对象时出现问题。
让我们安装两个对象:包A和 View B,并且A包含编译错误
SET FEEDBACK OFF
prompt install PACKAGE_A spec
create or replace package package_a is
procedure p;
end;
/
show errors
prompt install PACKAGE_A body
create or replace package body package_a is
procedure p is begin hello; end;
end;
/
show errors
prompt install VIEW_B
create or replace view view_b as
select * from dual;
show errors
这样我们就得到了输出:
install PACKAGE_A spec
No errors.
install PACKAGE_A body
Warning: Package Body created with compilation errors.
Errors for PACKAGE BODY PACKAGE_A:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/24 PL/SQL: Statement ignored
2/24 PLS-00201: identifier 'HELLO' must be declared
install VIEW_B
Errors for PACKAGE BODY PACKAGE_A:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/24 PL/SQL: Statement ignored
2/24 PLS-00201: identifier 'HELLO' must be declared
我不仅在“包装后查看”情况下遇到了这个问题,而且目前在“包装后包装”情况下的简短示例中无法重现该问题(这在很大程度上困扰着我)。因此,它似乎并没有针对所有类型的编译错误出现。
文档说
When you specify SHOW ERRORS with no arguments, SQL*Plus shows compilation errors for the most recently created or altered stored procedure
。同样很明显,可以指定一个特定的对象
SHOW ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY ...} [schema.]name]
但是它看起来不可用,因为提供对象类型的要求使情况变得更加复杂(不清楚为什么命令不能仅用对象名称来满足)。
您能帮我找到一种清除
SHOW ERRORS
命令缓冲区的方法,以便可以在每次对象编译之前将其设置为原始状态吗?
最佳答案
如果有办法,我不知道。SHOW ERRORS
是一个SQL * Plus命令。据我所知,它从USER_ERRORS
(或者可能是ALL_ERRORS
或DBA_ERRORS
)中获取数据。它的描述是
SQL> desc user_errors;
Name Null? Type
----------------------------------------- -------- ----------------
NAME NOT NULL VARCHAR2(30)
TYPE VARCHAR2(12)
SEQUENCE NOT NULL NUMBER
LINE NOT NULL NUMBER
POSITION NOT NULL NUMBER
TEXT NOT NULL VARCHAR2(4000)
ATTRIBUTE VARCHAR2(9)
MESSAGE_NUMBER NUMBER
如果我做这样的事情:
SQL> create or replace procedure ptest is
2 l_Res number;
3 begin
4 l_res := 1 * A;
5 end;
6 /
Warning: Procedure created with compilation errors.
SQL> show err
Errors for PROCEDURE PTEST:
LINE/COL ERROR
-------- --------------------------------------------------------
4/3 PL/SQL: Statement ignored
4/16 PLS-00201: identifier 'A' must be declared
然后
SHOW ERR
返回我得到的最后一个错误。这是否意味着USER_ERRORS不包含其他内容?没有:SQL> select name, line, substr(text, 1, 50) text from user_Errors;
NAME LINE TEXT
------------ ---------- --------------------------------------------------
PTEST 4 PL/SQL: Statement ignored
PTEST 4 PLS-00201: identifier 'A' must be declared
ADD_COURSE 0 PL/SQL: Compilation unit analysis terminated
ADD_COURSE 2 PLS-00201: identifier 'COURSE.TILTE' must be decla
SQL>
因此,我可以简单地删除其内容吗?理想情况下,我将在该.SQL脚本中的每两个
CREATE PROCEDURE
(或其他)语句之间执行此操作:SQL> delete user_errors;
delete user_errors
*
ERROR at line 1:
ORA-01031: insufficient privileges
不,我不能那样做。
因此,我认为您必须使用该不太实用的选项并指定要查看的错误。
关于oracle - 如何清除SQLPlus中的错误消息缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425759/