0

私はSQLAnywhereを使用していて、関数を作成していますが、int(時間と分)を時間に変換する際に少し問題があります。手伝って頂けますか?

ALTER FUNCTION "DBA"."VisitTime"
RETURNS TIME
DETERMINISTIC
BEGIN
     DECLARE "timeV" time
     DECLARE hourV integer;
     DECLARE minuteV integer;
     DECLARE minutesV integer;
     SELECT HOUR(CURRENT TIME) as hourV;
     SELECT MINUTE(CURRENT TIME) as minuteV;
     IF minuteV BETWEEN 0 and 29
     THEN SET minutesV = 30;
     END IF;
     IF minuteV between 30 and 59
     THEN SET minutesV = 00;
          SET hourV = hourV + 1;
          IF hourV >= 24 THEN SET hourV = 0;
          END IF;
     END IF;

     SET timeV = CAST(hourV || ':' || minutesV as time);
RETURN "timeV";
END;

私は何を間違えますか?これを実行しようとすると、エラーが発生します(「VisitTimeで結果セットが許可されていません」)

4

1 に答える 1

0

私はsqlanywhereの人ではありませんが、決定論的とは、同じデータと同じ入力/クエリが与えられた場合、同じ出力が得られることを意味します。別の言い方をすれば (SQL Server のドキュメント)

決定論的関数は、特定の一連の入力値を指定して呼び出され、データベースの状態が同じである場合、常に同じ結果を返します。非決定論的関数は、アクセスするデータベースの状態が同じであっても、特定の入力値のセットで呼び出されるたびに異なる結果を返す場合があります。

あなたの場合、あなたの関数は CURRENT TIME を参照し、単に時間が経過するだけで結果が異なるため、関数を非決定論的にします。

于 2011-03-02T17:35:05.153 に答える