sql >> Databáze >  >> RDS >> Oracle

Spusťte výběr podřízených záznamů, násobení jejich hodnot a aktualizaci rodičovského záznamu

Máte několik problémů, ale ten nejzásadnější je ten, že byste to neměli dělat vůbec. Snaha uložit – a udržovat v synchronizaci – hodnotu, kterou lze vždy vypočítat, je základní konstrukční chybou.

Nyní k samotnému kódu. Máte

SELECT SUM(VALUE) into product

Cíl vašeho INTO musí být deklarovaná proměnná. Vypadá to, že se pokoušíte SELECT .. INTO název sloupce.

Měli byste pojmenovat lokální proměnné, abyste mezi nimi rozlišili názvy sloupců. Tedy místo

DECLARE
value number;
amount number;
total number;

Měli byste mít

DECLARE
v_value number;
v_amount number;
v_total number;

Naopak byste měli přemýšlet o standardních konvencích pojmenovávání vašich tabulek a sloupců. Pro sloupce používám a doporučuji názvy ve tvaru , tedy ORDER_ID, PRODUCT_NAME atd. Co je to s PRODUCT_ID_PRODUCT, ORDER_ID_ORDER ? Opakování názvu tabulky v názvech sloupců obvykle není výhodné. I když jsou chvíle, kdy to dává smysl, protože stále dodržuje formát adjektiva_podstatného jména, jako je sloupec id tabulky ORDERS pojmenovaný ORDER_ID. Přemýšlejte také o názvech tabulek, já obvykle dělám své názvy tabulek množným podstatným jménem, ​​protože tabulky sledují více instancí nějaké entity. Pokud má název tabulky smysl pro název sloupce (např. ORDER_ID), byl by singulární, protože jednotlivý řádek sleduje jednu instanci entity.

A konečně, je těžké doporučit úpravu kódování bez znalosti tabulek. Uvedl jste jejich vágní popis, ale je lepší položit vše na stůl. Viz minimal-reproducible-example



  1. Jak najít konkrétní masku v řetězci - Oracle?

  2. Jak vygenerovat verzi 4 (náhodné) UUID na Oracle?

  3. Vyberte poslední řádek pro každou skupinu z oracle

  4. sql oracle - odstranit duplicitní hodnotu