2

値が見つかった場合は行を含むテーブルを返し、値が見つからない場合は空のテーブルを返す Informix プロシージャを作成する必要があります。

行を含むテーブルを返す方法は知っていますが、空のテーブルを返す方法はわかりません。誰でも助けることができますか?

CREATE row type AType (
  id VARCHAR(255),
  name VARCHAR(255)
);


CREATE PROCEDURE getmeasurement (p_date DATETIME YEAR TO SECOND)
RETURNING MULTISET(AType NOT NULL);

    DEFINE AType_TABLE MULTISET (AType NOT NULL);
    DEFINE v_id VARCHAR(255);
    DEFINE v_name VARCHAR(255);
    ....
    IF( FoundValue ) THEN
        -- INSERT INTO TABLE
        INSERT INTO TABLE (AType_TABLE) VALUES (ROW(v_id,v_name)::AType);     
    ELSE
        // how to initial a AType_TABLE instance with empty records.
    END IF
    ....
    RETURN AType_TABLE;

END PROCEDURE;
4

1 に答える 1

2

SQL Syntax Manualに記載されている内容にもかかわらず、SPL (ストアド プロシージャ言語) プロシージャはコレクション型 (COLLECT、SET、MULTISET、または LIST) を返すことができます。私はそれに対するドキュメンテーションのバグを報告しました — 今週初めに私を誤解させました.

この手順を Mac OS X 10.7.5 上の Informix 11.70.FC6 でコンパイルすることはできませんが、発生するエラーは次のとおりです。

SQL -9905: [Internal] No extended type information for domain.

上記のコードのさまざまなバリエーションを試してみると、さまざまな問題が発生しました。マルチセットからの DELETE に WHERE 句を使用することはできないようです (別のエラー メッセージ)。タイプの作成をロールバックしてから再試行すると、問題が発生する可能性もあります。

ただし、Linux (RHEL 5、x86/64) で 11.70.FC8 のプレリリースを使用してテストすることができ、目的の出力が得られました。

CREATE ROW TYPE IF NOT EXISTS AType
(
    id   VARCHAR(255),
    name VARCHAR(255)
);

CREATE PROCEDURE getmeasurement (p_date DATETIME YEAR TO SECOND)
        RETURNING MULTISET(AType NOT NULL);

    DEFINE AType_TABLE MULTISET(AType NOT NULL);
    DEFINE v_id VARCHAR(255);
    DEFINE v_name VARCHAR(255);

    LET v_id = "Polynomial - " || p_date;
    LET v_name = "Euclid's Geometry of the Plane";
    INSERT INTO TABLE (AType_TABLE) VALUES(ROW(v_id, v_name)::AType);
    IF 1 = 1 THEN
        -- how TO initial a AType_TABLE instance WITH empty records.
        DELETE FROM TABLE(AType_TABLE);
    END IF

    RETURN AType_TABLE;

END PROCEDURE;

EXECUTE PROCEDURE getmeasurement(CURRENT);

ROLLBACK;

出力は次のとおりです。

MULTISET{}

これは空のマルチセットです。最初にマルチセットに何かを挿入しないと、削除は失敗します。これは些細なことです。

概要

Informix 11.70.xC7 で問題ないかもしれません。他のバージョンでも動作する可能性があります。しかし、機能しないバージョンの Informix が多数存在する可能性があります。

于 2013-02-20T20:04:38.637 に答える