Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Добрый день, возникла необходимость переделки ораклового запроса под SQL . Был вот такой запрос:

SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT CURRENT_TIMESTAMP + NUMTOYMINTERVAL(TO_NUMBER(SUBSTR(TO_CHAR( 120928, '0999999' ), -7, 2)), 'year')AS MIN_DATE
FROM TABLE_NAME );


И он рабочий. Далее решили в поле таблички хранить всё всекундах , и запрос принял вот такой вот вид:



SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP + CAST( 34567 as interval second(12))) AS MIN_DATE
FROM TABLE_NAME ) ;

Здесь ругается на точку с запятой : 312 characters from start of SQL statement Уже всю голову сломал , что я делаю не так?
21 фев 13, 18:41    [13962925]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
Whyte,

Не понял в чем конкретно твоя задача, но
SELECT CURRENT_TIMESTAMP
      ,CURRENT_TIMESTAMP + NUMTODSINTERVAL(34567,'SECOND')
      ,CURRENT_TIMESTAMP + INTERVAL '34567' SECOND
FROM dual
21 фев 13, 19:05    [13963038]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
В том что использовать подобные функции NUMTODSINTERVAL я не могу , так как их там просто напросто нет.
21 фев 13, 19:16    [13963076]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Используется только ANSI SQL.
21 фев 13, 19:23    [13963117]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Whyte
Используется только ANSI SQL.


Чем не устраивает интервал-литерал?
21 фев 13, 19:37    [13963170]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
-2-
Member

Откуда:
Сообщений: 15330
Whyte
Используется только ANSI SQL.
а с чего ты решил, что тип interval изобретение исключительно оракла?
21 фев 13, 19:38    [13963176]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
Whyte,

А что подразумевается под SQL ? ANSI SQL, MSSQL или MySQL ?
21 фев 13, 19:55    [13963274]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
ой, уже увидел
Whyte
Используется только ANSI SQL.
21 фев 13, 19:57    [13963293]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Хорошо, давайте откинем ещё один "лишний" кусочек. Может кто-нибудь объяснить, почему вот эта конструкция некомпилируется? Ведь синтаксис не противоречит ANSI SQL, как обычно в "жабе" полёт нормальный, а при попытке скомпилить таже самая ошибка.

VARCHAR ora_date[10];

SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP)) AS MIN_DATE
FROM TABLE_NAME ) ;
22 фев 13, 09:35    [13964933]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Whyte
Хорошо, давайте откинем ещё один "лишний" кусочек. Может кто-нибудь объяснить, почему вот эта конструкция некомпилируется? Ведь синтаксис не противоречит ANSI SQL, как обычно в "жабе" полёт нормальный, а при попытке скомпилить таже самая ошибка.

VARCHAR ora_date[10];

SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP)) AS MIN_DATE
FROM TABLE_NAME ) ;


1)
лишняя скобка
SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP) AS MIN_DATE
FROM TABLE_NAME ) ;

2) что за фиговый запрос? может тебе нужно просто:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'DD.MM.YYYY' )
FROM FROM TABLE_NAME;
22 фев 13, 09:42    [13964980]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Какая-то заковырка с алиасом.
22 фев 13, 09:50    [13965021]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Ramin Hashimzade
1)
лишняя скобка
[src PLSQL]
SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP) AS MIN_DATE
FROM TABLE_NAME ) ;




Да, здесь дело было в скобке, спасибо. Далее пытался прикрутить интервал:

SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
FROM ( SELECT (CURRENT_TIMESTAMP + INTERVAL '34567' SECOND) AS MIN_DATE
FROM TABLE_NAME ) ;


The interval '34567' SECOND(2,6) is not valid



Попробывал так :

SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP+CAST(RETENTION_PERIOD as interval second(12))) AS MIN_DATE
FROM TABLE_NAME ) ;

Так всё получилось. Спасибо огромное всем за помощь и неравнодушие!!!!
22 фев 13, 10:21    [13965226]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Блин, немного я нетуда глянул , нефига не компилится , проблема всё ещё актуальна.


SELECT TO_CHAR( MIN(MIN_DATE), 'DD.MM.YYYY' )
INTO :ora_date
FROM ( SELECT (CURRENT_TIMESTAMP+CAST(RETENTION_PERIOD as interval second(12))) AS MIN_DATE
FROM TABLE_NAME ) ;
^ (182 characters from start of SQL statement)
22 фев 13, 10:40    [13965329]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
может поведаешь ?
Guest
может ты все-таки поведаешь под какую СУБД ты SQL пишешь?
22 фев 13, 11:19    [13965583]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Есть такая СУБД , разработанная фирмой Tandem , в данный момент её купила HP , используется там SQL/MX , который в своё время создавался для WindowNT . СУБД эта не особо распостранёная , так как используется на весьма узком фронте ,на машинках с MPP архетектурой. Думаю если я пороюсь и найду название , особо делу это не поможет.
22 фев 13, 11:52    [13965833]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Эта?
Guest
Эта что ли?
22 фев 13, 12:12    [13965994]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Да, оно самое
22 фев 13, 12:17    [13966029]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Снова здравствуйте. Путём тырканей стало понятно что конструкцию вида:

SELECT MIN(MIN_DATE)
FROM ( SELECT ( RETENTION_PERIOD) AS MIN_DATE
FROM TABLE_NAME
union
SELECT (RET_START) AS MIN_DATE
FROM TABLE_NAME );

компилятор воспринимать не хочет. Проблема именно в альясе. Возник вопрос ,как её переделать каким-нибудь другим способом? Можно разбить на 2 запроса, тогда как коректней сравнить между собой результаты?

SELECT CAST (RETENTION_PERIOD as interval second(12))
INTO :ora_date
FROM TABLE_NAME ;


SELECTTIMESTAMP + CAST(RET_START as interval second(12))
INTO :ora_date_1
FROM TABLE_NAME ;

Тоесть что меньше ora_date или ora_date_1
25 фев 13, 09:47    [13974663]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
Whyte
компилятор воспринимать не хочет. Проблема именно в альясе. Возник вопрос ,как её переделать каким-нибудь другим способом? Можно разбить на 2 запроса, тогда как коректней сравнить между собой результаты?

здесь шаманы не сидят, приведи текст ошибки, запрос синтаксически правильный если такие объекты есть, то должен работать!
25 фев 13, 10:09    [13974825]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
123йй
Member

Откуда:
Сообщений: 1637
Whyte,

откройте для себя ф-цию least
25 фев 13, 10:39    [13975005]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
Ramin Hashimzade
Whyte
компилятор воспринимать не хочет. Проблема именно в альясе. Возник вопрос ,как её переделать каким-нибудь другим способом? Можно разбить на 2 запроса, тогда как коректней сравнить между собой результаты?

здесь шаманы не сидят, приведи текст ошибки, запрос синтаксически правильный если такие объекты есть, то должен работать!



characters from start of SQL statement . То что запрос синтаксически верен, это я знаю. проблема в том что данный вид компилятора его не кушает.
25 фев 13, 11:48    [13975393]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
123йй
Whyte,

откройте для себя ф-цию least



Спасибо, но данная функция используется в PL/SQL. Я не могу её использовать у меня её просто нету.
25 фев 13, 11:50    [13975406]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
stax..
Guest
Whyte,
SQL> select least(1,2,3,-1) l from dual;

         L
----------
        -1

SQL>


........
stax
25 фев 13, 11:56    [13975474]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Whyte
Member

Откуда:
Сообщений: 27
stax..
Whyte,
SQL> select least(1,2,3,-1) l from dual;

         L
----------
        -1

SQL>


........
stax



Спасибо, но данная функция используется в PL/SQL. Я не могу её использовать у меня её просто нету.
25 фев 13, 12:02    [13975517]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
123йй
Member

Откуда:
Сообщений: 1637
Whyte,

так каким образом ваш вопрос относится к oracle ?
25 фев 13, 12:03    [13975526]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить