你失踪了SET SERVEROUTPUT ON
。SQLDeveloper 也可以理解此命令。
让我们在 SQLDeveloper 中做一个快速测试。
CREATE USER "TEST_SCHEMA" IDENTIFIED BY "TEST";
创建了用户“TEST_SCHEMA”。
GRANT UNLIMITED TABLESPACE TO "TEST_SCHEMA";
格兰特成功了。
CREATE TABLE "TEST_SCHEMA"."NAMES" ("ID" NUMBER, "NAME" VARCHAR2(25), PRIMARY KEY("ID"));
表“TEST_SCHEMA”.“NAMES”已创建。
CREATE OR REPLACE TRIGGER "TEST_SCHEMA"."NAMES_TRG_1" AFTER
INSERT ON "TEST_SCHEMA"."NAMES"
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('New row has been added.');
END;
/
触发器 NAMES_TRG_1 已编译
SET SERVEROUTPUT ON
此命令不会在 SQL Developer 中打印任何内容。这里不用担心。
INSERT INTO "TEST_SCHEMA"."NAMES" VALUES (1, 'Mark Smith');
插入 1 行。
已添加新行。
如您所见,输出就在那里,它是在将实际行插入表中之后插入的。工作正常。
要清理测试用例,请运行以下命令:
DROP USER "TEST_SCHEMA" CASCADE;
编辑1:
当您使用表数据编辑器时,它的行为会有所不同。表数据编辑器有自己的 Oracle 会话,它有不同的方式来捕获 DBMS 输出。
要打开 DBMS 捕获窗口,您需要单击"VIEW"
菜单并选择"DBMS Output"
选项。
然后单击绿色加号按钮并设置将被捕获的数据库。
现在你可以看到输出了。
注意这里的输出不是“实时”的,这个窗口只有在有缓冲区刷新时才会显示一些东西,并且不能手动/直接调用缓冲区刷新。