1

DB2 でこの関数を作成してデプロイしたいのですが、行き詰まってしまいました。手伝っていただけませんか?

乾杯、

私の機能コード:

CREATE FUNCTION getID(NameIn VARCHAR(255),versionIn varchar(255))
 RETURNS varchar(12)
 NOT DETERMINISTIC
 LANGUAGE SQL
 MODIFIES SQL DATA
 NO EXTERNAL ACTION
 BEGIN 
  declare IDOut varchar(12);
  set IDOut = (select mID 
    from mIDHolder 
    where mName = NameIn and version = versionIn);
  IF mappingIDOut IS NULL THEN
    set IDOut = Hex(GENERATE_UNIQUE());
    insert into mIDHolder VALUES (IDOut,NameIn,versionIn);
  END IF;
  RETURN IDOut;
 END

mIDHolder テーブル DDL は次のとおりです。

CREATE TABLE "V"."MIDHOLDER" (
    "MID" VARCHAR(12) FOR SBCS DATA NOT NULL, 
    "MNAME" VARCHAR(255) FOR SBCS DATA WITH DEFAULT NULL, 
    "VERSION" VARCHAR(255) FOR SBCS DATA WITH DEFAULT NULL
)
4

1 に答える 1

1

DB2 for zOS のどのバージョンを使用していますか?

バージョン 10の CREATE FUNCTION のドキュメントを見ると、MODIFIES SQL DATAと互換性がないと記載されていALLOW PARALLELます。andALLOW PARALLELを指定した場合のデフォルトですNO EXTERNAL ACTION。これはあなたの問題だと思います。

一方、バージョン 9.1の CREATE FUNCTION のドキュメントをMODIFIES SQL DATA見ると、どこにもオプションとして言及されていません。実際、その下に書かれている内容を見ると、READS SQL DATAテーブルを変更するステートメントは関数ではまったく許可されていないことが強く示唆されています。

私の経験では、関数とプロシージャーの定義は非常に扱いにくく、エラー メッセージはわかりにくく、DB2 のバージョン間には大きな違いがあります。

于 2013-01-17T08:55:16.493 に答える