Forum » Programiranje » [SQL] Referenca na parameter v proceduri
[SQL] Referenca na parameter v proceduri
HotBurek ::
Pozdralvjeni.
Zanima me, kako se mogoče bolj jasno napiše, na kaj naj se sklicuje "id"; na parameter ali stolpec.
Primer:
Kako bi lahko id:
WHERE id = table1.id;
nedvoumno ozančil, da gre za parameter in ne stolpec v tabeli?
Zanima me, kako se mogoče bolj jasno napiše, na kaj naj se sklicuje "id"; na parameter ali stolpec.
Primer:
CREATE DEFINER=`root`@`localhost` PROCEDURE `database1`.`procedure1`(IN id INT) BEGIN SELECT COUNT(*) FROM table1 WHERE id = table1.id; END
Kako bi lahko id:
WHERE id = table1.id;
nedvoumno ozančil, da gre za parameter in ne stolpec v tabeli?
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Ahim ::
Ti lahko das variablam/parametrom kakrsnokoli ime (ja, pa bazam in proceduram seveda tudi ...). V nekem normalnem okolju bi imela ze baza in tabela smiselni imeni, potem je pa tudi lazje poimenovati parameter.
Npr. ce je tabela "orders", je tisto najbrz "order_id" (sploh ker je lahko procedura bolj kompleksna in ima mogoce med parametri vec razlicnih "id-jev").
Pa lociti parametre od variabel tudi ni slabo, npr s prefiksom p_ (p_order_id) za parametre in v_ za variable, ki jih deklariras znotraj procedure (npr. v_order_id, ki seveda ni nujno enak p_order_id).
Npr. ce je tabela "orders", je tisto najbrz "order_id" (sploh ker je lahko procedura bolj kompleksna in ima mogoce med parametri vec razlicnih "id-jev").
Pa lociti parametre od variabel tudi ni slabo, npr s prefiksom p_ (p_order_id) za parametre in v_ za variable, ki jih deklariras znotraj procedure (npr. v_order_id, ki seveda ni nujno enak p_order_id).
sajmon ::
Pozdralvjeni.
Zanima me, kako se mogoče bolj jasno napiše, na kaj naj se sklicuje "id"; na parameter ali stolpec.
Primer:
CREATE DEFINER=`root`@`localhost` PROCEDURE `database1`.`procedure1`(IN id INT)
BEGIN
SELECT COUNT(*) FROM table1
WHERE id = table1.id;
END
Kako bi lahko id:
WHERE id = table1.id;
nedvoumno ozančil, da gre za parameter in ne stolpec v tabeli?
Nazadnje sem delal v postgresql bazi in tam bi uporabil sledeče:
Če pa gre za dinamično zgrajen sql stavek, id predstavlja stolpec, potem bi dinamično zgradil sql stavek s pomočjo funkcije format.
sql_string = format("select * from ... where %1$s = table1.id, variable_column_name)
Če bi šlo za primer, da je id parameter in bi moral biti stavek na primere "where 5 = table1.id", potem bi v kodi uporabil že vgrajeno možnost podajanja parametrov ob izvedbi sql stavka: "execute sql_string using param_table_id", dinamična mesta pa definiraš s parametrom $1, $2 ...
Predvidevan, da gre tole za MSSQL bazo, tako da preveri, kako je tam rešeno dinamično sestavljanje sql stavkov in podajanje spremenljivk.
Zgodovina sprememb…
- spremenil: sajmon ()
zavajon ::
Najbolje bo, da ustrezno poimenuješ parameter. tudi zato, če bo kdaj v prihodnosti moral nekdo drugi brati to kodo. Sicer pa bi Oracle baza ta id smatrala kot polje, ne vem pa, kako je v MySQL. Kakorkoli, za človeštvo bo bolje, da ne pišeš kode tako. Lepo poimenuj parameter p_id, pa bo svet lepši ;)
HotBurek ::
Ja, ko sem videl prvi odgovor z idejo prefixa "p_", sem se kar za to opcijo odločil.
Sicer bom malo pofixal; vse stolpce v tabelah imam poimenovane z malimi črkami. Za parameter bom pa uporabil veliko črko.
Takole: ...(IN Pid INT)... WHERE Pid = table1.id;
Afne (@) se spomnem iz MSSQL, a sem pozabil sceno. Zgornji primer delam na MariaDB.
Setup je sicer tako, kot mora bit: na bazi so procedure, middleware doda parameter v SQL stavek kot objekte, in potem kliče proceduro.
Se pravi, ni tega:
"SELECT * FROM aaa WHERE bbb='" + directstringinput + "';"
ali
"CALL db1.proc1('" + directstringinput + "');"
Python + Sqlalchemy + procedura + parametri: Python SQLAlchemy: stored procedura + parameter
Sicer bom malo pofixal; vse stolpce v tabelah imam poimenovane z malimi črkami. Za parameter bom pa uporabil veliko črko.
Takole: ...(IN Pid INT)... WHERE Pid = table1.id;
Afne (@) se spomnem iz MSSQL, a sem pozabil sceno. Zgornji primer delam na MariaDB.
Setup je sicer tako, kot mora bit: na bazi so procedure, middleware doda parameter v SQL stavek kot objekte, in potem kliče proceduro.
Se pravi, ni tega:
"SELECT * FROM aaa WHERE bbb='" + directstringinput + "';"
ali
"CALL db1.proc1('" + directstringinput + "');"
Python + Sqlalchemy + procedura + parametri: Python SQLAlchemy: stored procedura + parameter
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
MrStein ::
V Oracle PL/SQL gre kot imeprocedure.imespremenljivke, v tem ki si ga navedel pa... mogoče, probaj.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Ahim ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Podatkovne baze - SQL enostavne poizvedbeOddelek: Programiranje | 2058 (1651) | galu |
» | [SQL] InsertOddelek: Programiranje | 2075 (1677) | greentech |
» | [Java] Evidenca delovnega časa - Java v navezi z AccessomOddelek: Programiranje | 3281 (2501) | c0dehunter |
» | SQL vprašanjeOddelek: Izdelava spletišč | 2666 (2229) | jerneju |
» | SQL stavek - zajeban?Oddelek: Programiranje | 1084 (971) | edmund |