虽然Oracle是最早创建存储过程(PL / SQL)的人之一,然后是Informix with(SPL),除了DB2之外的RDBMS产品在1998年之后实现了SQL / PSM或它的一部分?...哪个RDBMS'可以支持如下例所示:?
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;
答案 0 :(得分:1)
只有DB2接近PSM,AFAIK。 Sybase很早就开始了Transact-SQL;微软借用了这个。可能需要检查的三匹黑马是MySQL,PostgreSQL和Ingres。但是,我不记得当我查看他们的代码时,他们中的任何一个都接近PSM。
然而,谷歌搜索'mysql psm'表明MySQL 5.x和PostgreSQL 8.2支持一种接近标准的PSM形式。 (对'ingres psm'的搜索表明,Ingres中的PSM是'部分排序合并'连接技术。)
答案 1 :(得分:1)
似乎每个产品都包含自己的存储模块实现,但大多数都非常相似。例如,您的示例可以在Oracle的PL / SQL中重写,如下所示:
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;
分享并享受。