SQL oddělování kusů kódu v proceduře (outlining)

Když mám delší uloženou proceduru, špatně se v ní orientuje. Potřebuji oddělit jednotlivé části a hlavně mít možnost sbalit konkrétní části.

Sbalený kód. Jasně vidět že se skládá ze dvou částí

Chci si napsat vzorový kód s komentáři, který by byl přehledný a dobře se dal balit. Především v management studiu ale i třeba v DBeaver.

Takto vypadá kód před sbalením. Sbalení se dělá díky tomu BEGIN END.

Před sbalením

Management studio umožňuje vyznačit část kódu a sbalit ho. Stačí si do toolbaru přidat „Hide Selection“. Jenže to platí jen dokud nezavřu a neotevřu.

kód pro nakopírování do management studia:

---- Celý blok má zkratku (FV,REZ).
-- Podčásti pak FV1, FV2, FV3
-- Používám standardně 10 znaků pro *
-- To BEGIN END umožňuje sbalit. 
-- Na plus je nutno kliknout někdy dvakrát


--********** FV Naplnění FV do mojí tabulky **********
-- Chci načíst FV fdo mojí tabulky 
-- Jedu přes TMP tabulku, protože potřebuji nějaké úpravy
-- Taky nechci zatěžoat/zamykat vstupní systém.
-- Datum má index
-- Trvá cca 0:30
if 1=1 BEGIN

--********** FV1 nejprve do TMP
drop table if exists #fv
select -- 570 000 0:15 
	 h.cislo as Cislo
	,p.SKU as SKU
	,h.Sklad as Sklad
	,isnull(p.Cena,0) as Cena
	,p.Mj as Mj
into #fv
-- select count(*) -- 54 410 
from dbo.faktura_hlavicka h
join dbo.faktura_polozka p on h.ID = p.ID
where 1=1
and h.datum >= '2022-01-01' 
-- select top 100 * from #fv where SKU = 743504 --743504 = OM0018


--********** FV2 kontrola nulové FV
-- pokud je nulová FV, je to chyba na které přeruším zpracování
declare @ChybaNulovaFV varchar(max)
set @ChybaNulovaFV = 'Existuje FV s nulovou částkou! První nalezená FV má číslo:' + 
	(select top 1 convert(varchar(200),Cislo) 
	from #fv 
	where 1=1
	and isnull(Cena,0) = 0
	) 
if @ChybaNulovaFV is not null
begin
	RAISERROR(@ChybaNulovaFV, 18, 1)
	return 
end

--********** FV3 strčím do své tabulky
Insert into MojeTabulka (Cislo, SKU, Cena)
select 
	 fv.Cislo
	,fv.SKU
	,sum(fv.Cena) as Cena --nemůže býrt null
from #fv fv
group by 
	 fv.Cislo
	,fv.SKU

END --Konec FV

--********** REZ Naplnění rezervací  **********
-- Tady je další oddíl
if 1=1 BEGIN

--********** REZ1 něco dělám
Select getdate()

END --Konec REZ


Pomocný kód který vytvoří tabulky.

-- drop table if exists dbo.faktura_hlavicka
Create table dbo.faktura_hlavicka (
	 ID int NULL
	,cislo varchar(30) NULL
	,sklad int NULL
	,datum datetime
) 
-- drop table if exists dbo.faktura_polozka
Create table dbo.faktura_polozka (
	 ID int NULL
	,SKU INT NULL
	,Mj INT NULL
	,Cena money NULL
) 

-- drop table if exists dbo.MojeTabulka
Create table dbo.MojeTabulka (
	 Cislo int NULL
	,SKU INT NULL
	,Cena money NULL
) 

Posted

in

by

Tags:

Comments

Napsat komentář

[zoom]