powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / временной промежуток
24 сообщений из 49, страница 2 из 2
временной промежуток
    #36399117
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagitмне надо так что бы и в запросе выходило

Зачем ? Если для проверки - Вам уже показали, как проверить подобный запрос в SQL*Plus, чтобы увидеть время у дат, а не только знать, что оно там есть - используя to_char() и/или alter session set nls_date_format. Если этот запрос формирует данные отчёта в APEX, то без всяких to_char() выбирайте нужные даты, а их отображение настраивайте там, где я уже сказал.
...
Рейтинг: 0 / 0
временной промежуток
    #36399143
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer
Зачем ? Если для проверки - Вам уже показали, как проверить подобный запрос в SQL*Plus, чтобы увидеть время у дат, а не только знать, что оно там есть - используя to_char() и/или alter session set nls_date_format. Если этот запрос формирует данные отчёта в APEX, то без всяких to_char() выбирайте нужные даты, а их отображение настраивайте там, где я уже сказал.
кажется я понял просто просматривать надо отчет в самом рапорте который находиться в приложении а запрос давать необязательно рапорт уже построен на основе запроса
просто приложение пустить по локальной сети и кому надо пусть то и смотрит
Только вот как рапорт этот на печать выдавать скажем в ms word , но уже др тема

Спасибо огромное
...
Рейтинг: 0 / 0
временной промежуток
    #36401459
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток
помогите пожалуйста разобраться со скриптом
По моей ржавой логике должно быть так
проверяем поле n_open на промежуток от 8:00 до 20 :00 и делаем запрос на вывод данных
затем проверяем это же поле на промежуток второй смены т.е. от 20 :00 до 8:00 и повторяем этот же запрос
По логике временной промежуток должен указывать на 1 или 2 смену
Пишу вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Begin
if :p3_n_open > sysdate '8:00' and :p3_n_open < sysdate '20:00'
then
'select "N_ID",'|| 
'"N_EKG",'||
'"N_CKAD",'||
'to_char(N_OPEN,'dd.mm.yyyy hh24:mi')"N_OPEN",'||
'"N_CLOSE"'||
'from "#OWNER#"."NARYAD_EKG"'; 
end if;

if :p3_n_open > sysdate '20:00' and :p3_n_open < sysdate+ 1  '8:00'
then
'select "N_ID",'|| 
'"N_EKG",'||
'"N_CKAD",'||
'to_char(N_OPEN,'dd.mm.yyyy hh24:mi')"N_OPEN",'||
'"N_CLOSE"'||
'from "#OWNER#"."NARYAD_EKG"'; 
end if;
ф он мне
ORA-06550: line 3, column 25: PLS-00103: Encountered the symbol "8:00" when expecting one of the following: . ( * @ % & - + / at mod remainder rem then and or || multiset The symbol "(" was substituted for "8:00" to continue. ORA-06550: line 3, column 57: PLS-00103: Encountered the symbol "20:00" when expecting one of the following: . ( ) , * @ % & - + / at mod remainder rem and or using || multiset
как быть

Помогите с запросом
...
Рейтинг: 0 / 0
временной промежуток
    #36401612
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APEX позволяет в источнике данных приложения указывать либо SQL-запрос, либо PL/SQL-блок, возвращающий строку с запросом. Раз Вы решили использовать второй вариант, то Вам не хватает слова RETURN перед соответствующими строками запросов. :)

PS: Господа модераторы, ещё раз скажу - эта тема больше относится к подфоруму по APEX.
-------------------------------------------------------
When I say "RTFM" or "STFF" or "STFW",
the third letter means "Following" or "Fine"...
...
Рейтинг: 0 / 0
временной промежуток
    #36401625
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagit,

кстати, одинарные кавычки в строке представляются двумя подряд. Пример:

Код: plaintext
'to_date(''01.01.2010'', ''dd.mm.yyyy'')'


Модератор: Тема перенесена из форума "Oracle".
...
Рейтинг: 0 / 0
временной промежуток
    #36401740
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerAPEX позволяет в источнике данных приложения указывать либо SQL-запрос, либо PL/SQL-блок, возвращающий строку с запросом. Раз Вы решили использовать второй вариант, то Вам не хватает слова RETURN перед соответствующими строками запросов. :)
То есть написать вот так надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Begin
if :p3_n_open > sysdate "8:00" & :p3_n_open < sysdate "20:00" then
'select "N_ID",' ||
'"N_EKG",' ||
'"N_CKAD",' ||
'to_char(N_OPEN,'dd.mm.yyyy hh24:mi')"N_OPEN",' ||
'"N_CLOSE"' ||
'from "#OWNER#"."NARYAD_EKG"'; 
end if;
return N_OPEN;
if :p3_n_open > sysdate '' 20 : 00 '' & :p3_n_open < sysdate+ 1  '' 8 : 00 ''
then
'select "N_ID",'
'"N_EKG",'
'"N_CKAD",'
'to_char(N_OPEN,'dd.mm.yyyy hh24:mi')"N_OPEN",'
'"N_CLOSE"'
'from "#OWNER#"."NARYAD_EKG"'; 
end if;
return N_OPEN;
end;
...
Рейтинг: 0 / 0
временной промежуток
    #36401756
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SagitsuPPLerAPEX позволяет в источнике данных приложения указывать либо SQL-запрос, либо PL/SQL-блок, возвращающий строку с запросом. Раз Вы решили использовать второй вариант, то Вам не хватает слова RETURN перед соответствующими строками запросов. :)
То есть написать вот так надо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Begin
if :p3_n_open > sysdate "8:00" & :p3_n_open < sysdate "20:00" then
'select "N_ID",' ||
'"N_EKG",' ||
'"N_CKAD",' ||
'to_char(N_OPEN,'dd.mm.yyyy hh24:mi')"N_OPEN",' ||
'"N_CLOSE"' ||
'from "#OWNER#"."NARYAD_EKG"'; 
end if;
return N_OPEN;
if :p3_n_open > sysdate '' 20 : 00 '' & :p3_n_open < sysdate+ 1  '' 8 : 00 ''
then
'select "N_ID",'
'"N_EKG",'
'"N_CKAD",'
'to_char(N_OPEN,'dd.mm.yyyy hh24:mi')"N_OPEN",'
'"N_CLOSE"'
'from "#OWNER#"."NARYAD_EKG"'; 
end if;
return N_OPEN;
end;
нет не работает
прописал вот так тоже не работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declere
q varchar2( 125458 );

begin
q := 'select "N_ID",' ||
'"N_EKG",' ||
'"N_CKAD",' ||
'"N_OPEN",' ||
'"N_CLOSE"' ||
'from "#OWNER#"."NARYAD_EKG"';
if :p3_n_open > sysdate > '8:00' and :p3_n_open < sysdate '20:00' then
returt q;
end if;

if :p3_n_open > sysdate '' 20 : 00 '' and :p3_n_open < sysdate+ 1  '' 8 : 00 ''
then
return q;
end if;
end;
...
Рейтинг: 0 / 0
временной промежуток
    #36401759
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
говорит
Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA-00900: invalid SQL statement
...
Рейтинг: 0 / 0
временной промежуток
    #36402517
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagitнет не работает
прописал вот так тоже не работает
Код: plaintext
1.
2.
3.
4.
declere
...
returt q;
...
if :p3_n_open > sysdate '' 20 : 00 '' and :p3_n_open < sysdate+ 1  '' 8 : 00 ''


0. У Вас есть банальные синтаксические ошибки. :)
1. PL/SQL-блок в Source отчёта всегда должен возвращать строку запроса.
2. Мне почему-то кажется, что Вам нужен просто SQL-запрос. :) Что-то вроде:

Код: plaintext
1.
2.
3.
select ...
  from ...
 where ...
   and :p3_n_open < trunc(sysdate) +  1  +  8  /  24  and :p3_n_open > trunc(sysdate) +  8  /  24 
...
Рейтинг: 0 / 0
временной промежуток
    #36402581
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
поясните только пожалуйста , что означает 8/24
...
Рейтинг: 0 / 0
временной промежуток
    #36402595
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagit,

при добавлении выражения типа NUMBER к выражению типа DATE число неявно приводится к типу DAY TO SECOND INTERVAL, переводясь в дни. То есть, sysdate + 1 / 24 => sysdate + numtodsinterval(1 / 24, 'DAY') => текущая дата и время плюс один час.

8/24 = 8 часов.
...
Рейтинг: 0 / 0
временной промежуток
    #36402605
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerSagit,

при добавлении выражения типа NUMBER к выражению типа DATE число неявно приводится к типу DAY TO SECOND INTERVAL, переводясь в дни. То есть, sysdate + 1 / 24 => sysdate + numtodsinterval(1 / 24, 'DAY') => текущая дата и время плюс один час.

8/24 = 8 часов.Спасибо
как я понял trunc(sysdate) + 1 + 8 / 24 означает 20 00, а trunc(sysdate) + 8 / 24 8 00
Верно я понял?
...
Рейтинг: 0 / 0
временной промежуток
    #36402611
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagitкак я понял trunc(sysdate) + 1 + 8 / 24 означает 20 00, ...
Верно я понял?

Нет. Это 8 часов утра (+ 8 / 24) следующего дня (+ 1).
...
Рейтинг: 0 / 0
временной промежуток
    #36402615
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer

Код: plaintext
1.
2.
3.
select ...
  from ...
 where ...
   and :p3_n_open < trunc(sysdate) +  1  +  8  /  24  and :p3_n_open > trunc(sysdate) +  8  /  24 

Я прописал вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 select "N_ID",
"N_EKG",
"N_CKAD",
"N_OPEN",
"N_CLOSE"
from "#OWNER#"."NARYAD_EKG"
where :p3_n_open < trunc(sysdate) +  1  +  8  /  24  and :p3_n_open > trunc(sysdate) +  8  /  24 
or :p3_n_open > trunc(sysdate) +  1  +  8  /  24  and :p3_n_open < trunc(sysdate) +  8  /  24 
результатом явилось все данные которые я дал когда было прописано
Код: plaintext
1.
where trunc ("N_open")>=trunc(sysdate)
...
Рейтинг: 0 / 0
временной промежуток
    #36402619
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagit,

Вы так и не написали здесь, какие данные Вы хотите получить запросом. Пока что Ваш последний запрос выбирает все данные, когда :p3_n_open находится между 8 утра сегодня и 8 утра завтра.
...
Рейтинг: 0 / 0
временной промежуток
    #36402622
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerSagit,

Вы так и не написали здесь, какие данные Вы хотите получить запросом. Пока что Ваш последний запрос
выбирает все данные, когда :p3_n_open находится между 8 утра сегодня и 8 утра завтра.
Мне надо так что бы выбирались данные между 8 утра сегодня до 8 вечера сегодня, а после того как наступят 8 вечера сегодня до 8 утра завтра
...
Рейтинг: 0 / 0
временной промежуток
    #36402637
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SagitМне надо так что бы выбирались данные между 8 утра сегодня до 8 вечера сегодня, а после того как наступят 8 вечера сегодня до 8 утра завтра

Какое поле в таблице хранит время, чтобы по нему выбирать строки?
...
Рейтинг: 0 / 0
временной промежуток
    #36402652
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer, в таблице времени нет так как я не смог сделать так что бы оно там тож было
я настроил только в приложении, дал dd.mm.yyyy hh24ni в поле настройки поля dati
а так выборка идет по полю dati
...
Рейтинг: 0 / 0
временной промежуток
    #36402664
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagit,

если Вы хотите выбрать данные за определённый промежуток времени, Вам нужно знать, к какому времени относится конкретная запись. Без столбца типа DATE или TIMESTAMP в таблице не обойтись.

Это основы теории даже не знаю чего. :) Информации, наверно. Без места для данных - а следовательно, и самих данных - невозможно использовать критерий по этим данным для отбора информации. Нет поля с датой и временем появления записи - нет информации о дате и времени появления записи - нельзя накладывать условия на дату и время появления записи.

Пересмотрите дизайн, добавьте соответствующее поле в таблицу и используйте его в запросах.
...
Рейтинг: 0 / 0
временной промежуток
    #36402702
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerSagit,

если Вы хотите выбрать данные за определённый промежуток времени, Вам нужно знать, к какому времени относится конкретная запись. Без столбца типа DATE или TIMESTAMP в таблице не обойтись.

Это основы теории даже не знаю чего. :) Информации, наверно. Без места для данных - а следовательно, и самих данных - невозможно использовать критерий по этим данным для отбора информации. Нет поля с датой и временем появления записи - нет информации о дате и времени появления записи - нельзя накладывать условия на дату и время появления записи.

Пересмотрите дизайн, добавьте соответствующее поле в таблицу и используйте его в запросах.простите вы меня не поняли у меня поле dati типа date в самой таблице там время не указано а вот в приложении время показывает, а вот что хранит поле типа TIMESTAMP ?
если время то как его заполнять?
...
Рейтинг: 0 / 0
временной промежуток
    #36402716
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagitпростите вы меня не поняли у меня поле dati типа date в самой таблице там время не указано а вот в приложении время показывает

Вам ведь объясняли целую страницу, чем значение даты в таблице отличается от представления... Перечитайте, что ли.

А Ваш запрос должен выглядеть приблизительно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select ...
  from ...
 where ...
   and ((sysdate < trunc(sysdate) +  8  /  24  and dati >= trunc(sysdate) -  4  /  24  and dati < trunc(sysdate) +  8  /  24 )
         or
         (sysdate >= trunc(sysdate) +  8  /  24  and sysdate < trunc(sysdate) +  20  /  24  and dati >= trunc(sysdate) +  8  /  24  and dati < trunc(sysdate) +  20  /  24 )
         or
         (sysdate >= trunc(sysdate) +  20  /  24  and dati >= trunc(sysdate) +  20  /  24  and dati < trunc(sysdate) +  1  +  8  /  24 ))

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

стока (sysdate < trunc(sysdate) + 8/24 - контролирует врямя суток ло 8 00 утра
стоки "N_OPEN" >= trunc(sysdate) - 4/24
and "N_OPEN" < trunc(sysdate) + 8/24) я не понял до сих пор для чего
стоки (sysdate >= trunc(sysdate) + 8/24
and sysdate < trunc(sysdate) + 20/24 контролируют время в пределах 8 00 сегодня и 20 00 сегодня
а стоки "N_OPEN" >= trunc(sysdate) + 8/24
and "N_OPEN" < trunc(sysdate) + 20/24) распределяют данные поля в указном промежутке времени
строка (sysdate >= trunc(sysdate) + 20/24 контролирует время с 20 00 сегодня
я думаю тут не хватает стоки (sysdate >= trunc(sysdate)+ 1 + 8/24,
а строки "N_OPEN" >= trunc(sysdate) + 20/24
and "N_OPEN" < trunc(sysdate) + 1 + 8/24) распределяют данные поля в указном промежутке времени

Я правильно понял или нет

p.s. Посоветуйте какую нибудь книгу по oracle pl\sql для начинающих мне ужасно хочется научиться составлять такие процедуры и методы и легко ориентироваться в оракле и писать приложения под это наимощьнейшее СУБД (желательно книгу на русском языке)
У меня тут есть одна
Коннор МакДональд, Хаим Кац, Кристофер Бек,
Джоел Кальман, Дэвид Нокс

Oracle PL/SQL для
профессионалов:
практические решения

но она слишком сложная пока для меня мне азы пока нужны
если Вас не затруднит подскажите книгу для начинающего хотябы автора что бы не заказывать а скачать бесплатно можно было


Еще раз огромное спасибо
...
Рейтинг: 0 / 0
временной промежуток
    #36413385
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sagit,

0. Мы разбиваем возможное время на три интервала: до 8-ми утра сегодня, между 8-мью утра и вечера сегодня, после 8 вечера сегодня. В зависимости от того, в какой интервал попадает текущее время, выводим данные за смену 20:00 вчера-8:00, 8:00-20:00, 20:00-8:00 завтра.
1. По SQL вот хорошая книга: "Секреты Oracle SQL" от Мишры и Бьюли. По PL/SQL - "Oracle PL/SQL для профессионалов", Фейерштейн и Прибыл. По концепциям того, как и что работает - "Oracle для профессионалов", Том Кайт + собственно, Concepts .
2. Я бы Вам ещё рекомендовал что-нибудь по алгоритмам почитать. Вирт, Дейкстра, Сэджвик, Скиена... Д. Кнута советовать не буду, для него нужна масса времени, желания и знания высшей математики. :)
...
Рейтинг: 0 / 0
временной промежуток
    #36413587
Sagit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLerSagit,

0. Мы разбиваем возможное время на три интервала: до 8-ми утра сегодня, между 8-мью утра и вечера сегодня, после 8 вечера сегодня. В зависимости от того, в какой интервал попадает текущее время, выводим данные за смену 20:00 вчера-8:00, 8:00-20:00, 20:00-8:00 завтра.
1. По SQL вот хорошая книга: "Секреты Oracle SQL" от Мишры и Бьюли. По PL/SQL - "Oracle PL/SQL для профессионалов", Фейерштейн и Прибыл. По концепциям того, как и что работает - "Oracle для профессионалов", Том Кайт + собственно, Concepts .
2. Я бы Вам ещё рекомендовал что-нибудь по алгоритмам почитать. Вирт, Дейкстра, Сэджвик, Скиена... Д. Кнута советовать не буду, для него нужна масса времени, желания и знания высшей математики. :)

Спасибо огромное
уже скачал только что эти книги
буду внимательно читать и практиковаться
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / временной промежуток
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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