Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Voici ma règle générée en PHP ( elle permet d'inserer des enregistrements a partir d'une vue)
create or replace rule RINS_V75_BDALK_T237_BDALK_T224 as on insert to BDALK_V75 do instead (
insert into BDALK_T237 (T237_ID,CONTRIB_ID,CONTRIB_PWD,T237_DATE,T224_ID_FK,NOM) values (new.T237_ID,new.CONTRIB_ID,new.CONTRIB_PWD,new.T237_DATE,new.T224_ID_FK,new.NOM);
insert into BDALK_T224 (T224_ID,CONTRIB_ID,CONTRIB_PWD,T224_DATE) values (new.T224_ID,new.CONTRIB_ID,new.CONTRIB_PWD,new.T224_DATE);
)
Je ne comprend pas l'erreur produite :
Erreur SQL :
ERREUR: la colonne *NEW*.contrib_id n'existe pas
Pourquoi une erreur uniquement sur cette colonne ? si je met une valeur a la place, y a plus de pb?
Pk default ?
Parce que la colonne id est une colonne autoincrémentée sur la table. Je préfère garder ça. Maintenant, il est tout à fait possible d'indiquer NEW.id.
Quel l'utilité du "new"
NEW est le nom de la pseudo ligne à insérer. NEW.contenu correspond donc à la valeur fournie dans la clause VALUES du INSERT.
Ok je comprend mieux merci
A la place de "default" est qu'on peut utiliser nextID de la sequence correspondante ? car toutes mes primary key sont basées sur des sequences. ?
Ok, cette exemple fonctionne bien, je pense pouvoir l'adapter a mon application.
Par contre, je comprend la fin de la regle :
create rule insertv1 as on insert to v1 do instead insert into t1 values (default, new.contenu);
Pk default ? Quel l'utilité du "new".
Ok, mais pour déclencher l'événement.
Il faut que l'événement déclencheur de la règle soit correcte.
Syntaxiquement, insert into TABLE_VIEW_NAME .... => provoque une erreur, donc le moteur ne pourra pas détecter la règle.
La règle permet de dire que, si le moteur intercepte un INSERT sur la vue, l'INSERT doit se faire sur la table. Donc, la requête de création de la règle devrait plutôt être :
JE CROYAIS QU'ON POUVAIT PAS FAIRE DE INSERT SUR UNE VUE ????CREATE RULE new10 AS ON INSERT TO nom_de_la_vue DO insert into nom_de_la_table (col1_table, col2_table, col3_table) values (col_vue_correspondant_a_col1_table, col_vue_correspondant_a_col2_table, col_vue_correspondant_a_col3_table)
J'ai compris cette règle en bas de page.
Mais ça ne résoud pas mon problème : en fait je veux pouvoir faire un insert sur un vue.
Je me suis dit qu'il était peut être possible de le faire avec les règles.
Avez vous une idée ?
voila : j'ai une vue (avec des jointures sur plusieurs tables) et quand je l'execute j'obtiens une table avec des informations.
Ensuite a partir de cette table virtuelle, je souhaiterais y rajouter des informations comme un insert sur une table virtuelle
par contre je n'ai aucun moyen de savoir a l'avance les tables concernées par la vue.
Y aurait il un moyen de connaitre les colonnes uniquement grace à une vue ?
Ah ok, je comprend mieux. C'est vrai, c'est logique. La vue est une table virtuelle,
Bonjour,
Je souhaiterais faire des "insert" sur une vue que j'ai créée auparavant.
Pour cela, j'ai crée une régle ON INSERT sur la vue :
CREATE RULE new10 AS ON INSERT TO BDALK_V75 DO insert into BDALK_V75 (T237_ID, CONTRIB_ID, CONTRIB_PWD, T237_DATE) values (10, 1, 'mdpoi', now())
Jusqu'ici tout se passe bien, la regle s'est correctement ajoutée.
Mon problème : comment utiliser cette régle ?
J'ai essayé : INSERT INTO BDALK_V75 (T237_ID, CONTRIB_ID, CONTRIB_PWD, T237_DATE) VALUES (22, 33, 'mmm', now()) mais il y a un message d'erreur : récursion indéfinie détectée. J'ai pas très bien compris l'utilisation des règles, je crois.
Pouvez vous m'éclaircir ce point ?
Pages : 1