PL/SQL 不打印到控制台(在 SQLDeveloper 中)

Posted

技术标签:

【中文标题】PL/SQL 不打印到控制台(在 SQLDeveloper 中)【英文标题】:PL/SQL does not print to console (in SQLDeveloper) 【发布时间】:2019-10-26 13:25:56 【问题描述】:

我正在编写 PL/SQL 触发器(INSTEAD OF 类型)。我正在尝试在触发器中打印到控制台,但它不可见。

脚本如下所示:

SET SERVEROUTPUT ON;

CREATE OR REPLACE TRIGGER MYTRIGG
INSTEAD OF INSERT ON MYTABLE 
FOR EACH ROW
DECLARE
    --My varables...
BEGIN
    --Some statements

    DBMS_OUTPUT.PUT_LINE('Error! Deptno does not exist!');

    --Rest of script
END;

我一直在搜索堆栈,但没有任何效果。 我已经 SET SERVEROUTPUT ON 并且我还尝试打开 View -> Dbms Output

脚本按预期编译和工作,但不打印到控制台。

【问题讨论】:

打开服务器输出并运行插入语句。 正如我在描述中提到的,它已打开。插入工作正常,但它不会打印到控制台。 准确地分享你在做什么是非常重要的。请参阅下面的答案。 【参考方案1】:

您的代码具有误导性。

您不能在表上使用 INSTEAD OF 触发器。

这是一些工作代码。

drop table mytable;
drop view mytable_view;
create table mytable (a integer);
create view mytable_view as select * from mytable;

SET SERVEROUTPUT ON;

CREATE OR REPLACE TRIGGER MYTRIGG
INSTEAD OF INSERT ON MYTABLE_view 
FOR EACH ROW
DECLARE
x integer;

BEGIN
    --Some statements

    DBMS_OUTPUT.PUT_LINE('Error! Deptno does not exist!');


    --Rest of script
END;
/

insert into mytable_view values (1);

commit;

如果我在 SQL Developer 中将其作为脚本运行 -

【讨论】:

谢谢!有用。你说得对,我不是在桌子上做的,而是在视图上做的。当我将它作为脚本运行时它可以工作,而不是单独运行。 @DamDev 我们假设您知道使用异常将消息传递给您的应用程序/用户,而不是 dbms_output...

以上是关于PL/SQL 不打印到控制台(在 SQLDeveloper 中)的主要内容,如果未能解决你的问题,请参考以下文章

打印 Oracle Pl/sql 光标

pl/sql练习案例

Oracle PL/SQL 中的漂亮打印

如何打印出非质数? PL/SQL [关闭]

使用 PL SQL 将所有列值打印到仅记录

PL/SQL 打印出存储过程返回的引用游标