Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Imprimanta ciss rezista perioade ...

Garmin fēnix 7 / PRO / Saphi...

Care sunt cele mai mari regrete a...

Alfa Romeo Stelvio 2.2 jtd
 Intrebari srl nou

La multi ani @AndReW99!

Alegere masina £15000 uk

TVR vrea sa lanseze o platforma d...
 Strategie investie pe termen lung...

Modulator FM ptr auto alimentat p...

orange cablu f.o. - internet fara...

Robinet care comuta traseul
 A fost lansata Fedora 40

Samsung S24 plus

Imi iau un Dell? (Vostro vs others)

Abonati Qobuz?
 

Trigger pentru a face update automat la o tabela cand fac update la alta tabela

- - - - -
  • Please log in to reply
39 replies to this topic

#1
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
Salut!

Am o tabela angajati care contine date despre angajati (salariu, vechime, spor, impozit, cas, etc), si o tabela date_proc care contine datele procentuale pentru impozit, cas, sanatate si somaj.
Am nevoie de un trigger care atunci cand se face un update in tabela date_proc sa imi calculeze anumit niste coloane din tablea angajati.

Daca fac un update pe tabela date_proc, am urmatoarea eroare:
ORA-01422: extract fetch returns more than requested number of rows
ORA-06512: at "USER.CALCUL_SALARII", line13
ORA-04088: error during execution of trigger 'USER.CALCUL_SALARII'

Tabela date_proc contine o singura linie

Trigger-ul arata asa:
https://docs.google.com/document/d/14-79L0rClWD9GRldh_nqDKSFa4IM5QptLDQZvk38yIU/edit

Edited by lupulalbastru1, 17 March 2017 - 21:57.


#2
danvlas

danvlas

    Guru Member

  • Grup: Senior Members
  • Posts: 11,118
  • Înscris: 04.06.2009
Pune triggerul aici.

#3
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006
iti vine sa crezi ca e foarte important in ce SGBD lucrezi?

#4
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
ORA din dreptul mesajelor de eroare imi indica c-o fi vorba de Oracle

#5
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006
asa tind sa cred si eu, vazand mesajele de eroare. dar intotdeauna ma uimeste cu "programatorii" nu dai nici macar asemenea informatii de baza.

legat strict de problema, tind sa cred ca are vreun "select into" care aduce mai mult de o linie de date. fie a gresit ceva, fie nu foloseste un cursor.
codul "pus" de el nu poate fi accesat direct.

#6
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
Folosesc Oracle
Si in baza de date angajați, pe care dlfac select, am mai multe linii, deci problema e că trebuie sa folosesc un cursor

#7
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
De ce ai nevoie de cursor?

#8
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
In tabela pe care fac select si update am mai multe linii

#9
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
Asta nu e un raspuns.
Ma rog, treaba ta pana la urma :)

#10
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006
hai ca nu-i chiar asa de greu de intuit problema :)
cel mai probabil face niste calcule individuale, folosind diverse variabile. intrucat modificarile din date_proc afecteaza multi angajati, are doua variante:
-fie face un cursor si itereaza prin lista de angajati, aplicand algoritmul actual
-fie modifica algoritmul astfel incat sa poata face calculele simultan pentru toti angajatii, fara sa mai foloseasca vreun cursor sau variabile

SGBD-urile sunt optimizate pentru al doilea mod de lucru, dar multor programatori incepatori, obisnuiti cu programarea procedurala, le e mult mai usor sa implementeze un cursor.

#11
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
Eu de aia intrebam, sa vad codul, ca eu n-am avut niciodată nevoie de cursor si nici nu vad unde ai putea avea nevoie de asa ceva

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,235
  • Înscris: 24.02.2007
Codul e in primul post, doar sa fi logat pe gmail inainte de a accesa linkul.

#13
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
Plus de ceva timp nu mai incerc sa intuiesc ce vrea sa zica cineva, ori zice clar ori nu are sens sa-mi pierd timpul

Am încercat sa accesez linkul ala da nu a părut sa mearga si n-am insistat

#14
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006

 dani.user, on 19 martie 2017 - 11:17, said:

Codul e in primul post, doar sa fi logat pe gmail inainte de a accesa linkul.
acum asa e, dar ieri iti aparea un mesaj cum ca ai nevoie de permisiune si un buton de genul "request permission"

 romio79, on 19 martie 2017 - 11:15, said:

Eu de aia intrebam, sa vad codul, ca eu n-am avut niciodată nevoie de cursor si nici nu vad unde ai putea avea nevoie de asa ceva
inseamna ca n-ai avut niciodata de facut scripturi ceva mai complexe Posted Image
uite un exemplu simplu: ai de importat niste date bulk tip master-detail, in tabele care au PK de tip identity. fara cursor nu prea poti mentine legatura dintre ele.


legat de codul postat, poate fi inlocuit foarte usor cu un singur update care sa contina si calculele

Edited by _Smiley_, 19 March 2017 - 11:42.


#15
romio79

romio79

    Active Member

  • Grup: Members
  • Posts: 1,655
  • Înscris: 30.03.2005
Legat de importat date la exemplu tau e foarte usor si fara cursor, da fiecare cu modul lui de lucru, daca iti plac cursoarele go for it

#16
lupulalbastru1

lupulalbastru1

    Junior Member

  • Grup: Members
  • Posts: 110
  • Înscris: 24.05.2013
Am incercat sa fac cursor dar am eroare: mutating, trigger/function may not see it- error during execution of trigger

Edited by lupulalbastru1, 19 March 2017 - 12:56.


#17
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006

 romio79, on 19 martie 2017 - 12:19, said:

Legat de importat date la exemplu tau e foarte usor si fara cursor, da fiecare cu modul lui de lucru, daca iti plac cursoarele go for it

intr-adevar, din vorbe e foarte usor Posted Image

uite, sa zicem ca ai tabelele Master(MasterId<identity>, MasterValue<int>) si Detail(DetailId<int>, MasterId<int, fk>, DetailValue<int>) si ai 2 tabele temporare _Master si _Detail  cu date ce trebuie importate (provenind din alta baza). cum importi tu datele astea cu un script, tinand seama ca ai mai multe inregistrari in fiecare tabel?



@lupulalbastru1: nu te mai chiuni cu cursorul. pune valorile modificate in variabile, apoi fa singur update care sa faca toate calculele

Edited by _Smiley_, 19 March 2017 - 14:23.


#18
danvlas

danvlas

    Guru Member

  • Grup: Senior Members
  • Posts: 11,118
  • Înscris: 04.06.2009
Nu stiu Oracle, dar in MSSQL ar merge un Inner Join.

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate