点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我们正在尝试调试从HANA上的NodeJS调用的存储过程。 我们可以调试存储过程,并且当通过UI选项尝试该过程时,该过程运行良好。 但是,当我们想通过web/nodeJS调用调试存储过程时,就会遇到问题。 我们可以毫无问题地调试NodeJS代码,但看不到传递给我们节点代码的变量:
这是我们的节点代码:
app.get("/img/getEmployeesUsingStoredProcedure",函数(要求,要求){ var client = req.db; var EMPLOYEE_ID = req.query.EMPLOYEE_ID; var LAST_NAME = req.query.LAST_NAME; var FIRST_NAME = req.query.FIRST_NAME; client.prepare( '调用" SAP_AD_HDB_1"。" getEmployeeDetails"(?,?,?,?)', 函数(错误,声明){ 如果(err){res.type(" text/plain")。status(500).send(" ERROR:" + err.toString()); 返回; } var inputParams =""; inputParams = { IM_EMPLOYEE_ID:EMPLOYEE_ID, IM_LAST_NAME:LAST_NAME, IM_FIRST_NAME:FIRST_NAME }; console.log(JSON.stringify(inputParams)); statement.exec(inputParams, 函数(错误,结果){ 如果(错误){ res.type(" text/plain")。status(500).send(" ERROR:" + err.toString()); 返回; }其他{ var result = JSON.stringify({ 对象:结果 }); res.type(" application/json")。status(200).send(result); } }); }); });
这是我们的存储过程:
/* 获取员工详细信息以及部门,部门,职务,职位,位置和工会的描述的过程 */ 程序" getEmployeeDetails"(在IM_EMPLOYEE_ID NVARCHAR(40)DEFAULT中,", 在IM_LAST_NAME NVARCHAR(50)DEFAULT''中, 在IM_FIRST_NAME NVARCHAR(50)DEFAULT''中, 出EX_EMPLOYEES表格( " EMPLOYEE_ID" NVARCHAR(40), " LAST_NAME" NVARCHAR(50), " FIRST_NAME" NVARCHAR(50), " MIDDLE_NAME" NVARCHAR(50), " NICKNAME" NVARCHAR(50), " STATUS" NVARCHAR(40), " TERMINATION_DATE" NVARCHAR(30), " SUPERVISOR" NVARCHAR(50), " PHONE1" NVARCHAR(30), "部门" NVARCHAR(50), " DEPARTMENT_DESCRIPTION" NVARCHAR(30), " DIVISION" NVARCHAR(50), " DIVISION_DESCRIPTION" NVARCHAR(50), " JOB_TITLE" NVARCHAR(50), " JOB_TITLE_DESCRIPTION" NVARCHAR(50), " POSITION" NVARCHAR(50), " POSITION_DESCRIPTION" NVARCHAR(30), " UNUSED1" NVARCHAR(50), " LOCATION" NVARCHAR(50), " LOCATION_DESCRIPTION" NVARCHAR(50), " HIRE_DATE" NVARCHAR(50), " REHIRE_DATE" NVARCHAR(50), " PHONE2" NVARCHAR(30), " EMP_UNION" NVARCHAR(50), " UNION_DESCRIPTION" NVARCHAR(50), " SEPARATION_DATE" NVARCHAR(30), " UNUSED2" NVARCHAR(50), " PROMOTION_DATE" NVARCHAR(30), " ID_CARD" NVARCHAR(50)) ) 语言SQLSCRIPT SQL安全调用程序 --DEFAULT SCHEMA <默认模式名称> -读取SQL数据 如 开始 /***声明变量***/ DECLVARE LV_SQL NVARCHAR(1000):=空; 十进制LV_TEMP_SQL NVARCHAR(1000):= null; LV_SQL:='选择a.EMPLOYEE_ID,a.LAST_NAME,a.FIRST_NAME,a.MIDDLE_NAME,a.NICKNAME,a.STATUS,a.TERMINATION_DATE,a.SUPERVISOR,a.PHONE1," || " a.DEPARTMENT,d.DEPARTMENT_DESCRIPTION,a.DIVISION,c.DIVISION_DESCRIPTION,a.JOB_TITLE,e.JOB_TITLE_DESCRIPTION,a.POSITION", 'f.POSITION_DESCRIPTION,a.UNUSED1,a.LOCATION,b.LOCATION_DESCRIPTION,a.HIRE_DATE,a.REHIRE_DATE,a.PHONE2,a.EMP_UNION,'|| 'g.UNION_DESCRIPTION,a.SEPARATION_DATE,a.UNUSED2,a.PROMOTION_DATE,a.ID_CARD'|| 'FROM" SAP_AD_HDB_1"。" SAP_AD.Employees" a'|| 'INNER JOIN" SAP_AD_HDB_1"。" SAP_AD。位置" b'|| '开(a.LOCATION = b.LOCATION)'|| 'INNER JOIN" SAP_AD_HDB_1"。" SAP_AD.Divisions" c'|| 'ON(a.DIVISION = c.DIVISION)'|| 'INNER JOIN" SAP_AD_HDB_1"。" SAP_AD。部门" d'|| '开(a.DEPARTMENT = d.DEPARTMENT)'|| 'INNER JOIN" SAP_AD_HDB_1"。" SAP_AD.JobTitles" e'|| '开(a.JOB_TITLE = e.JOB_TITLE_ID)'|| 'INNER JOIN" SAP_AD_HDB_1"。" SAP_AD.Positions" f'|| '开(a.POSITION = f.POSITION)'|| 'INNER JOIN" SAP_AD_HDB_1"。" SAP_AD.Unions" g'|| '打开(a.EMP_UNION = g.UNION_ID)'; LV_TEMP_SQL =:LV_SQL; IF(:IM_EMPLOYEE_ID <>''AND:IM_FIRST_NAME =''AND:IM_LAST_NAME ='')然后 LV_SQL =:LV_SQL || '其中EMPLOYEE_ID ='''|| :IM_EMPLOYEE_ID || ''; ELSEIF(:IM_FIRST_NAME <>''AND:IM_LAST_NAME =''AND:IM_EMPLOYEE_ID ='')然后 LV_SQL =:LV_SQL || '其中FIRST_NAME ='''|| :IM_FIRST_NAME || ''; ELSEIF(:IM_LAST_NAME <>''AND:IM_FIRST_NAME =''AND:IM_EMPLOYEE_ID ='')然后 LV_SQL =:LV_SQL || '其中LAST_NAME ='''|| :IM_LAST_NAME || ''; 万一; 立即执行(:LV_SQL)到EX_EMPLOYEES; 结束
存储过程无法从NodeJS调用中获取参数,我们也无法调试存储过程以进行确认。
我们尝试获取CURRENT_USER并将其放入HANA用户中,但出现错误:
我们获得了当前用户-通过:
我们可以使用该用户来调试存储过程吗? 我们需要一些权限吗?
此致
周杰伦
(171.0 kB)
我们弄清楚了为什么代码无法正常工作。 这是SAP HDB客户端无法正确将未定义的传递给SQL存储过程的问题,因此我们必须执行以下操作将输入参数初始化为",而不是作为未定义的传递:
仍然尝试从NodeJS中对存储过程进行调试-当涉及到该问题时,将撰写Blog。
-杰伊
一周热门 更多>