我可以在调用过程中将表添加为参数吗?

2020-08-20 07:58发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


找到了一个博客,该博客可以输出如下表,

创建过程PROC_DUMMY(在int,in b int,out c int,out d DUMMY,out e TABLES中)
  语言sqlscript
  将sql数据读取为
 开始
  c:=:a +:b;
  d =从DUMMY中选择*;
  e =从表中选择*;
 结束
 client.prepare('call PROC_DUMMY(?,?,?,?,?)',function(err,statement){
  如果(错误){
  返回console.error('准备错误:',err);
  }
  statement.exec({
  答:3,
  B:4
  },函数(错误,参数,dummyRows,tableRows){
  如果(错误){
  返回console.error('Exec error:',err);
  }
  console.log('Parameters:',parameters);
  console.log('Dummies:',dummyRows);
  console.log('Tables:',tableRows);
  });
 });
 

如何添加表作为输入参数并执行它?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


找到了一个博客,该博客可以输出如下表,

创建过程PROC_DUMMY(在int,in b int,out c int,out d DUMMY,out e TABLES中)
  语言sqlscript
  将sql数据读取为
 开始
  c:=:a +:b;
  d =从DUMMY中选择*;
  e =从表中选择*;
 结束
 client.prepare('call PROC_DUMMY(?,?,?,?,?)',function(err,statement){
  如果(错误){
  返回console.error('准备错误:',err);
  }
  statement.exec({
  答:3,
  B:4
  },函数(错误,参数,dummyRows,tableRows){
  如果(错误){
  返回console.error('Exec error:',err);
  }
  console.log('Parameters:',parameters);
  console.log('Dummies:',dummyRows);
  console.log('Tables:',tableRows);
  });
 });
 

如何添加表作为输入参数并执行它?

付费偷看设置
发送
5条回答
Violet凡
1楼-- · 2020-08-20 08:41

SAP HANA客户端编程接口(如节点接口)无法创建/填充表类型的输入参数。

一种解决方法是在前部创建本地临时表(其结构与输入相同) 参数)在HANA上通过接口填充,并通过接口填充。

下面是使用@ sap/hana-client模块的简单示例:

 const client = require(  " @ sap/hana-client");
 const conn = client.createConnection();
 conn.connect(
   {
     serverNode:" hanahost:hanaport",
     uid:"用户",
     pwd:"密码",
   },
   (错误)=> {
     如果(错误){
       console.log(err);
       返回;
     }

    //创建本地临时表
     conn.exec(
       `CREATE local TEMPORARY column TABLE" MISC"。"#MISCTMPTAB01"如" MISC"。" MISC_NVARCHAR",
       (错误)=> {
         如果(错误){
           console.log("创建临时表错误:" + JSON.stringify(err));
           返回;
         }

        //将数据插入本地临时表
         conn.exec(`INSERT INTO" MISC"。"#MISCTMPTAB01" VALUES(1,'Test')`,(err)=> {
             如果(错误){
               console.log(`临时表插入错误:$ {JSON.stringify(err)}`);
               返回;
             }

            //调用过程(临时表的名称作为表键入的参数的参数值)
             conn.prepare(`call" MISC"。" test.misc.procedures :: P_PASS_TABLE"(" MISC"。"#MISCTMPTAB01",?)`,(err,statement)=> {
                 如果(错误){
                   console.log(`语句准备错误:$ {JSON.stringify(err)}`));
                   返回;
                 }

                 statement.exec([],(err,procResult)=> {
                   如果(错误){
                     console.log(`语句执行错误:$ {JSON.stringify(err)}`);
                     返回;
                   }

                   console.log(`过程返回结果:$ {JSON.stringify(procResult)}`);
                 });
               }
             );
           }
         );
       }
     );
   }
 );
 
Tong__Ming
2楼-- · 2020-08-20 08:47

大家好,

通过传递数组数组进行了以下尝试---->认为它将被视为表,但未成功。

 var ss =" CALL \" Wvr_PROD \"。\" nt_fixed.wsr_db.exp_procedures :: testr_status_create \"(?,?)";
 client.connect(function(err){
 如果(错误){

 返回console.error('Connect error',err);
 }
 client.prepare(ss,function(err,statement){
//console.log([a]);
 如果(错误){
     返回console.error('准备错误:',err);
 }
 statement.exec([[12276," INP"," TEST.COM"," req_payload.C​​OMMENT"]],函数(错误,参数,dummyRows,tableRows){
     如果(错误){
     返回console.error('Exec error:',err);
     }
     console.log('Parameters:',parameters);
     console.log('Dummies:',dummyRows);
     console.log('Tables:',tableRows);
 });
 });
 });
 
槿木_熙
3楼-- · 2020-08-20 08:57

尊敬的Jai

您需要创建一个表类型-然后按如下所示使用它

创建类型TT_TYPE AS TABLE(VARCHAR(50  ),
                                 整数
                                 D CHAR(10));

 创建步骤MYPROCEDURE(在OUT_TABLE TT_TYPE中)
 语言SQLSCRIPT
 读取SQL数据
 如
 开始
    <您的声明>
 结束;
 

致谢,

Venkat

代楠1984
4楼-- · 2020-08-20 08:44

非常感谢。。 Florian Pfeffer 。 一定会尝试的:-)

最好

Jai

天桥码农
5楼-- · 2020-08-20 08:54

尊敬的Venkat,

感谢您的回复:-)

可以在HANA数据库中创建必要的步骤,但是我无法从作为表的NodeJ中调用它。 并显示错误。 另外,我希望将该表作为输入参数。

步骤" nt_fixed.nt_db.exp_procedures :: testr_status_create"
 (
 在new_row" nt_fixed.nt_db.models :: ntr_exp_type_tables.tt_exp_fr_status"中,
 OUT RES_ID bigint
 )
 语言SQLSCRIPT
 SQL安全调用者
 --DEFAULT SCHEMA <默认模式名称>
 开始
 

一周热门 更多>