152 votes

Déclarer une variable en sqlite et l'utiliser

Je veux déclarer une variable dans sqlite et nous dans un insert

comme dans MS SQL

 Declare @name as varchar(10)

set name = 'name'

Select * from table where name = @name
 

par exemple, je vais devoir obtenir last_insert_row et l'utiliser en insertion

J'ai trouvé quelque chose à propos de la liaison mais je ne l'ai pas vraiment bien compris

135voto

Herman Schoenfeld Points 1480

SQLite ne prend pas en charge la syntaxe de variable native, mais vous pouvez obtenir pratiquement la même chose en utilisant une table temporaire en mémoire.

J'ai utilisé l'approche ci-dessous pour les grands projets et fonctionne à merveille.

     /* Create in-memory temp table for variables */
    BEGIN;

    PRAGMA temp_store = 2;
    CREATE TEMP TABLE _Variables(Name TEXT PRIMARY KEY, RealValue REAL, IntegerValue INTEGER, BlobValue BLOB, TextValue TEXT);

    /* Declaring a variable */
    INSERT INTO _Variables (Name) VALUES ('VariableName');

    /* Assigning a variable (pick the right storage class) */
    UPDATE _Variables SET IntegerValue = ... WHERE Name = 'VariableName';

    /* Getting variable value (use within expression) */
    ... (SELECT coalesce(RealValue, IntegerValue, BlobValue, TextValue) FROM _Variables WHERE Name = 'VariableName' LIMIT 1) ...

    DROP TABLE _Variables;
    END;
 

53voto

stenci Points 1394

La solution de Herman fonctionne, mais elle peut être simplifiée car Sqlite permet de stocker n'importe quel type de valeur sur n'importe quel champ.

Voici une version plus simple qui utilise un champ Value déclaré en tant que TEXT pour stocker toute valeur:

 CREATE TEMP TABLE IF NOT EXISTS Variables (Name TEXT PRIMARY KEY, Value TEXT);

INSERT OR REPLACE INTO Variables VALUES ('VarStr', 'Val1');
INSERT OR REPLACE INTO Variables VALUES ('VarInt', 123);
INSERT OR REPLACE INTO Variables VALUES ('VarBlob', x'12345678');

SELECT Value
  FROM Variables
 WHERE Name = 'VarStr'
UNION ALL
SELECT Value
  FROM Variables
 WHERE Name = 'VarInt'
UNION ALL
SELECT Value
  FROM Variables
 WHERE Name = 'VarBlob';
 

-2voto

Unfamiliar Points 29

Essayez d'utiliser des valeurs de liaison. Vous ne pouvez pas utiliser de variables comme dans T-SQL, mais vous pouvez utiliser des "paramètres". J'espère que le lien suivant est utile. Valeurs contraignantes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X