» »

[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:

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

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).

DamijanD ::

a niso parametri ponavadi prefixani z @ ? (torej @id)

sajmon ::

HotBurek je izjavil:

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
root@debian:/# iptraf-ng
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!

Ahim ::

DamijanD je izjavil:

a niso parametri ponavadi prefixani z @ ? (torej @id)

Lokalne variable (veljajo samo za doticni session)?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Podatkovne baze - SQL enostavne poizvedbe

Oddelek: Programiranje
72058 (1651) galu
»

[SQL] Insert

Oddelek: Programiranje
252075 (1677) greentech
»

[Java] Evidenca delovnega časa - Java v navezi z Accessom

Oddelek: Programiranje
393281 (2501) c0dehunter
»

SQL vprašanje

Oddelek: Izdelava spletišč
302666 (2229) jerneju
»

SQL stavek - zajeban?

Oddelek: Programiranje
81084 (971) edmund

Več podobnih tem