2 votes

Ma fonction stockée a disparu, vraisemblablement à la fin de ma session RazorSQL.

J'utilisais la fenêtre de session en direct de RazorSQL pour créer et modifier plusieurs procédures stockées.

Depuis, je me suis déconnecté de la base de données, puis reconnecté, et maintenant ces procédures ont disparu.

Je suis probablement en train de me tromper, mais j'utilise un login qui a la permission de créer ces procédures et, alors que je suis toujours connecté la première fois, je peux me connecter et exécuter les procédures stockées, donc je sais qu'elles sont au moins là à ce moment-là.

Que dois-je faire de plus dans RazorSQL que d'écrire un bloc "CREATE FUNCTION" fonctionnel pour que la fonction devienne persistante ?

2voto

Jonathan Leffler Points 299946

Dans Informix, presque toutes les instructions SQL, tant DDL que DML, sont soumises à des transactions (les exceptions sont CREATE DATABASE, DROP DATABASE et RENAME DATABASE).

Il existe plusieurs types de bases de données dans Informix - la distinction essentielle, dans le cas présent, est entre le 'MODE ANSI' et les bases de données 'enregistrées' et 'non enregistrées'.

  • Une base de données MODE ANSI démarre toujours une transaction lorsque vous exécutez une instruction telle que CREATE FUNCTION, et la transaction se poursuit jusqu'à ce que vous COMMIT [WORK], ROLLBACK [WORK] ou que vous quittiez la session (ce qui est équivalent à ROLLBACK).
  • Une base de données enregistrée prend en charge les transactions, mais chaque instruction est une transaction autonome, sauf si vous démarrez explicitement une transaction avec BEGIN [WORK]. En fait, l'AutoCommit s'applique jusqu'à ce que vous exécutiez BEGIN WORK.
  • Une base de données non journalisée ne prend pas en charge les transactions ; chaque déclaration est plus ou moins une transaction autonome, sans mécanisme permettant de contourner ce comportement.

Il me semble que l'explication la plus probable de ce que vous avez vu est :

  • Vous (ou RazorSQL) avez lancé une transaction (explicitement avec BEGIN WORK, ou implicitement dans une base de données MODE ANSI) et vous êtes sorti avant de valider la transaction, donc les effets ont été annulés.

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