|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
Bonjour,
Je cherche comment avoir un équivalent des tables INSERTED/DELETED de SQL Server! En fait, j'essaie de traduire une instruction SQL Server de jointure entre la table DELETED et la table dont on supprime des lignes. Code :
DELETE FROM [TableEntity] WHERE ID IN (SELECT Ins.ID FROM [inserted] Ins , [TableEntity] Ent WHERE Bien sur cette ligne est utilisée dans un trigger after delete! Je projette de créer alors une table avant cela pour contenir tous les :old Est-ce une bonne approche? Le problème c'est que table créée avec EXECUTE IMMEDIATE n'est pas reconnue dans cette requête (undeclared identifier) Autre idée générale Pour avoir une émulation totale des pseudo-tables Mssql, je pense à faire l'insertion dans une table temporaire avec les triggers FOR EACH ROW puis traiter la table résultante dans un trigger statement du même évènement. J'ai pas encore implémenté cette technique mais est-ce bon?
__________________
randriano.dvp.com |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
et si tu expliquais à ceux qui ne connaissent pas les pseudo-tables SQL Server, ce que tu veux faire ? Parce que personnellement, je ne comprends pas bien le but de la manoeuvre
|
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
Désolé de m'être mal exprimé!
Le but c'est de faire une table temporaire pour contenir les lignes supprimées grâce à un trigger pour traiter le tout à la fin dans un trigger instruction after delete Comment faire pour cette idée de table temporaire? Les pseudo-tables(inserted,deleted) de SQL Server sont des tables pour contenir les lignes mises à jour ou supprimées possèdant la même définition que la table sur laquelle le trigger est appliqué. Bref, c'est l'équivalent des :old et :new de Oracle. Sauf que SQL Server n'a pas de trigger For Each Row donc il enregistre les lignes d'abord dans ces pseudo-tables et traiter le tout dans le trigger à la fin de la requête. Remarquons qu'Oracle possède 2 types de base de trigger: instruction et ligne (for each row) tandis que SQL Server n'a que le trigger instruction qui se sert de INSERTED/DELETED pour récupérer des informations sur l’opération déclenchante
__________________
randriano.dvp.com |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
|
|
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
Je ne comprend pas où voulez-vous en venir mnitu
__________________
randriano.dvp.com |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
En effet, cet exemple (case 2) évoque une part de mon idée: utilisation d'un package contenant une table de TABLE%ROWTYPE
Ce que je ne comprend pas c'est que dès SQL> insert into delete_demo_view values ( 1, sysdate, 'Hello' ); 1 row created. SQL> insert into delete_demo_view values ( 2, sysdate, 'Goodbye' ); 1 row created. la table delete_demo contient aussi 2 lignes C'est après SQL> delete from delete_demo_view; 2 rows deleted. que son champ hidden_date la date courante Je suis encore débutant en Oracle et je me demande le sens de index by binary_integer dans "type array is table of delete_demo%rowtype index by binary_integer" _________________________________ Ce que je cherche surtout c'est une table où je puisse faire une jointure et que je supprimerai après???
__________________
randriano.dvp.com |
|
|
00
|
|
|
#8 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Citation:
Citation:
Citation:
Met une "temporary table" à la place du package. |
|||
|
|
00
|
|
|
#9 | |||
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
Citation:
Une autre question: je me demande c'est quoi ces 2 derniers affichages DELETE_DEMO_BD DELETE_DEMO_DBFER DELETE_DEMO_DBFER DELETE_DEMO_AD DELETE_DEMO_AD it-1 DELETE_DEMO_AD it-2 2 rows deleted. DELETE_DEMO_BD DELETE_DEMO_AD 0 rows deleted. En fait, j'ai placé des dbms_output dans les triggers Code :
__________________
randriano.dvp.com |
|||
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Il y a un exemple ici (quoi que en dépit d'avoir l'air de marcher cette solution ne marche pas).
Peux tu poster un exemple complet (create tables, insert, create triggers etc.) ? |
|
|
00
|
|
|
#11 | |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
Citation:
ASKTOM - MUTATE.txt
__________________
randriano.dvp.com |
|
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Code :
|
||
|
|
00
|
|
|
#13 | |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
C'est bizarre
Chez moi, il y a ces 2 lignes de plus Citation:
__________________
randriano.dvp.com |
|
|
|
00
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Quelle version d'Oracle ?
|
|
|
00
|
|
|
#15 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
J'utilise Oracle 9i release 2!!
__________________
randriano.dvp.com |
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 320 ![]() |
Même version.
|
|
|
00
|
|
|
#17 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
C'est bizarre, utilises-tu le même script que j'ai attaché à mon précédent post?
Revenons à l'origine de ce thread (émulation des pseudo-tables): je vais finalement opter pour la table ordinaire que je vide à chaque BEFORE INSERT, insertion à chaque AFTER INSERT FOR EACH ROW
__________________
randriano.dvp.com |
|
|
00
|
|
|
#18 |
|
Membre chevronné
![]() ![]() Rija RandrianoInscription : janvier 2007 Messages : 984 ![]() |
J'y opte car j'ai besoin de faire un SELECT sur l'émulation de la table. J'avais pensé que le package avec une variable table va suffire mais on ne peut pas y faire un select si je ne me trompe pas !!
__________________
randriano.dvp.com |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com