gpt4 book ai didi

oracle - 如何清除SQLPlus中的错误消息缓冲区?

转载 作者:行者123 更新时间:2023-12-02 10:53:24 25 4
gpt4 key购买 nike

通过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_ERRORSDBA_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/

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