Хобрук: Ваш путь к мастерству в программировании

Ошибка увеличения даты и времени в Oracle/PLSQL

Здесь я использую цикл от StartDateTime до EndDatetime и добавляю 1 час на каждой итерации. Все работает в цикле. Но проблема в запросе на вставку. Пожалуйста, проверьте запрос на вставку.

declare
StartDateTime   TIMESTAMP :=to_date( '2017-01-01 00:00:00','yyyy-mm-dd       
hh24:mi:ss');
EndDateTime   TIMESTAMP :=to_date( '2017-12-31 00:00:00','yyyy-mm-dd 
hh24:mi:ss');
dateti TIMESTAMP;
dateti2 TIMESTAMP;
StartDateTime1 TIMESTAMP;
sub INTEGER;
semester Number;
begin

sub:=( CAST( EndDateTime AS DATE ) - CAST( StartDateTime AS DATE ) )  ;

FOR i IN  0 .. 1
LOOP
StartDateTime1:=StartDateTime+i;
for idx in 0..2 loop
dateti:=to_date(StartDateTime1+(idx/24.0),'yyyy-mm-dd hh24:mi:ss');
dateti2:=to_date(StartDateTime1+((idx+1)/24.0)+ interval '-1' second,'yyyy-
mm-dd hh24:mi:ss');

      case 
        when to_number(to_char(dateti ,'Q'))>6 then semester:=to_number(2);
       else semester:=to_number(1);
        end case;

Проблема начинается отсюда в запросе на вставку. В нем говорится, что найден нечисловой символ. Тип данных DateSlotStart и DateSlotEnd - это Timestamp. Пожалуйста, посмотрите изображение и посоветуйте, что мне следует изменить?

введите здесь описание изображения

  insert into DimDate1(DateSlotStart,DateSlotEnd,
  "Date",SlotName,MonthName,MonthNumberOfYear,Quarter,Year,Semester) values 
   (to_date(dateti ,'yyyy-mm-dd hh24:mi:ss') ,to_date(dateti2 ,'yyyy-mm-dd 
    hh24:mi:ss') ,
   to_date(dateti ,'yyyy-mm-dd'),to_char(dateti ,'hh24:mi' )||' To 
   '||to_char(dateti2 ,'hh24:mi' ),to_char(dateti 
    ,'Month'),to_number(to_char(dateti ,'mm')),to_number(to_char(dateti ,'Q')),
  to_number(to_char(dateti ,'YYYY')) , semester);

end loop;


   END LOOP;
  end;
/

Также проверьте этот введите здесь описание изображения


  • Укажите DDL, который вы использовали для создания таблицы DimDate1. 05.11.2017
  • Я добавил DDL @KaushikNayak 05.11.2017
  • Под DDL я имел в виду create table DimDate1 statement . Запустите этот запрос и дайте мне знать результат. select dbms_metadata.GET_DDL('TABLE','DIMDATE1') FROM DUAL; 05.11.2017
  • [Err] ORA-31603: объект DIMDATE1 типа TABLE не найден в схеме MY_ERP_LOCAL_DB ORA-06512: в SYS.DBMS_METADATA, строка 1546 ORA-06512: в SYS.DBMS_METADATA, строка 1583 ORA-06512: в SYS.DBMS_METADATA, строка 1901 ORA-06512: в SYS.DBMS_METADATA, строка 2792 ORA-06512: в SYS.DBMS_METADATA, строка 4333 ORA-06512: в строке 1 05.11.2017
  • не найдено в схеме MY_ERP_LOCAL_DB. Что мне теперь делать? 05.11.2017
  • он создан по другой схеме? 05.11.2017
  • Насколько я знаю, это не так. Есть ли способ проверить это? 05.11.2017
  • ХОРОШО. просто опишите таблицу и вставьте вывод. Этого было бы достаточно. Вставьте изображение скрипта output.not 05.11.2017
  • Давайте продолжим обсуждение в чате. 05.11.2017
  • CREATE TABLE WH_ZOO.DIMDATE1 (DATESLOTKEY NUMBER(10) NOT NULL, DATESLOTSTART TIMESTAMP(3) NOT NULL, DATESLOTEND TIMESTAMP(3) NOT NULL, Date DATE NOT NULL, SLOTNAME VARCHAR2(100 BYTE) NOT NULL, MONTHNAME NVARCHAR2(10) NOT NULL NULL , MONTHNUMBEROFEAR NUMBER(3) NOT NULL , QUARTER NUMBER(3) NOT NULL , YEAR NUMBER(5) NOT NULL , SEMESTRE NUMBER(3) NOT NULL ) 05.11.2017
  • СОЗДАЙТЕ ИЛИ ЗАМЕНИТЕ ТРИГГЕР WH_ZOO.DIMDATE_SEQ_TR1 ПЕРЕД ВСТАВКОЙ В WH_ZOO.DIMDATE1 ССЫЛКА НА СТАРЫЙ КАК СТАРЫЙ НОВЫЙ КАК НОВЫЙ ДЛЯ КАЖДОЙ СТРОКИ, КОГДА (NEW.DateSlotKey IS NULL) НАЧНИТЕ ВЫБРАТЬ DimDate_seq.NEXTVAL INTO:NEW.DateSlotKey FROM DUAL; КОНЕЦ;; 05.11.2017

Ответы:


1

Проблема в том, что вы пытаетесь преобразовать TIMESTAMP в дату, где это не требуется. И всегда лучше использовать CAST, когда вам нужно преобразовать его в DATE. Замените свою вставку на эту. Он должен работать.

   INSERT INTO dimdate1 (
        dateslotstart,
        dateslotend,
        "Date",
        slotname,
        monthname,
        monthnumberofyear,
        quarter,
        year,
        semester
    ) VALUES (
        dateti,
        dateti2,
        CAST (dateti AS DATE),
        TO_CHAR(dateti,'hh24:mi')
        || ' To '
        || TO_CHAR(dateti2,'hh24:mi'),
        TO_CHAR(dateti,'Month'),
        to_number(TO_CHAR(dateti,'mm') ),
        to_number(TO_CHAR(dateti,'Q') ),
        to_number(TO_CHAR(dateti,'YYYY') ),
        semester
    );
05.11.2017
  • Я получаю сообщение об ошибке [Err] ORA-20000: ORU-10027: переполнение буфера, ограничение 20000 байт. 05.11.2017
  • Это не связано с вставкой или преобразованием. Вы должны проверить, не попадаете ли вы в бесконечный цикл с вашим кодом PL/SQL. 05.11.2017
  • Хорошо, я проверяю 05.11.2017
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..