Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 December 17

O

Oleg T in SqlCom.ru - Стиль жизни SQL
В Oracle не силен. лучше в профильный чат сходить или почитать доку по WHILE
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
begin

start_date='01.01.2017'

end_date='01.01.2020'

кажется с переменными надо иначе работать. типа:
DECLARE @start_date DATE
SET
@start_date = TO_DATE('01.01.2020')
Ну
это так в хелпах написано, бегло поглядел.
источник

ML

Maria Likulina in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
всем привет. Подскажите пожалуйста
что то не инсертится (
begin

start_date='01.01.2017'

end_date='01.01.2020'



   while  start_date<end_date

   loop

       SELECT( pledger.rsaldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')-1) as ledger_rsaldo_start,

               pledger.saldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')-1) as ledger_saldo_start,

               pledger.rsaldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')) as ledger_rsaldo_end,

               pledger.saldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')) as ledger_saldo_end,

               FROM my_view)

               INSERT INTO ledger_4070 VALUES (ledger_rsaldo_start,ledger_saldo_start,ledger_rsaldo_end,ledger_saldo_end)

       start_date=add_month(start_date,1)      

   end loop

end;
ну вот сделал табличку, в цикле вычисляю значение code  через функцию pledger, сосчитанные значения таким образом хочу запихнуть в именованные столбцы новой таблицы
declare
   start_date date := to_date('01.01.2017', 'dd.mm.yyyy');

   end_date date := to_date('01.01.2020', 'dd.mm.yyyy');
   
begin

   while  start_date<end_date

   loop

       
       
       start_date := start_date + NUMTODSINTERVAL(30, 'DAY') ;

   end loop;

end;
источник

ML

Maria Likulina in SqlCom.ru - Стиль жизни SQL
Maria Likulina
declare
   start_date date := to_date('01.01.2017', 'dd.mm.yyyy');

   end_date date := to_date('01.01.2020', 'dd.mm.yyyy');
   
begin

   while  start_date<end_date

   loop

       
       
       start_date := start_date + NUMTODSINTERVAL(30, 'DAY') ;

   end loop;

end;
если оракл
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Maria Likulina
declare
   start_date date := to_date('01.01.2017', 'dd.mm.yyyy');

   end_date date := to_date('01.01.2020', 'dd.mm.yyyy');
   
begin

   while  start_date<end_date

   loop

       
       
       start_date := start_date + NUMTODSINTERVAL(30, 'DAY') ;

   end loop;

end;
а если 31, а если 28? а если 29
источник

ML

Maria Likulina in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
а если 31, а если 28? а если 29
можно месяц NUMTOYMINTERVAL(1, 'MONTH')
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Maria Likulina
можно месяц NUMTOYMINTERVAL(1, 'MONTH')
а чем это плохо start_date=add_month(start_date,1)
источник

ML

Maria Likulina in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
а чем это плохо start_date=add_month(start_date,1)
насколько я помню, это не работает в скрипте PL/SQL
источник

ML

Maria Likulina in SqlCom.ru - Стиль жизни SQL
ошиблась, поняла, чуть подправьте:
add_months(start_date,1)
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Maria Likulina
насколько я помню, это не работает в скрипте PL/SQL
ок
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
всем привет. Подскажите пожалуйста
что то не инсертится (
begin

start_date='01.01.2017'

end_date='01.01.2020'



   while  start_date<end_date

   loop

       SELECT( pledger.rsaldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')-1) as ledger_rsaldo_start,

               pledger.saldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')-1) as ledger_saldo_start,

               pledger.rsaldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')) as ledger_rsaldo_end,

               pledger.saldo(header, code , currency, to_date(start_date,'dd.mm.yyyy')) as ledger_saldo_end,

               FROM my_view)

               INSERT INTO ledger_4070 VALUES (ledger_rsaldo_start,ledger_saldo_start,ledger_rsaldo_end,ledger_saldo_end)

       start_date=add_month(start_date,1)      

   end loop

end;
ну вот сделал табличку, в цикле вычисляю значение code  через функцию pledger, сосчитанные значения таким образом хочу запихнуть в именованные столбцы новой таблицы
на from ругается(((
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
на from ругается(((
SELECT 1 FROM my_view работает?
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
на from ругается(((
мне кажется в запросе внутри цикла ты не то делаешь. ты какбэ хочешь сделать INSERT-SELECT, но делаешь это как будто в перменные запихиваешь в SELECT, хотя этого не происходит - ты тупо селектишь из вьюхи.  INSERT-SELECT делается неапример так:
INSERT INTO tbl_temp2 (fld_id)
 SELECT tbl_temp1.fld_order_id
 FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Oleg T
SELECT 1 FROM my_view работает?
Вьюха работает
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Oleg T
мне кажется в запросе внутри цикла ты не то делаешь. ты какбэ хочешь сделать INSERT-SELECT, но делаешь это как будто в перменные запихиваешь в SELECT, хотя этого не происходит - ты тупо селектишь из вьюхи.  INSERT-SELECT делается неапример так:
INSERT INTO tbl_temp2 (fld_id)
 SELECT tbl_temp1.fld_order_id
 FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
Что то ты меня запутал тут
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
Вьюха работает
Убери запятую в последнем выражении перед from. Но один черт тебе надо переписать запрос в стиле Insert- select. У тебя щас вместо вставки ты получишь выборку, а вставка просто упадет с ошибкой типа хз что вставлять
источник

А

Айрат Каримов... in SqlCom.ru - Стиль жизни SQL
Функции рассчитывают значения,  в эти функции кидаются значения из вьюхи,  потом кидаем эти посчитанные значения в новую таблицу
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Айрат Каримов
Функции рассчитывают значения,  в эти функции кидаются значения из вьюхи,  потом кидаем эти посчитанные значения в новую таблицу
Они сначала в переменные должны попасть тогда, а не на экран выводиться. У тебя нет переменных
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Но лушче сделать как я писал ранее. Прочти уже доку, не ленись
источник

O

Oleg T in SqlCom.ru - Стиль жизни SQL
Select a as b from tbl не помещает a  в переменную b, а выводит на экран с именем b.
источник