WebHU - Programozási kérdések és válaszok

Megpróbálok egy változó automatikus növekményt (+1) beállítani a tárolt eljáráson belül, amely már rendelkezik kurzorral

Megpróbálok létrehozni egy növekményes beszúrási értéket a HR_NUM nevű oszlopba való beszúráshoz. Ennek a HR_NUM értéknek minden alkalommal növekednie kell, amikor olyan új bejegyzést hozok létre, amely megfelel a kurzoromban lévő csoportosítási feltételeknek (c1). Nem szeretném a kurzoromba helyezni, mert nem akarok ezen a számon csoportosítani, mivel ez elrontja a csoportosítást. Köszönöm, és kérem, jelezze, ha valamit hiányolok, és/vagy tudok valamit pontosítani/szerkeszteni.

Tudom, hogy az oracle for ciklus szintaxisa a következő:

set serveroutput on;
DECLARE
    date_test date;
BEGIN
    select sysdate into date_test from dual;
FOR i in 1..24 
    LOOP
        DBMS_OUTPUT.PUT_LINE(date_test + i/24);
    END LOOP;
END;

Az alábbiakban látható a jelenlegi plsql kódom, amelyben egy ciklust próbálok beépíteni a HR_NUM: automatikus növeléséhez (a HR_NUM változó a BOLD-ban)

create or replace PROCEDURE SUM_HOURLY IS
  Cursor c1 is
select 
sum(value_tx) AS sum_of_Values
, ff.form_field_tx
, ff.form_field_id
, (CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END)     as HR_CONVERTED_PST
, to_char(to_date((CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END),  'DD-MM-YY hh24:mi:ss'), 'dddyyyy') as DATA_DATE
, v.DATA_CODE
from value v
join submission_value sv on v.value_id = sv.value_id
join form_field ff on sv.form_field_id = ff.form_field_id
group by (CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END), 
         to_char(to_date((CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END),  'DD-MM-YY hh24:mi:ss'), 'dddyyyy'), ff.form_field_id, ff.form_field_tx, v.data_code,;
-----------
  l_var c1%ROWTYPE;
  v_value_id value.value_id%type;
-----------
BEGIN
  OPEN c1;
LOOP
  FETCH c1 into l_var;
  EXIT WHEN c1%NOTFOUND;
        insert into value (value_id, energy_product_id, data_source_id, unit_cd, value_tx, utc_offset, data_date, hr_utc, hr, hr_num, data_code, create_dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt)
              values (null, '109', '269', 'Mwh', l_var.sum_of_values, 0, l_var.data_date, 'UTC0', l_var.HR_CONVERTED_PST, **incremental_Variable(?)**, 'NA', sysdate, '1', null, null, null, null)
END LOOP;
  CLOSE c1;
END SUM_HOURLY;
10.04.2018

  • Nem használhatsz egy sorozatot? 11.04.2018

Válaszok:


1

Ez nem egy egyszerű INSERT utasítás? Sokat takarít meg a kódolási erőfeszítéseken:

insert into value (value_id, energy_product_id, data_source_id, unit_cd, value_tx, utc_offset, data_date, hr_utc, hr, hr_num, data_code, create_dt, create_user_id, modify_dt, modify_user_id, effective_dt, inactive_dt)
select null, '109', '269', 'Mwh', sum_of_values, 0, data_date, 'UTC0', HR_CONVERTED_PST, rownum, 'NA', sysdate, '1', null, null, null, null)
from
(
select 
  sum(value_tx) AS sum_of_Values
, ff.form_field_tx
, ff.form_field_id
, (CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END)     as HR_CONVERTED_PST
, to_char(to_date((CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END),  'DD-MM-YY hh24:mi:ss'), 'dddyyyy') as DATA_DATE
, v.DATA_CODE
from value v
join submission_value sv on v.value_id = sv.value_id
join form_field ff on sv.form_field_id = ff.form_field_id
group by (CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END), 
         to_char(to_date((CASE WHEN UTC_OFFSET = 4 
        THEN HR - 3/24 
        WHEN UTC_OFFSET = 5
        THEN HR - 2/24
        WHEN UTC_OFFSET = 6
        THEN HR - 1/24
         END),  'DD-MM-YY hh24:mi:ss'), 'dddyyyy'), ff.form_field_id, ff.form_field_tx, v.data_code
ORDER BY [[you should have something here]]
);
11.04.2018
  • amire szükségem van, az az óraszám (Nth Hour), amelyet a HR időbélyegéből vett hh24 értékből. így például ha 20:00:00 volt, akkor HR_NUM 20-at akarok, függetlenül attól, hogy melyik időzónában van a konverzió előtt (ha ennek van értelme), arra gondolok, hogy van valami funkció, amely csak az Óra értékét veszi le? 11.04.2018
  • to_number(to_char(hr,'HH24')) 12.04.2018

  • 2

    Hozzon létre egy sorozatot alább:

    CREATE SEQUENCE seq_hr_num
      START WITH 1
      MAXVALUE 999999999999999999999999999
      MINVALUE 1
      NOCYCLE
      CACHE 20
      NOORDER;
    

    A beillesztésben használja a „seq_hr_num.nextval” kifejezést az „incremental_Variable(?)” helyére.

    11.04.2018
  • ó, az a baj, hogy meg kell állnom 24-nél, és az alapján kell újrahasznosítanom, hogy hány bejegyzésem van, amelyek kritériumok szerint megfelelnek a csoportnak (azaz 1:00:00 PST-ben HR_NUM = 1, 4:00:00 PST-ben HR_NUM = 1 egy keleti időzónában), ha ennek van értelme 11.04.2018
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..