0

SQLでストアド プロシージャを学習するのは初めてです。

自動データから値を計算で挿入するストアドプロシージャを作成したい。

Attendance:

EMPL_KODE |EMPL_NAME  |DATE_IN    |TIME_IN |TIME_OUT|TIME_IN |TIME_OUT
001       | Michel    |25.04.2016 |06:50   |15:40   |        |
002       | Clara     |25.04.2016 |06:15   |15:43   |        |
003       | Rafael    |25.04.2016 |06:25   |15:45   |        |
001       | Michel    |26.04.2016 |06:23   |15:42   |        |
002       | Clara     |26.04.2016 |06:10   |15:41   |        |
003       | Rafael    |26.04.2016 |06:30   |15:42   |        |
001       | Michel    |27.04.2016 |06:33   |15:42   |        |
002       | Clara     |27.04.2016 |06:54   |15:44   |        |
003       | Rafael    |27.04.2016 |07:00   |15:45   |        |

ストアド プロシージャを作成して、値を自動的TIME_INに入力したいと考えています。TIME_OUTコードは次のとおりです。

CREATE PROCEDURE InsertTotalEmployee
    @TOTAL_MINUTES int,
    @TOTAL_HOURS float
AS
BEGIN
    INSERT INTO ATTENDANCE (TOTAL_MINUTES, TOTAL_HOURS)
    VALUES (
       SELECT 
           DATEDIFF(MINUTE, ATTENDANCE.TIME_IN, ATTENDANCE.TIME_OUT),
           DATEDIFF(MINUTE, ATTENDANCE.TIME_IN, ATTENDANCE.TIME_OUT) / 60.0
    )
END 

ステートメントを作成して実行すると、メッセージ エラーが発生します。

トークン不明 - 行 2、列 5 @

Flamerobin を使用してコードを実行します。

4

1 に答える 1

1

Firebird で Microsoft SQL Server 構文を使用しようとしているようですが、うまくいきません。

1@つには、識別子では (二重引用符を使用しない限り) をそのように使用することはできず、パラメーターのリストは括弧で囲む必要があります。

の構文を参照してくださいCREATE PROCEDURE。次のように変更する必要があります。

CREATE PROCEDURE InsertTotalEmployee(TOTAL_MINUTES int, TOTAL_HOURS float)

floatまた、データ型をに変更することもできます。ストアド プロシージャの本体は、何も選択していないため (選択するにはテーブルが必要です)、ステートメントの末尾にセミコロンがdouble precisionないため、不完全に見えます。select

全体として、 Firebird language referenceを調べてから、機能する挿入を作成してから、その周囲にストアド プロシージャを作成することをお勧めします。

また、Flamerobin でストアド プロシージャを作成する場合は、ステートメント ターミネータを切り替える必要があることに注意してください。set termそうしないと、Flamerobin はストアド プロシージャを正しく送信できません。Procedural SQL (PSQL) Statementsの最初のセクションも参照してください。

于 2016-06-27T09:29:51.263 に答える