1

私はHANAスタジオの新参者ですので、失礼します。

SAP HANA Studio で関数を作成中にエラーが発生しました。これが私の機能です:

CREATE FUNCTION "PAYROLLDBTEST".GetAbsenteeismDays
(
-- Add the parameters for the function here
EmpID integer,
StartDate Datetime,
EndDate Datetime
)
RETURNS AbsDays float
LANGUAGE SQLSCRIPT   
SQL SECURITY INVOKER 
AS
AbsDays float;
BEGIN

 (SELECT SUM(DATEDIFF(DAY, "fromDate", "toDate") + 1) AS AbsentDays into AbsDays
                FROM HEM1
WHERE "empID" = :EmpID AND "fromDate" BETWEEN :StartDate AND :EndDate
                 AND "toDate" BETWEEN :StartDate AND :EndDate
                 );
RETURNS AbsDays;

エラー :

"Could not execute 'CREATE FUNCTION "PAYROLLDBTEST".GetAbsenteeismDays ( -- Add the parameters for the function here ...' in 2 ms 807 µs . SAP DBTech JDBC: [257] (at 576): SQL 構文エラー: 構文が正しくありません「RETURNS」の近く: 行 23 列 1 (位置 576 で)」

4

2 に答える 2

1

HANA には、テーブル関数スカラー関数の 2 種類の関数があります。

SAP HANA SQL Script Reference (SPS 07) によると、テーブル関数内で DDL および DML を使用することは許可されていません。スカラー関数は、いかなる種類の SQL ステートメントもサポートしません。

テーブルではなく値のみを返すため、スカラー関数を作成しようとしています。スカラー関数内で Select ステートメントを実行する前述の例は機能しません。ただし、関数を作成する代わりに、同じ機能を含むプロシージャを簡単に作成することもできます(実際に浮動小数点数を 1 つだけ取得する必要がある場合)。

CREATE PROCEDURE "PAYROLLDBTEST"."GetAbsenteeismDays" (
      in EmpID integer,
      in StartDate Datetime,
      in EndDate Datetime,
      out AbsentDays float )
   LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER 
   -- DEFAULT SCHEMA <Schema>
   READS SQL DATA AS
BEGIN
   SELECT SUM(DATEDIFF(DAY, "fromDate", "toDate") + 1) into AbsentDays
      FROM HEM1
      WHERE "empID" = :EmpID
         AND "fromDate" BETWEEN :StartDate AND :EndDate
         AND "toDate" BETWEEN :StartDate AND :EndDate
END;
于 2014-06-06T12:17:35.243 に答える
0

PROCEDURE@hoffman のソリューションの欠点は、射影で a を使用できないことです(WHEREクエリの -part のように)。

SELECT * FROM myTable WHERE "myProcedure"('param') > 5;

与える

cannot use procedure or table function in select projection column

スカラー関数の HANA 11 以降は SQL をサポートPROCEDUREているため、ここで sを使用する必要はありません( https://scn.sap.com/thread/3861611を参照) 。

ハッピー

于 2016-07-16T13:39:01.910 に答える