0

まず第一に、私はCachéの新人なので、コードはおそらく貧弱ですが...

Studio からソース ファイルを再構築するには、Java で Caché データベースにクエリを実行できる必要があります。

メソッドなどを問題なくダンプできますが、1つだけ避けられないことがあります... 何らかの理由で、EXTENTQUERYSPECクラスSamples.Person(namespace: SAMPLES) からパラメーターのプロパティをダンプできません。

このクラスは Studio では次のようになります。

Class Sample.Person Extends (%Persistent, %Populate, %XML.Adaptor)
{

Parameter EXTENTQUERYSPEC = "Name,SSN,Home.City,Home.State";

// etc etc
} 

手順のコードは次のとおりです。

CREATE PROCEDURE CacheQc.getParamDesc(
    IN className VARCHAR(50),
    IN methodName VARCHAR(50),
    OUT description VARCHAR(8192),
    OUT type VARCHAR(50),
    OUT defaultValue VARCHAR(1024)
) RETURNS NUMBER LANGUAGE COS {
    set ref = className _ "||" _ methodName
    set row = ##class(%Dictionary.ParameterDefinition).%OpenId(ref)

    if (row = "") {
        quit 1
    }

    set description = row.Description
    set type = row.Type
    set defaultValue = row.Default

    quit 0
}

そしてJavaコード:

private void getParamDetail(final String className, final String paramName)
    throws SQLException
{
    final String call
        = "{ ? = call CacheQc.getParamDesc(?, ?, ?, ?, ?) }";

    try (
        final CallableStatement statement = connection.prepareCall(call);
    ) {
        statement.registerOutParameter(1, Types.INTEGER);

        statement.setString(2, className);
        statement.setString(3, paramName);

        statement.registerOutParameter(4, Types.VARCHAR);
        statement.registerOutParameter(5, Types.VARCHAR);
        statement.registerOutParameter(6, Types.VARCHAR);

        statement.executeUpdate();

        final int ret = statement.getInt(1);

        // HERE
        if (ret != 0)
            throw new SQLException("failed to read parameter");

        System.out.println("    description: " + statement.getString(4));
        System.out.println("    type       : " + statement.getString(5));
        System.out.println("    default    : " + statement.getString(6));
    }
}

さて、前述のクラス/パラメーターのペアでは、マークされた条件が常にトリガーされるため、例外がスローされます...行全体をコメントすると、3つのパラメーターすべてがnullであることが// HEREわかります.OUTdefaultValue

後者にはスタジオで言及されている値があると予想していました...

それで、なぜこれが起こるのですか?私の手順は多少壊れていますか?

4

2 に答える 2