您的位置:首页 > 其它

SAP HANA AFL插件库升级后之前生成的存储过程升级方法(PAL升级方法)

2013-05-04 18:48 393 查看
在AFL库升级之后,之前创建的存储过程需要进行相应的升级,这个时候一般需要重新运行AFL_WRAPPER_GENERATOR。在前面的例子中,我们知道在重新运行该存储过程的时候,因为之前已经生成相应的存储过程,则一定会报错。如何应对这种情况?

之前已生成的实例:/article/4852496.html

SAPHANA提供两种方法:

1.手工删除之前的存储过程及表类型,再重新运行AFL_WRAPPER_GENERATOR。该方法在之前的文章中已有提及:

/article/4852499.html

DROPPROCEDURE_SYS_AFL.PAL_TS_S;
DROPTYPE_SYS_AFL.PAL_TS_S__TT_P1;
DROPTYPE_SYS_AFL.PAL_TS_S__TT_P2;
DROPTYPE_SYS_AFL.PAL_TS_S__TT_P3;

CALLSYSTEM.AFL_WRAPPER_GENERATOR('PAL_TS_S','AFLPAL','SINGLESMOOTH',PAL_TS_SIGNATURE);

2.SAPNote1830239提供解决方法,该文主要从该方法进行探讨

SAPNote1830239具体内容为:

Summary

Symptom

YourunAFL_WRAPPER_GENERATORandgetanerrorlike:

"SAPDBTechJDBC:[423]:liveCacheerror:[423]SYSTEM.AFL_WRAPPER_GENERATOR:line35col1(atpos1718):liveCacheerrorexception:liveCacheerror:registrationfinishedwitherrors,seeindexservertrace"

Andintheindexservertracethereisamessagelike:

"cannotuseduplicateuser-definedtypename-PAL_TS_S__TT_P2:line1col22(atpos21):line1col22(atpos21)"

Otherterms

AFLerror,PAL

ReasonandPrerequisites

YouareusingAFL_WRAPPER_GENERATORtogenerateaproceduretocallaPALApplicationFunction.Theprocedurewasalreadygeneratedbeforeinapreviouscalltothewrappergenerator.Nowyouarefacingduplicates.

ThePALmanualdescribeshowalltablestypesandtheprocedureitselfhavetobedroppedmanuallyinadvance.Butthisstepwasnotperfomed(successfully).

Solution

InsteadofdroppingallrelevanttabletypesandtheproceduremanuallythecounterparttoAFL_WRAPPER_GENERATORcalledAFL_WRAPPER_ERASERcanbeused.

Pleaseproceedasfollows:

1.ConnecttothedatabaseasuserSYSTEMviaHanaStudio.2.Copytheattachedfileafl_wrapper_eraser.txttoasqlwindowandexecuteit.3.Granttheexecutionofafl_wrapper_erasertotherelevantuser:grantexecuteonsystem.afl_wrapper_eraserto...

4.Connectasthisuserandrunsystem.afl_wrapper_eraserfortheprocedurecausingtrouble.

HeaderData

ReleaseStatus:ReleasedforCustomer
Releasedon:05.04.201311:20:16
MasterLanguage:English
Priority:Correctionwithmediumpriority
Category:Programerror
PrimaryComponent:BC-DB-HDB-AFLSAPHANAApplicationFunctionLibrary
AffectedReleases

Release-Independent

该Note所阐释的方法如下:

1.生成系统存储过程AFL_WRAPPER_ERASER。sql语句如下:

CREATEPROCEDUREafl_wrapper_eraser(INprocOrigVARCHAR(100))LANGUAGESQLSCRIPT
AS
v_numinteger:=0;
v_sqlscriptVARCHAR(32767):='';
procVARCHAR(32767):=UPPER(:procOrig);
CURSORc_parameter_table_nameFOR
SELECTTABLE_NAME
FROM"SYS"."TABLES"
WHERESCHEMA_NAME='_SYS_AFL'
ANDTABLE_NAMElike:proc||'__TT_P%';
BEGIN

--proc
selectcount(1)intov_numfromSYS.PROCEDURESwhereSCHEMA_NAME='_SYS_AFL'andPROCEDURE_NAME=:proc;
if:v_num>0then
v_sqlscript:='dropprocedure_SYS_AFL.'||proc;
exec:v_sqlscript;
endif;

--type
selectcount(1)intov_numfromSYS.TABLESwhereSCHEMA_NAME='_SYS_AFL'andTABLE_NAMElike:proc||'__TT_P%';
if:v_num>0then
v_sqlscript:='droptype_SYS_AFL.';
FORcur_row_detailASc_parameter_table_nameDO
v_sqlscript:=:v_sqlscript||cur_row_detail.TABLE_NAME;
exec:v_sqlscript;
v_sqlscript:='droptype_SYS_AFL.';
ENDFOR;
endif;

END;
2.如果运行该存储过程的为其他用户,我们需要对其他用户进行授权:

GRANTEXECUTEONSYSTEM.AFL_WRAPPER_ERASERTOUser1;

该方法会删除方法及相应的tabletype。

3.重新运行AFL_WRAPPER_GENERATOR。

实例如下:

CALLSYSTEM.AFL_WRAPPER_ERASER('PAL_TS_S');

CALLSYSTEM.AFL_WRAPPER_GENERATOR('PAL_TS_S','AFLPAL','SINGLESMOOTH',PAL_TS_SIGNATURE);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: