2017-12-14 17 views
1

次の単純なHSQLDBプロシージャをDbVisualizerクライアントで作成しようとしています。DbVisualizerでHSQLDBプロシージャを作成する

DROP PROCEDURE IF EXISTS my_procedure; 
CREATE PROCEDURE my_procedure(OUT my_output INTEGER, IN my_input INTEGER) 
     MODIFIES SQL DATA -- NO SQL 
     BEGIN ATOMIC 
       SET my_output = my_input; 
     END 

エラーメッセージ:

[CREATE - 0 rows, 0.001 secs] [Code: -5590, SQL State: 42590] unexpected end of statement: required: ; : line: 3 
[END - 0 rows, 0.000 secs] [Code: -5581, SQL State: 42581] unexpected token: END 
... 2 statement(s) executed, 0 rows affected, exec/fetch time: 0.001/0.000 sec [0 successful, 2 errors] 

それは;の解釈をthere is a problemのように見えますが、私はMySQldelimiterに相当HSQLDBで何かを見つけることができませんでした。

この問題を回避するにはどうすればよいですか?

答えて

1

DbVisualizerでは、DbVisualizer固有の区切り文字を使用できます。 Dbvisualizer documentationから

@delimiter ++; 

DROP PROCEDURE IF EXISTS my_procedure; 
CREATE PROCEDURE my_procedure(OUT my_output INTEGER, IN my_input INTEGER) 
     MODIFIES SQL DATA -- NO SQL 
     BEGIN ATOMIC 
       SET my_output = my_input; 
     END 
; 
++ 
@delimiter ;++ 

@delimiterコマンドで@delimiterコマンド

を使用して、あなたが一時的にDbVisualizerの区切りの文 を変更することができますが文を分離し、それらを送信するために使用しています を1つずつデータベースに追加します。複写ステートメントの前に使用し、ステートメントの後に を使用します。ステートメントにはステートメントが含まれています。 はここに例を示します

@delimiter ++; 
CREATE OR REPLACE FUNCTION HELLO (p1 IN VARCHAR2) RETURN VARCHAR2 
AS 
BEGIN 
RETURN 'Hello ' || p1; 
END; 
++ 
@delimiter ;++ 
@call ${returnValue||(null)||String||noshow dir=out}$ = HELLO('World'); 
@echo returnValue = ${returnValue}$; 

最初@delimiterコマンドが++よう デフォルトの区切り文字を設定します。デリミタは、CREATE ステートメントの関数本体内で使用できます。次に、++区切り文字を使用してCREATEステートメントを終了します。 と@delimiterコマンドによって区切り文字が設定されます。スクリプトの残りのコマンドは です。

関連する問題