powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка переменной в строку
12 сообщений из 12, страница 1 из 1
Вставка переменной в строку
    #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
Вставка переменной в строку
    #39449643
end за end if
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bastist29,

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

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

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

Oracle не дает засунуть текст "вставка", "удаление", "обновление" в переменную b. И я не знаю почему.
...
Рейтинг: 0 / 0
Вставка переменной в строку
    #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
Вставка переменной в строку
    #39449674
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterУбирай переменные из триггера.


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

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

блин..проверил, всё так. И как решить эту проблему?
...
Рейтинг: 0 / 0
Вставка переменной в строку
    #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
Вставка переменной в строку
    #39449748
Гхостик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bastist29Я одного не понимаю, почему я не могу вставить текст в переменную и вывести его в строку, вот и всё.Ты пытаешься использовать переменную b вне того блока в котором она объявлена, а там её уже не видно.
...
Рейтинг: 0 / 0
Вставка переменной в строку
    #39449756
Фотография 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
Вставка переменной в строку
    #39450267
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 раза ответ дан, а SY (ну и Relic Hunter) все разминаются перед Днем победы
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка переменной в строку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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