2010-06-29 5 views
1

Bien qu'Oracle soit l'un des premiers à créer des procédures stockées (PL/SQL) alors Informix avec (SPL) quels produits RDBMS ont implémenté SQL/PSM ou un sous-ensemble après 1998? .. Quel RDBMS peut supporter procs comme dans l'exemple suivant ?:Quelles implémentations de SQL ont des fonctionnalités similaires à PSM?

CREATE OR REPLACE FUNCTION foo1(a integer) 
RETURNS void AS $$ 
    CASE a 
    WHEN 1, 3, 5, 7, 9 THEN 
     PRINT a, 'is odd number'; 
    WHEN 2, 4, 6, 8, 10 THEN 
     PRINT a. 'is odd number'; 
    ELSE 
     PRINT a, 'isn't from range 1..10'; 
    END CASE; 
$$ LANGUAGE plpgpsm; 

Répondre

1

Seul DB2 est proche de PSM, AFAIK. Sybase a eu son Transact-SQL très tôt; Microsoft a emprunté cela. Trois chevaux sombres qui peuvent être vérifiés sont MySQL, PostgreSQL et Ingres. Cependant, je ne me souviens pas avoir pensé que l'un d'eux était proche de PSM quand j'ai regardé leur code. Cependant, une recherche Google pour 'mysql psm' suggère que MySQL 5.x et PostgreSQL 8.2 supportent une forme de PSM proche de la norme. (La recherche de 'ingres psm' montre que PSM dans Ingres est une technique de jointure 'Merge Sort Merge'.)

1

Il semble que chaque produit contienne sa propre implémentation de modules stockés, mais la plupart sont assez similaires. Par exemple, votre exemple pourrait être réécrit dans PL/SQL d'Oracle comme suit:

CREATE OR REPLACE PROCEDURE foo1(a integer) AS 
BEGIN 
    CASE 
    WHEN a IN (1, 3, 5, 7, 9) THEN 
     DBMS_OUTPUT.PUT_LINE(a || ' is odd number'); 
    WHEN a IN (2, 4, 6, 8, 10) THEN 
     DBMS_OUTPUT.PUT_LINE(a || ' is even number'); 
    ELSE 
     DBMS_OUTPUT.PUT_LINE(a || ' isn''t FROM RANGE 1..10'); 
    END CASE; 
END; 

Partagez et appréciez.

Questions connexes