+ Rispondi
Risultati da 1 a 7 su 7
  1. #1

    Iscritto dal
    13/12/2011
    LocalitÓ
    Salento!
    Messaggi
    6,825

    MySql - Gestione Null e stored procedure.

    Magari Ŕ una cazzata ma, conoscete metodi pi¨ furbi per gestire questa cosa?

    Ho una stored procedure che va ad aggiornare una tabella in base a dei parametri in ingresso. Non posso spostare "l'intelligenza" lato client dato che questi ultimi sono multi-piattaforma, andrebbero re-distribuiti e quindi tempo

    mettiamo di avere
    codice:
    TABELLA1
    
    Chiave | Colonna1 | Colonna2 | Colonna3 | Colonna4 |  FK_1

    e questa stored procedure
    codice:
    p_aggiornaTabella1(IN id INT, IN Chiave1 INT, IN Chiave2 VARCHAR(255), IN Chiave3 DATETIME, IN Chiave4 DATETIME)
    Se io devo svolgere questa query:
    codice:
    UPDATE db1.TABELLA1 SET FK_1 = id 
    WHERE 
    Colonna1 = Chiave1,
    Colonna2 = Chiave2,
    Colonna3 = Chiave3,
    Colonna4 = Chiave4
    Chiamer˛:
    codice:
    CALL p_ aggiornaTabella1(123,1,"pippo","23/12/2007","23/12/2008");
    ed il tutto va bene.
    Per˛ (in questa query) Chiave3 e Chiave4 possono essere NULL.

    E quindi la query dovrebbe cambiare in [..]WHERE Colonna3 IS NULL; PerchŔ Colonna3 = NULL non restituisce nulla non aggiornando la tabella.

    Io ho risolto malamente con dei gran

    codice:
    IF((ISNULL(Chiave3) AND (ISNULL(Chiave4)) Query1
    IF(NOT ISNULL(Chiave3) AND etc etc etc
    Per˛ sono quasi certo che mi st˛ perdendo in un bicchier d'acqua.

    Idee?

  2. #2

    Iscritto dal
    14/07/2012
    LocalitÓ
    Vicenza
    Messaggi
    222
    che database usi?
    perche so che PostgreSQL ha la possibilitÓ di gestire "x = NULL" come se fosse "x IS NULL": bisogna usare la variabile di configurazione "transform_null_equals".

    Cosi al momento mi viene in mente solo questo... x = null non Ú proprio sql standard...
    My Mod:Big Renewal Project [work in progress...]


  3. #3

    Iscritto dal
    13/12/2011
    LocalitÓ
    Salento!
    Messaggi
    6,825
    Quote Originariamente inviato da IceTea Stk Visualizza il messaggio
    che database usi?
    perche so che PostgreSQL ha la possibilitÓ di gestire "x = NULL" come se fosse "x IS NULL": bisogna usare la variabile di configurazione "transform_null_equals".

    Cosi al momento mi viene in mente solo questo... x = null non Ú proprio sql standard...
    MySql e non posso fare altro (se mi avessero ascoltato agli inizi )

    Un modo molto sporco Ŕ :

    codice:
    SELECT *
    FROM Tabella1
    WHERE IFNULL(Colonna1,"STRINGANULLA") = IFNULL(Chiave1,"STRINGANULLA");
    per˛ perdo T-Sql e se cambiamo db engine (sono inchiappettato)

  4. #4

    Iscritto dal
    14/07/2012
    LocalitÓ
    Vicenza
    Messaggi
    222
    edit: scritta una cavolata. mi sono accorto dopo che non puoi usare "ifnull"
    My Mod:Big Renewal Project [work in progress...]


  5. #5

    Iscritto dal
    14/07/2012
    LocalitÓ
    Vicenza
    Messaggi
    222
    mi Ú venuta in mente una cosa che puoi provare.
    purtroppo io non ho un db mysql sottomano da fare un test. Invece di usare l'operatore " = " usa l'operatore " <=> ".
    My Mod:Big Renewal Project [work in progress...]


  6. #6

    Iscritto dal
    13/12/2011
    LocalitÓ
    Salento!
    Messaggi
    6,825
    Quote Originariamente inviato da IceTea Stk Visualizza il messaggio
    mi Ú venuta in mente una cosa che puoi provare.
    purtroppo io non ho un db mysql sottomano da fare un test. Invece di usare l'operatore " = " usa l'operatore " <=> ".
    Trovo i null ma non quelli valorizzati

  7. #7

    Iscritto dal
    14/07/2012
    LocalitÓ
    Vicenza
    Messaggi
    222
    Quote Originariamente inviato da xam8re Visualizza il messaggio
    Trovo i null ma non quelli valorizzati
    mi ha fregato

    allora la cosa secondo me piu' sensata da fare e' questa:


    codice:
    UPDATE db1.TABELLA1 SET FK_1 = id  
    WHERE  Colonna1 = Chiave1 AND 
    Colonna2 = Chiave2 AND
    (IF(Chiave3 IS NULL,(Colonna3 IS NULL),(Colonna3 = Chiave3))) AND 
    (IF(Chiave4 IS NULL,(Colonna4 IS NULL),(Colonna4 = Chiave4)))


 

Autorizzazioni

  • Non puoi iniziare nuove discussioni
  • Non puoi rispondere alle discussioni
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
Powered by vBulletin™ Version 4.1.5
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved
SEO by vBSEO ©2011, Crawlability, Inc.
Fuso orario: UTC +1, sono le 09:36.