» »

[mysql] sklic na rezultat

[mysql] sklic na rezultat

lizard14 ::

imam časovno potratno stored funkcijo in SQL klic:

SELECT
ime,
priimek,
(select moja_funkcija()) AS prihodek
FROM zaposleni


kot rezultat sql-a zelim dobiti dodatne kolone, ki v osnovi rabijo klic stored funkcije.
SELECT
ime,
priimek,
(SELECT moja_funkcija()) AS prihodek,
(SELECT moja_funkcija()) * dodatno AS dodatnaKolona
FROM zaposleni


v zgornjem klicu se funkcija vrši 2x.
obstaja rešitev, ki bi funkcijo klicala samo 1x, nekaj v tem smislu...??
SELECT
ime,
priimek,
(SELECT moja_funkcija()) AS prihodek,
prihodek * dodatno AS dodatnaKolona
FROM zaposleni

McAjvar ::

Poskusi s temporary tabelami, ali pa morda s subselectom, če bo pomagalo. V stilu:
SELECT x.ime, x.priimek, x.prihodek, x.prihodek * 3.14 AS ilikepi FROM
(SELECT ime, priimek, (select moja_funkcija()) AS prihodek FROM zaposleni) x
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov

technolog ::

Če boš dal stored proceduri v definicijo DETERMINISTIC, potem lahko dvakrat kličeš, računala pa se bo samo enkrat.

http://dev.mysql.com/doc/refman/5.0/en/...

Drugače pa bo kar tole, kar je ajvar napisal, ok. V drugih RDMSjih maš pa konstrukt WITH, s katerim se take stvari res lepo naredijo.

http://bugs.mysql.com/bug.php?id=16244

Thank me later :)

Zgodovina sprememb…

prtenjam ::

Pozdravljeni,

to najpreprosteje in najčistejše rešite z podrejenimi SELECT stavki:
SELECT ime
     , priimek
     , fun AS prihodek
     , fun * dodatno as dodatna kolona
FROM (
      SELECT ime
           , priimek
           , (SELECT moja_funkcija()) AS fun,
      FROM zaposleni
     )


Lahko pa naredite tudi preprost VIEW, ki ima iste tri kolone kot podrejeni SELECT stavke in potem berete iz VIEW-a; torej povsem enakovredno kot zgoraj
CREATE VIEW W_ZAPOSLENI AS
  SELECT ime
       , priimek
       , (SELECT moja_funkcija()) AS fun,
    FROM zaposleni
;
SELECT ime
     , priimek
     , fun AS prihodek
     , fun * dodatno as dodatna kolona
FROM W_ZAPOSLENI
Matjaž Prtenjak
https://mnet.si


Vredno ogleda ...

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

[SQL] dvojni klic potratne funkcije?

Oddelek: Programiranje
101067 (696) prozac
»

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

Oddelek: Programiranje
393304 (2524) c0dehunter
»

[c++] standardni c++ in dogodki(events)

Oddelek: Programiranje
121770 (1595) yeti
»

[VB, Excel] Lociranje celice

Oddelek: Programiranje
81276 (1130) mmaestro
»

C++ objekti

Oddelek: Programiranje
51765 (1669) outsider

Več podobnih tem