2016-09-25 4 views
0

Je dois placer un userstamp dans une table et je n'ai pas réussi à comprendre comment l'instruction GENERATED FOR CHAQUE ROW ON UPDATE AS fonctionne avec la variable SESSION_USER dans DB2 10,5 (LUW).DB2: Comment être généré toujours comme instruction pour travailler avec l'utilisateur de session

Managed pour obtenir une mise en œuvre de travail en utilisant une fonction qui a une variable fausse pour forcer l'évaluation dans les déclarations de mise à jour:

CREATE OR REPLACE FUNCTION XXX.CURRENT_USER(tmp varchar(128)) 
    SPECIFIC xxx.XXX_CURRENT_USER 
RETURNS VARCHAR(128) 
CONTAINS SQL DETERMINISTIC NO EXTERNAL ACTION 
BEGIN 
    RETURN session_user ; 
END 
GO 

CREATE TABLE xxx (
    i INTEGER, 
    t VARCHAR(128) GENERATED ALWAYS AS (XXX.CURRENT_USER(i)) 
) 

Cependant, serait bien ont moins la mise en œuvre « aki » pour une chose de base comme celui-ci . Pour les horodatages, il y a cette instruction "FOR CHAQUE ROW ON UPDATE COMME ROW CHANGE TIMESTAMP" mais pas d'équivalent pour les autres variables de registre. L'aide est très appréciée

Répondre

0

CREATE TABLE xxx (
    i INTEGER, 
    t VARCHAR(128) WITH DEFAULT session_user 
); 

Je n'ai pas DB2 à portée de main pour vérifier, mais cela est très similaire à la syntaxe utilisée dans d'autres bases de données (bien que la syntaxe plus typique ne pas utiliser WITH).

+0

Merci pour vos commentaires. Malheureusement, cela ne fonctionne pas avec les instructions de mise à jour. Je voudrais automatiquement piéger qui a modifié la ligne sans utiliser de déclencheurs. – JMX

+0

@JMX. . . Je ne pense pas que votre code le fera non plus. Je pense que vous devez utiliser un déclencheur. –

+0

En fait, c'est le cas si la fonction dépend des valeurs de ligne, comme dans le cas de la colonne "i". – JMX