簡體   English   中英

存儲過程 sap hana 中的自定義表類型

[英]custom table type in stored procedure sap hana

我是 sap hana 世界的新手。 我正在嘗試使用存儲過程來更新信息。 我想發送帶有字段名稱、字段值和行 ID 的自定義表類型。 我創建了這種類型:

CREATE TYPE t_field AS TABLE (
   ID INTEGER,
   FLD VARCHAR(100),
   VAL VARCHAR(100));

我在這個過程中使用了它:

    PROCEDURE "_SYS_BIC"."Match.procedures::updateAnag" (
    in tfield tt_field,
    out error tt_error
 ) 

 LANGUAGE SQLSCRIPT
 SQL SECURITY INVOKER 
 DEFAULT SCHEMA "_SYS_BIC"
 AS

BEGIN

     declare _id integer; 
     declare _field varchar(100);
     declare _value varchar(100);

     select ID, F_NAME, F_VALUE
     into _id, _field, _value
     from :tfield;

    IF(_field = '' OR _value = '') THEN
        error = SELECT 400 AS http_status_code,
                 'empty field' as error_message,
                  'All fields must be filled' as detail from dummy;
    ELSE

    IF (_field = 'name') THEN
        UPDATE "_SYS_BIC"."TEST_TABLE" 
        SET NAME = _value
        WHERE ID = _id;
    END IF;

    IF (_field = 'surname') THEN
        UPDATE "_SYS_BIC"."TEST_TABLE" 
        SET SURNAME = _value
        WHERE ID = _id;
    END IF;

    END IF;

END; 

但是當我嘗試激活代碼時,eclipse 返回給我這個錯誤:'sap-ui-core.js:159 2016-07-19 17:45:47.751550 出現以下問題:HTTP request failed400,Bad Request,Request contains properties實體“anagType”中不存在的。 ——'

有人可以幫我修復它或向我展示更好的方法嗎?

好吧,從 SQLSCript 代碼的角度來看,我想說的一個問題是,當您使用變量(如 _value 或 _id)時,需要在它們前面加上冒號:

    CREATE PROCEDURE "_SYS_BIC"."Match.procedures::updateAnag" (
    in tfield tt_field,
    out error tt_error
 ) 

 LANGUAGE SQLSCRIPT
 SQL SECURITY INVOKER 
 DEFAULT SCHEMA "_SYS_BIC"
 AS

BEGIN

     declare _id integer; 
     declare _field varchar(100);
     declare _value varchar(100);

     select ID, F_NAME, F_VALUE
     into _id, _field, _value
     from :tfield;

    IF(:_field = '' OR _:value = '') THEN
        error = SELECT 400 AS http_status_code,
                 'empty field' as error_message,
                  'All fields must be filled' as detail from dummy;
    ELSE

    IF (:_field = 'name') THEN
        UPDATE "_SYS_BIC"."TEST_TABLE" 
        SET NAME = :_value
        WHERE ID = :_id;
    END IF;

    IF (:_field = 'surname') THEN
        UPDATE "_SYS_BIC"."TEST_TABLE" 
        SET SURNAME = :_value
        WHERE ID = :_id;
    END IF;

    END IF;

END; 

另一個問題是您沒有在 IF 語句的第二個分支中初始化表變量錯誤。

雖然不太確定,這一切與您的錯誤消息有什么關系。 您可能希望首先自行調用和測試該過程,然后查看與 xsjs 頁面的連接為何無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM