有关程序的问题

2020-09-12 11:45发布

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

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


你好

通过proc中的动态sql,我设法产生了几个更新语句。

这是通过循环发生的,每次,我将当前结果保存到另一个变量中

var:= var ||; current_var;

当循环结束时,我正在尝试执行var,exec:var;

,但如果失败。 我用进行了测试,从dummy选择:var;

,然后将我复制的结果粘贴到tab上,就可以了。

SAP DBTech JDBC:[257]:sql语法错误:" xxxxxxxxxx"。"(DO语句)":第65行第3行(在pos 1737):" UPDATE"附近的语法不正确:

谢谢。

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

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


你好

通过proc中的动态sql,我设法产生了几个更新语句。

这是通过循环发生的,每次,我将当前结果保存到另一个变量中

var:= var ||; current_var;

当循环结束时,我正在尝试执行var,exec:var;

,但如果失败。 我用进行了测试,从dummy选择:var;

,然后将我复制的结果粘贴到tab上,就可以了。

SAP DBTech JDBC:[257]:sql语法错误:" xxxxxxxxxx"。"(DO语句)":第65行第3行(在pos 1737):" UPDATE"附近的语法不正确:

谢谢。

付费偷看设置
发送
3条回答
Violet凡
1楼 · 2020-09-12 12:35.采纳回答

使用动态SQL,您只需执行一条语句即可。 您想要做的是,在一个变量中收集多个Update语句,然后使用一个EXEC命令执行它。 这是不可能的。 您必须逐步执行语句。

当您通过上述查询获得Update语句并在SQL控制台(我假设)中执行它们时,它就可以工作,因为SQL控制台会逐步执行这些语句。

悠然的二货
2楼-- · 2020-09-12 12:25

您能显示完整的编码吗?

愤怒的猪头君
3楼-- · 2020-09-12 12:23

您好,

我有一个表S2_TO_BE_PIVOTED,其中有3列

" NOTIFICATION_ID",
" TM_TERM",
" TF_IDF"


从那里我再创建两个,

TBL1:rn1,rn2,notification_id,tm_term,tf_idf颜色

一个具有每个通知的行号(以便知道我在哪个通知)。(列= rn1)

还有一个具有每个通知的行号和TM_TERM(在我的示例中,值为889),实际上这是我必须添加的新列。(column = rn2)

变量:rn2(如上所述)和tm_term

我设法在TARGET_表的各列上创建所需的DDL:

notification_id,clm1 ..... clm889(根据上述值)。

现在,我必须根据以下代码更新目标之一。

开始

 DECLARE v_count INT默认值1;
 声明STEP0 VARCHAR(1000);
 声明STEP1 VARCHAR(1000);
 声明STEP2 VARCHAR(100000);
 声明STEP3 CHAR(1000);
 声明STEP33 VARCHAR(100000)默认值'';
 声明STEP333 VARCHAR(100000)默认值'';
 声明STEP4 VARCHAR(100);
 十进制rn_ INTEGER;
 -
 声明IN_SCHEMA_NAME VARCHAR(100):='IXXXXXXX';
 声明IN_TABLE_NAME VARCHAR(100):='S2_TO_BE_PIVOTED';
 -

   
    选择'"'|||列名||'"'
    进入step4
  来自TABLE_COLUMNS
  其中TABLE_NAME =:IN_TABLE_NAME
  和位置= 2;
 
 
    
  exec'从''||:IN_TABLE_NAME ||'"'选择rn(计数(区别于'|| :: step4 ||'))到rn_;
 
 
 
  当rn_> =:V_COUNT DO
   EXEC'设置架构'||:IN_SCHEMA_NAME;

 选择
  '||(从" VARIABLE_"中选择UPPER(VARIABLE),而RN2 =:V_COUNT)||'" =B。" ||(从" TARGET_" A," TBL1" B SETA。
  (从以下位置选择" COLUMN_NAME":
  从TABLE_COLUMNS中选择MAX(POSITION)OVER()作为MAX_,POSITION,COLUMN_NAME
  WHERE TABLE_NAME ='TBL1'
  )WHERE MAX_ = POSITION)||'"
 A." RN1" = B." RN1"
  AND A." RN2" = B." RN2"
  AND A。"'||(从TABLE_COLUMNS中选择COLUMN_NAME
  WHERE TABLE_NAME ='TBL1'
    AND POSITION = 3)||''" = B。"'||  (从TABLE_COLUMNS中选择COLUMN_NAME
  WHERE TABLE_NAME ='TBL1'
    AND POSITION = 3)||'"
  AND(以大写(B。"'||
  (从TABLE_COLUMNS中选择COLUMN_NAME
  WHERE TABLE_NAME ='TBL1'并且位置= 4)
  ||'"
  )='''||(
 在RN2 =:V_COUNT的" VARIABLE_"中选择上限(变量)

 )||''''THEN 1 ELSE 0 END)= 1
 AND A." NOTIFICATION_ID" = 20471340;'
 进入STEP3
 来自DUMMY;
 v_count:= v_count +1;

  STEP33:= STEP33 || :: STEP3;

 结束时;
  
 执行:STEP33;



 结束; 

如果不是

 EXEC:STEP33; 

我写,

从虚拟对象中选择:STEP33; 

我设法获取所有更新语句,并且我可以直接执行它们,

但是当我运行初始字母时,出现以下错误,

无法执行'开始开始DECLARE v_count INT DEFAULT 1; 声明STEP0 VARCHAR(1000); 声明STEP1 VARCHAR(1000); ...'在1.122秒内。
SAP DBTech JDBC:[257]:sql语法错误:" IXXXXXX"。"((DO语句)":第67行第1行(在pos 1721):在" DO"附近的语法不正确:第12行第1行(在pos 320)

谢谢。

一周热门 更多>