2015-03-06 1 views
0

Кроме того, после ошибки приближались «объявить @empsal», как PLS-00103 :Encountered the symbol "@" when expecting one of the following ...При компиляции триггера в Oracle SQL метания ошибки в виде таблицы или представлений не существует

Моих таблиц существуют в базе данных.

Мой триггер:

create or replace 
TRIGGER leavemastertrg After INSERT 
ON "xyz"."leave_master" 
    declare @empid int; 
    declare @empname varchar(100); 
    declare @empsal decimal(10,2); 
    declare @audit_action varchar(100); 

    select @empid=i.LEAVE_ID from inserted i; 
    select @empname=i.LEAVE_NAME from inserted i; 
    select @empsal=i.LEAVE_STATUS from inserted i; 
    set @audit_action='Inserted Record -- After Insert Trigger.'; 

    insert into manager_master 
      (MANAGER_ID,MANAGER_NAME,MANAGER_STATUS,MANAGER_AUDIT_ACTION,MANAGER_AUDIT_TIMESTAMP) 
    values(@empid,@empname,@empsal,@audit_action,getdate()); 

    PRINT 'AFTER INSERT trigger fired.' 
GO 
+0

В коде, который вы опубликовали, нет объявления «declare @empsal». Пожалуйста, разместите реальный код, который вы используете, и поместите все сообщения об ошибках, которые вы получаете в своем вопросе (не в заголовке), включая номер строки, с которой они происходят –

+2

Какую базу данных вы используете? Вы отметили это для «oracle», но код, который вы опубликовали, не является PL/SQL. Кажется, это SQL-сервер T-SQL. Вы отметили это для MySQL, но ошибка, которую вы опубликовали, является ошибкой Oracle, а не ошибкой MySQL. Я предполагаю, что вы пытаетесь использовать синтаксис SQL Server в базе данных Oracle, которая принципиально не собирается работать. Мне трудно понять, где MySQL вступает в игру. –

+0

Извините, новичок этого триггера @ Justin Cave. В основном я практиковал основы из [link] (http://www.codeproject.com/Articles/25600/Triggers-SQL-Server) только на сервере MySql, там также была допущена некоторая ошибка .Then попытался в Oracle sql, с тем же кодом и некоторой модификацией. @ ErwinBolwidt выше одного был моим точным кодом в oracle. (MySQL 5.6 using) – Saro

ответ

0

CREATE OR REPLACE TRIGGER LM_AFTER_INSERT ПОСЛЕ ВСТАВИТЬ на LEAVE_MASTER ДЛЯ КАЖДОЙ ROW

DECLARE v_username varchar2 (20 байт);

BEGIN SELECT user INTO v_username FROM dual;

INSERT INTO manager_master 
(MANAGER_ID, 
MANAGER_NAME, 
MANAGER_STATUS, 
Modified_by) 
VALUES 
(:new.LEAVE_ID, 
    :new.LEAVE_NAME, 
    :new.LEAVE_STATUS, 
    user); 

END;

Этот пример кода отлично работает в Oracle SQL. Простой способ я применил Mysql, оральные sql-концепции. Спасибо всем.