点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我的代码如下所示。
步骤" b.c ..."(IN ID INTEGER,IN btch_id NVARCHAR(255))
语言SQLSCRIPT
SQL安全调用程序
--DEFAULT SCHEMA <默认模式名称>
-开始读取SQL数据/***************************************** >
编写过程逻辑****************************************/
DECLARE i整数= 0;
DECLARE col NVARCHAR(2550)='COL_1';
DECLARE标识符NVARCHAR(255)='';
DECLARE oIncr INTEGER;
DECLARE Countofrec整数;
DECLARE PRECOLUMNLIST NVARCHAR(2000);
SELECT COUNT(*)INTO Countofrec FROM(select ........);
对于我来说1 ..:Countofrec DO
oIncr =:i + 1;
标识符= CONCAT('COL_',:oIncr);
SELECT CONCAT(CONCAT(:col,','),:identifier)从" DUMMY"转换为col;
IF:oIncr =:Countofrec然后中断;
END IF;
END FOR;
PRECOLUMNLIST =('a,b,c,d');
立即执行('SELECT'||:PRECOLUMNLIST ||','||:col ||'FROM" table" WHATE BATCH_ID'||'='||::btch_id);
END
错误:
错误:(dberror)[1288]:表达式不能用作分配目标:'1553624925331'
" 1553624925331"是我通过的输入值
在使用动态sql时,我做了几件事,发现对故障排除有帮助。
第一个只是构建语句字符串时的格式化内容,我将每个元素放在自己的行上。 这样可以避免眼睛疲劳解析较长的线条; 可以更容易地看到每个带引号的字符串都具有开始和结束引号,并且每个串联运算符都正确键入。 即代替
立即执行('SELECT'||:PRECOLUMNLIST ||','||:col ||'FROM" TABLE" WHATE BATCH_ID'||'='||:btch_id);
我会改写为
立即执行(
'SELECT'
||::PRECOLUMNLIST
||','
||:col
|| 'FROM" table" WHERE BATCH_ID'
||'='<----一行中两个带引号的字符串可以合并
||:btch_id
);
第二个建议是声明一个变量以保存构造的SQL语句,以便在开发过程中可以打印出来以验证该语句正确无误,并在传递给EXECUTE进行执行之前希望得到期望的结果。 您可以在满足所有条件的情况下简单地注释掉打印语句,然后将其保留在那里以备将来调试。 (我假设HANA的EXECUTE IMMEDIATE可以接受变量;我的经验是使用Adaptive Server。)
干杯,
-bret
一周热门 更多>