Ошибка задания расписания Oracle в котировках plsql

Я пытаюсь запустить это задание:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => '"TOCBA"."MAANDELIJKS_AFBOEKING"',
            job_type => 'PLSQL_BLOCK',
            job_action => 'DECLARE

V_SALDO_CREDIT NUMBER;
V_SALDO_STUD NUMBER;
V_LIMIET NUMBER;
V_REKENINGNUMMER NUMBER;
V_CRED_ID NUMBER;
V_STU_ID NUMBER;

BEGIN
FOR R IN (SELECT r2.REKENINGNUMMER AS REKNUMMER FROM Rekening r1 INNER JOIN Rekening r2 ON r1.REKENINGNUMMER = R2.REKENINGNUMMER and r1.REKENINGTYPE = 22 and r2.REKENINGTYPE = 41)
LOOP
   SELECT SALDO, BETAALLIMIET, REKENINGNUMMER, REKENINGID INTO V_SALDO_CREDIT, V_LIMIET, V_REKENINGNUMMER, V_CRED_ID FROM REKENING WHERE REKENINGNUMMER = R.REKNUMMER AND REKENINGTYPE = 41;
   SELECT REKENINGID INTO V_STU_ID FROM REKENING WHERE REKENINGNUMMER = R.REKNUMMER AND REKENINGTYPE = 22;
   V_SALDO_STUD := V_LIMIET -V_SALDO_CREDIT;

   UPDATE REKENING SET SALDO = (SELECT BETAALLIMIET FROM REKENING WHERE REKENINGNUMMER = V_REKENINGNUMMER AND REKENINGTYPE = 41) WHERE REKENINGNUMMER = R.REKNUMMER AND REKENINGTYPE = 41;
   UPDATE REKENING SET SALDO = SALDO - V_SALDO_STUD WHERE REKENINGNUMMER = R.REKNUMMER AND REKENINGTYPE = 22;

   INSERT INTO TRANSACTIE(REKENINGID, BEDRAG, DATUM, IBAN_PARTIJ2, OMSCHRIJVING, TYPE) VALUES (V_STU_ID, V_SALDO_STUD,SYSDATE, V_CRED_ID, "Maandelijkse afboeking " || to_char(sysdate, "Month"), "MND");

   INSERT INTO TRANSACTIE(REKENINGID, BEDRAG, DATUM, IBAN_PARTIJ2, OMSCHRIJVING, TYPE) VALUES (V_CRED_ID, V_SALDO_STUD,SYSDATE, V_STU_ID, "Maandelijkse afboeking " || to_char(sysdate, "Month"), "MND");
END LOOP;
END;',
            number_of_arguments => 0,
            start_date => TO_TIMESTAMP_TZ('2018-11-05 14:15:02.000000000 EUROPE/BERLIN','YYYY-MM-DD HH24:MI:SS.FF TZR'),
            repeat_interval => 'FREQ=MINUTELY;BYDAY=MON',
            end_date => NULL,
            enabled => FALSE,
            auto_drop => FALSE,
            comments => 'geen');




    DBMS_SCHEDULER.SET_ATTRIBUTE( 
             name => '"TOCBA"."MAANDELIJKS_AFBOEKING"', 
             attribute => 'store_output', value => TRUE);
    DBMS_SCHEDULER.SET_ATTRIBUTE( 
             name => '"TOCBA"."MAANDELIJKS_AFBOEKING"', 
             attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);




    DBMS_SCHEDULER.enable(
             name => '"TOCBA"."MAANDELIJKS_AFBOEKING"');
END;

Код PL / SQL протестирован и отлично работает без задания. Когда я пытаюсь запустить его вот так, я получаю следующую ошибку:

"ORA-06550: Regel 20, kolom 198:
PL/SQL: ORA-00984: Kolom is hier niet toegestaan..
ORA-06550: Regel 20, kolom 4:
PL/SQL: SQL Statement ignored.
ORA-06550: Regel 22, kolom 198:
PL/SQL: ORA-00984: Kolom is hier niet toegestaan..
ORA-06550: Regel 22, kolom 4:
PL/SQL: SQL Statement ignored.
"

Когда я удаляю два оператора вставки (TRANSACTIES), все работает нормально. Думаю, проблема в кавычках. Кто-нибудь здесь знает, как это решить?

на английском языке ошибка означает: ORA-00984: столбец здесь запрещен

Moudiz 05.11.2018 16:05

Для обозначения строк необходимо использовать одинарные кавычки, а не двойные кавычки.

Boneist 05.11.2018 16:15

Пожалуйста, поместите DBMS_SESSION.SET_NLS('NLS_LANGUAGE', 'american'); в начале блока, тогда сообщения об ошибках должны быть на английском языке. Или запустите ALTER SESSION SET NLS_LANGUAGE = 'american'; перед созданием задания.

Wernfried Domscheit 05.11.2018 17:10

Я бы рекомендовал написать процедуру со всем этим и выполнить эту процедуру с помощью одной команды в планировщике заданий.

Wernfried Domscheit 05.11.2018 17:12

Это правильно, вам нравится выполнять задание каждую минуту, но только по понедельникам?

Wernfried Domscheit 05.11.2018 17:16
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
539
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Да, как вы заметили проблему в одинарных кавычках, сделайте как в приведенном ниже примере:

Одиночные кавычки используются для закрытия значений Varchar (литерал) и даты, двойные кавычки используются для заключения таблицы, столбцов ... Вот почему появляется столбец с ошибкой, недопустимый здесь, с использованием двойных кавычек.

DECLARE

V_SALDO_CREDIT NUMBER;
V_SALDO_STUD NUMBER;
V_LIMIET NUMBER;
V_REKENINGNUMMER NUMBER;
V_CRED_ID NUMBER;
V_STU_ID NUMBER;

BEGIN


   INSERT INTO TRANSACTIE
     (REKENINGID, BEDRAG, DATUM, IBAN_PARTIJ2, OMSCHRIJVING, TYPE)
   VALUES
     (V_STU_ID,
      V_SALDO_STUD,
      SYSDATE,
      V_CRED_ID,
      'Maandelijkse afboeking ' || to_char(sysdate, 'Month'),
      'MND');

END;
Ответ принят как подходящий

Я вижу твою проблему. Проблема заключается в использовании одинарных кавычек внутри больших одинарных кавычек в job_action =>. Каждую кавычку нужно писать дважды (например, вместо ' пишите ''). Это не двойные кавычки, а, скорее, одинарная кавычка, написанная дважды. Таким образом, ваши операторы вставки будут выглядеть следующим образом:

INSERT INTO TRANSACTIE(REKENINGID, BEDRAG, DATUM, IBAN_PARTIJ2, OMSCHRIJVING, TYPE) 
VALUES (V_STU_ID, V_SALDO_STUD,SYSDATE, V_CRED_ID, ''Maandelijkse afboeking '' || to_char(sysdate, ''Month''), ''MND'');

INSERT INTO TRANSACTIE(REKENINGID, BEDRAG, DATUM, IBAN_PARTIJ2, OMSCHRIJVING, TYPE) 
VALUES (V_CRED_ID, V_SALDO_STUD,SYSDATE, V_STU_ID, ''Maandelijkse afboeking '' || to_char(sysdate, ''Month''), ''MND'');

Надеюсь, это поможет.

Вы также можете использовать альтернативный механизм цитирования (Q) для строковых литералов.

https://livesql.oracle.com/apex/livesql/file/content_CIREYU9EA54EOKQ7LAMZKRF6P.html

Другие вопросы по теме