Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка переменной в строку / 12 сообщений из 12, страница 1 из 1
05.05.2017, 19:54
    #39449633
Bastist29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Не получается вставить переменную в строку

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE TRIGGER trig_obn_audit AFTER UPDATE OR DELETE OR INSERT ON ZP_STUDENTS FOR EACH ROW
BEGIN
  DECLARE
  b ZP_AUDIT.IZM_TYPE%TYPE;
    BEGIN
      if updating THEN b:='обновление';
      ELSIF deleting THEN b:='удаление';
      ELSIF inserting THEN b:='вставка';
      END IF;
    END;

  IF :NEW.TABN<>:OLD.TABN THEN 
      INSERT INTO ZP_AUDIT (
      KOD, ST_TABN, N_TABN, IZM_TYPE, IZM_BY, DATAIZM
      )
      VALUES (trig_seq.NEXTVAL, :OLD.TABN, :NEW.TABN, b, USER, SYSDATE); 
  END IF;
END;



SQL.sql: Ошибка: (16,55): PL/SQL: ORA-00984: column not allowed here
SQL.sql: Ошибка: (13,7): PL/SQL: SQL Statement ignored
...
Рейтинг: 0 / 0
05.05.2017, 21:07
    #39449643
end за end if
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Bastist29,

Переменная b.
...
Рейтинг: 0 / 0
05.05.2017, 22:30
    #39449660
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Eсли ты уберешь этот совершенно ненужный вложенный блок триггер скомпилируется но работать будет не так как ты ожидаешь. :OLD при INSERT всегда NULL так-же как и :NEW при DELETE. Так-что INSERT INTO ZP_AUDIT будет только при UPDATE и то при условии что :OLD и :NEW IS NOT NULL.

SY.
...
Рейтинг: 0 / 0
06.05.2017, 00:51
    #39449669
Bastist29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
SY,

дак я не против NULL, там же напротив будет указано "вставка" или "удаление" и будет ясно. Я одного не понимаю, почему я не могу вставить текст в переменную и вывести его в строку, вот и всё.
...
Рейтинг: 0 / 0
06.05.2017, 00:52
    #39449670
Bastist29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
SY,

Oracle не дает засунуть текст "вставка", "удаление", "обновление" в переменную b. И я не знаю почему.
...
Рейтинг: 0 / 0
06.05.2017, 01:29
    #39449672
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Bastist29,

Убирай переменные из триггера.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
if updating THEN :NEW.IZM_TYPE:='обновление';
      ELSIF deleting THEN :NEW.IZM_TYPE:='удаление';
      ELSIF inserting THEN :NEW.IZM_TYPE:='вставка';
END IF;

  IF :NEW.TABN<>:OLD.TABN THEN 
      INSERT INTO ZP_AUDIT (
      KOD, ST_TABN, N_TABN, IZM_TYPE, IZM_BY, DATAIZM
      )
      VALUES (trig_seq.NEXTVAL, :OLD.TABN, :NEW.TABN, :NEW.IZM_TYPE, USER, SYSDATE); 
  END IF;
...
Рейтинг: 0 / 0
06.05.2017, 03:51
    #39449674
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Relic HunterУбирай переменные из триггера.


Ну скомпилировался триггер. Аудита на INSERT и DELETE все равно не будет (да и с UPDATE возможно тоже не всегда). У TC,исходя из "дак я не против NULL, там же напротив будет указано "вставка" или "удаление" и будет ясно" с NULL тоже напряженка.

SY.
...
Рейтинг: 0 / 0
06.05.2017, 12:40
    #39449731
Bastist29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
SY,

блин..проверил, всё так. И как решить эту проблему?
...
Рейтинг: 0 / 0
06.05.2017, 12:53
    #39449733
Bastist29
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Решил проблему так, вроде работает

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE OR REPLACE TRIGGER trig_obn_audit AFTER UPDATE OR DELETE OR INSERT ON ZP_STUDENTS FOR EACH ROW
BEGIN
        if updating THEN INSERT INTO ZP_AUDIT (
  KOD, ST_TABN, N_TABN, IZM_TYPE, IZM_BY, DATAIZM
)
VALUES (trig_seq.NEXTVAL, :NEW.TABN, :OLD.TABN, 'обновление', USER, SYSDATE);
        ELSIF deleting THEN INSERT INTO ZP_AUDIT (
  KOD, ST_TABN, N_TABN, IZM_TYPE, IZM_BY, DATAIZM
)
VALUES (trig_seq.NEXTVAL,:OLD.TABN , NULL, 'удаление', USER, SYSDATE);
        ELSIF inserting THEN INSERT INTO ZP_AUDIT (
  KOD, ST_TABN, N_TABN, IZM_TYPE, IZM_BY, DATAIZM
)
VALUES (trig_seq.NEXTVAL, NULL, :NEW.TABN, 'вставка', USER, SYSDATE);
        END IF;
END;

Bastist29SY,

блин..проверил, всё так. И как решить эту проблему?
...
Рейтинг: 0 / 0
06.05.2017, 13:28
    #39449748
Гхостик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Bastist29Я одного не понимаю, почему я не могу вставить текст в переменную и вывести его в строку, вот и всё.Ты пытаешься использовать переменную b вне того блока в котором она объявлена, а там её уже не видно.
...
Рейтинг: 0 / 0
06.05.2017, 14:46
    #39449756
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
Bastist29И как решить эту проблему?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE OR REPLACE
  TRIGGER TRIG_OBN_AUDIT
    AFTER UPDATE
       OR DELETE
       OR INSERT
    ON ZP_STUDENTS
    FOR EACH ROW
    BEGIN
        IF INSERTING
          THEN
            INSERT
               INTO ZP_AUDIT
               VALUES(TRIG_DEQ.NEXTVAL,NULL,:NEW.TABN,'вставка',USER,SYSDATE);
        ELSIF DELETING
          THEN
            INSERT
               INTO ZP_AUDIT
               VALUES(TRIG_DEQ.NEXTVAL,:OLD.TABN,NULL,'удаление',USER,SYSDATE);
        ELSIF NOT (:OLD.TABN = :NEW.TABN OR NVL(:OLD.TABN,:NEW.TABN) IS NULL)
          THEN
            INSERT
               INTO ZP_AUDIT
               VALUES(TRIG_DEQ.NEXTVAL,:OLD.TABN,:NEW.TABN,'обновление',USER,SYSDATE);
        END IF;
END;
/



SY.
...
Рейтинг: 0 / 0
09.05.2017, 13:03
    #39450267
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вставка переменной в строку
2 раза ответ дан, а SY (ну и Relic Hunter) все разминаются перед Днем победы
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка переменной в строку / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]