如何克服" SAP DBTech JDBC:[467]:无法使用参数变量:"?

2020-08-22 15:16发布

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

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


我正在尝试创建如下所示的存储过程。 但是无论我做什么,我似乎都无法解析它。 我总是会收到此错误。 在这方面的任何帮助将不胜感激。 提前致谢。

/*****

SAP DBTech JDBC:[467]:无法使用参数变量:V_LAST_RUN_DATE:

****/

ALTER PROCEDURE" MY_SCHEMA"。" MY_STOREDPROC"

语言SQLSCRIPT

AS

开始声明v_last_run_date时间戳;

在MY_TIME_TABLE的MY_TIME_TABLE中将max(MY_TS)选择为v_last_run_date。NAME='SOMETHING';

创建表" MY_SCHEMA"。" THE_TABLE_TO_POPULATE"

AS(

选择A.ATT_1

,B.ATT_2

,C.ATT_3

,D.ATT_4

从" MY_SCHEMA"。" TABLE_A" A

INNER JOIN" MY_SCHEMA"。" TABLE_B" B在A.JKEY = B.JKEY上

INNER JOIN" MY_SCHEMA"。" TABLE_C" C ON B.KKEY = C.KKEY

INNER JOIN" MY_SCHEMA"。" TABLE_C" D ON C.LKEY = D.LKEY

输入A.ID(选择E.PAT_ID

FROM" MY_SCHEMA"。" TABLE_X" M

内联接" MY_SCHEMA"。" TABLE_X" R ON M.ID = R.ID

INNER JOIN" MY_SCHEMA"。" TABLE_X" E ON R.ANOTHER_ID = E.ANOTHER_ID

内部联接(从" MY_SCHEMA"中选择SOME_ATT。" SOME_TABLE" THE_TS> = v_last_run_date)C ON M.ID = C.SOME_ATT)); 承诺; END;

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

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


我正在尝试创建如下所示的存储过程。 但是无论我做什么,我似乎都无法解析它。 我总是会收到此错误。 在这方面的任何帮助将不胜感激。 提前致谢。

/*****

SAP DBTech JDBC:[467]:无法使用参数变量:V_LAST_RUN_DATE:

****/

ALTER PROCEDURE" MY_SCHEMA"。" MY_STOREDPROC"

语言SQLSCRIPT

AS

开始声明v_last_run_date时间戳;

在MY_TIME_TABLE的MY_TIME_TABLE中将max(MY_TS)选择为v_last_run_date。NAME='SOMETHING';

创建表" MY_SCHEMA"。" THE_TABLE_TO_POPULATE"

AS(

选择A.ATT_1

,B.ATT_2

,C.ATT_3

,D.ATT_4

从" MY_SCHEMA"。" TABLE_A" A

INNER JOIN" MY_SCHEMA"。" TABLE_B" B在A.JKEY = B.JKEY上

INNER JOIN" MY_SCHEMA"。" TABLE_C" C ON B.KKEY = C.KKEY

INNER JOIN" MY_SCHEMA"。" TABLE_C" D ON C.LKEY = D.LKEY

输入A.ID(选择E.PAT_ID

FROM" MY_SCHEMA"。" TABLE_X" M

内联接" MY_SCHEMA"。" TABLE_X" R ON M.ID = R.ID

INNER JOIN" MY_SCHEMA"。" TABLE_X" E ON R.ANOTHER_ID = E.ANOTHER_ID

内部联接(从" MY_SCHEMA"中选择SOME_ATT。" SOME_TABLE" THE_TS> = v_last_run_date)C ON M.ID = C.SOME_ATT)); 承诺; END;

付费偷看设置
发送
2条回答
SAP浪
1楼-- · 2020-08-22 15:17

您不能在"创建表"语句中使用v_last_run_date。 要么使用动态sql(我不推荐),要么在Create Table语句(定义表)和insert语句(可以使用v_last_run_date)中拆分语句。

通常, 对于表的创建,我的程序尚不清楚。 如果多次执行相同的程序怎么办? 万一您没有在每次执行之前删除表,它将失败。

微wx笑
2楼-- · 2020-08-22 15:17

谢谢。 我认为就是这样。 为了简化将其发布到此处的工作,我在代码删除表的地方排除了代码。 实际上,现在我对下降有疑问。 在我的存储过程中,如果表存在,我试图先删除该表,再调用另一个存储过程。 看起来就是这样-

/*************************

创建过程CDWH.SP_DROP_TABLE_IF_EXISTS(

IN v_schema varchar(50),

IN v_table varchar(50))

语言SQLSCRIPT

AS

开始

DECLARE v_rowcount int:= 0;

SELECT TABLE_NAME

从" SYS"到"表"。

SCHEMA_NAME =:v_schema

AND TABLE_NAME =:v_table;

v_rowcount:= :: ROWCOUNT;

如果v_rowcount> 0,然后

EXEC'DROP TABLE'||:v_schema ||'。'||:v_table;

END IF;

END;

*****************************/

当我在其他存储过程中调用此存储过程时,这似乎没有任何作用,因为它似乎没有删除表,并且调用上述存储过程的存储过程失败,表明存在重复表 在架构中。 这是上面存储的proc试图删除的表。 但是,如果我手动并分别运行上述存储的proc,然后再运行其他存储的proc,它似乎可以工作。 这意味着在其他存储过程中调用上述存储过程不起作用。

您有这些问题吗? 有什么我做不对的事情吗?

预先感谢。

一周热门 更多>