3

以前に作成したプロシージャを新しいプロシージャで呼び出そうとしています。何を試しても同じ行でエラーが発生します。私の元の行は次のとおりです。

CALL "PAYROLLDBTEST"."ABS_GetEmployeeHistoryDetail"(:EmpID)

これで、「関数またはプロシージャの名前が無効です: ABS_GETEMPLOYEEHISTORYDETAILS:」というエラーが発生しました。

次に、これで「PAYROLLDBTEST/ABS_GetEmployeeHistoryDe​​tail」(EmpID) を呼び出してみました

だから何が悪いのか教えてください。

編集:手順全体を次に示します:

CREATE PROCEDURE "PAYROLLDBTEST".GetEmploymentHistoryFunction 
(IN EmpID integer, IN StartDate timestamp, IN EndDate timestamp,OUT RETURNVALUE   NVARCHAR) 
LANGUAGE SQLSCRIPT 
AS 

BEGIN 
SELECT *, DAYS_BETWEEN("FromDate", "ToDate") + 1 AS "DaysCount" 
 FROM (SELECT "Code", "Name", "U_LineID", "U_empID", "U_Status", 
        CASE 
            WHEN ("ToDate" < :StartDate) THEN NULL 
            WHEN ("FromDate" > :EndDate) THEN NULL 
            WHEN ("FromDate" < :StartDate AND ("ToDate" BETWEEN :StartDate AND :EndDate)) THEN :StartDate 
            WHEN ("FromDate" < :StartDate AND "ToDate" > :EndDate) THEN :StartDate 
            WHEN (("FromDate" BETWEEN :StartDate AND :EndDate) AND
             ("ToDate" BETWEEN :StartDate AND :EndDate)) THEN "FromDate" 
            WHEN (("FromDate" BETWEEN :StartDate AND :EndDate) AND "ToDate" > :EndDate) THEN "FromDate" 
            WHEN ("ToDate" IS NULL AND "FromDate" < :StartDate) THEN :StartDate 
            WHEN ("ToDate" IS NULL AND ("FromDate" BETWEEN :StartDate AND :EndDate)) THEN "FromDate" 
        END AS "FromDate", 
        CASE 
            WHEN ("ToDate" < :StartDate) THEN NULL 
            WHEN ("FromDate" > :EndDate) THEN NULL 
            WHEN ("FromDate" < :StartDate AND ("ToDate" BETWEEN :StartDate AND :EndDate)) THEN "ToDate" 
            WHEN (("FromDate" BETWEEN :StartDate AND :EndDate) AND
             ("ToDate" BETWEEN :StartDate AND :EndDate)) THEN "ToDate" 
            WHEN ("FromDate" < :StartDate AND "ToDate" > :EndDate) THEN :EndDate 
            WHEN (("FromDate" BETWEEN :StartDate AND :EndDate) AND "ToDate" > :EndDate) THEN :EndDate 
            WHEN ("ToDate" IS NULL AND "FromDate" < :StartDate) THEN :EndDate 
            WHEN ("ToDate" IS NULL AND ("FromDate" BETWEEN :StartDate AND :EndDate)) THEN :EndDate 
        END AS "ToDate", "U_Position", "U_Project", "U_Sponsorship" 
    FROM (
    --select * from ABS_GetEmployeeHistoryDetails WHERE ("EmpID" IN (:EmpID))
  --select * from "PAYROLLDBTEST"."ABS_GetEmployeeHistoryDetails" WHERE ("EmpID" IN (:EmpID))
  CALL "PAYROLLDBTEST"."ABS_GetEmployeeHistoryDetails"(:EmpID,:RETURNVALUE);

 ) InnerQuery
 ) OuterQuery
 WHERE ("FromDate" between :StartDate and :EndDate OR "ToDate" between :StartDate and    :EndDate);


END;

ありがとう

4

3 に答える 3

2

まず、呼び出しようとしているスキーマにプロシージャが実際に配置されていることを確認してください(この場合はPAYROLLDBTEST )。

HANA Studio のカタログを見て確認できます。カタログを開き、スキーマPAYROLLDBTESTを開き、 Proceduresフォルダーを開きます。手順は、このフォルダーに配置する必要があります。そうでない場合は、このフォルダーを更新してみてください。プロシージャがまだそこにない場合は、間違いなく別のスキーマに格納されています。

次に、正しい量のパラメーターを使用してプロシージャーを呼び出していることを確認してください

あなたの言及された手順には、入力パラメーターのように見えるEmpIDパラメーターが1つしかないようです。プロシージャの名前はGetEmployeeHistoryDe​​tailであるため、2 番目のパラメータとして少なくとも 1 つの出力パラメータがあると仮定します (従業員履歴の詳細を取得するため)。その場合は、次のようにプロシージャを呼び出す必要があります (別のプロシージャ内にいて、内部プロシージャの出力をスカラー変数またはテーブル変数で使用したい場合)。

declare someOutputVariable bigint;
CALL "PAYROLLDBTEST"."ABS_GetEmployeeHistoryDetail" (:EmpID, :someOutputVariable);

または、out パラメータがテーブル変数の場合。someTableVariableは、直接外部プロシージャの出力パラメーターにすることもできます。

PROCEDURE "SOMESCHEMA"."yourProcedure" (
      in someInputParameter1 NVARCHAR(255),
      in someInputParameter2 BIGINT,
      out someOutputParameter1 BIGINT,
      out yourSubProcedureOutputParameter "SOMESCHEMA"."some_tabletype") 
   LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER AS
BEGIN
    // ... (other code logic)
    CALL "PAYROLLDBTEST"."ABS_GetEmployeeHistoryDetail" (:EmpID, :yourSubProcedureOutputParameter);
END;
于 2014-06-09T12:38:27.843 に答える
0

ステートメントの一部のCALL内部では実行できません。FROMSELECT

手順は次のようになります。

CALL "PAYROLLDBTEST"."ABS_GetEmployeeHistoryDetails"(:EmpID,:TEMP);

SELECT fields
FROM (
  SELECT fields, case1, case2
  FROM ( SELECT * FROM :TEMP ) InnerQuery
) OuterQuery
WHERE (conditions);
于 2015-03-17T09:50:51.987 に答える
0

プロシージャは _SYS_BIC スキーマから呼び出す必要があります。次の呼び出しを試してください。

call "_SYS_BIC"."PAYROLLDBTEST/ABS_GetEmployeeHistoryDetail"(:EmpID)
于 2014-06-09T08:40:52.437 に答える