Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL触发器不工作_Oracle_Plsql_Database Trigger - Fatal编程技术网

Oracle PL/SQL触发器不工作

Oracle PL/SQL触发器不工作,oracle,plsql,database-trigger,Oracle,Plsql,Database Trigger,我创建了一个如下表: CREATE TABLE table_name ( name VARCHAR2(20) ); 之后,我创建了一个触发器,在每次插入之前,它必须写入用户名: SET SERVEROUTPUT ON; CREATE OR REPLACE TRIGGER bi_trigger BEFORE INSERT ON table_name FOR EACH ROW ENABLE DECLARE v_user VARCHAR2(20); BEGIN SELECT us

我创建了一个如下表:

CREATE TABLE table_name (
name     VARCHAR2(20)
);
之后,我创建了一个触发器,在每次插入之前,它必须写入用户名:

SET SERVEROUTPUT ON;

CREATE OR REPLACE TRIGGER bi_trigger
BEFORE INSERT ON table_name
FOR EACH ROW
ENABLE
DECLARE
v_user      VARCHAR2(20);
BEGIN
SELECT user INTO v_user FROM dual;
DBMS_OUTPUT.PUT_LINE('You inserted a row, ' || v_user);
END;
但是,在我的表中插入一些内容后,请求的带有用户名的行不会出现。我错过了什么

INSERT INTO table_name VALUES('qwerty');

您将看不到dbms_输出,因为触发器存在于本地会话之外,未连接。如果您只是想确认触发器是否正确触发,请尝试向表中添加一列,如VARCHAR2(0032)创建的列

将触发器主体替换为

    :NEW.created_by := USER;

这将告诉您触发器是否工作。

我发现两个潜在问题

一是不清楚你是否真的在制造触发器。在所显示的示例代码中,需要在触发器文本后面加一个正斜杠(
/
),才能实际执行CREATE语句。如果创建成功,您应该看到“触发器已创建”

另一个是在创建触发器之前启用SERVEROUTPUT,这与此无关。您需要在执行INSERT语句的会话中启用它。(如果在与创建会话相同的会话中执行插入,则这不是问题所在。)


(另一个答案意味着您没有看到输出,因为触发器是在会话之外执行的。这是不正确的。)

不确定您期望的是什么。您是说即使在提交之后新行也不会出现吗?您不会看到dbms_输出,因为触发器存在于会话之外。还包括v_user:=用户;将替换“从双选择”。请详细说明您的期望。行已插入。问题是我没有看到dbms_输出。我已经编辑了我的问题。@FogarasiNorbert似乎没有问题,除了你没有像@Dave Costa所说的那样在触发器创建语句后加斜杠(
/
)。只要您继续此会话,就不会出现查看消息的问题。啊,您还需要将insert语句调整为引用列“name”。事实证明,您可以检索dbms_输出,但需要使用PL/SQL块来执行此操作。请参阅:在创建触发器之前启用SERVEROUTPUT没有问题。我不是说这是个问题。我是说,如果插入是在另一个会话中执行的,那么需要在该会话中启用SERVEROUTPUT才能查看输出。编辑以澄清,我希望。@Dave Costa我应该把正斜杠放在哪里?在
启用
关键字之后?@FogarasiNorbert--在
结束之后的一行另请参见