SAP AMDP数据库存储过程实战:AMDP语法实例与TaoToken配置骨架
1. AMDP 开发环境搭建与 AI 辅助工具接入SAP AMDPABAP Managed Database Procedures是 ABAP 层管理 HANA 数据库存储过程的一套机制允许开发者在 ADTABAP Development Tools里用 SQLScript 编写数据库过程由 ABAP 类统一管理生命周期。它适合谁适合已经在做 SAP HANA 项目、需要在数据库层直接跑应用逻辑的 ABAP 开发者尤其是那些发现 CDS View 表达力不够、又不想脱离 ABAP 传输体系去单独维护 HANA 存储过程的人。我试过在纯 SAP GUI 里翻 AMDP 源码只能只读浏览改不了。真正写代码必须用 ADTEclipse 插件。而 ADT 本身没有 AI 补全写 SQLScript 时经常要来回查函数名、查$ABAP.type()的写法。所以这篇除了讲 AMDP 语法实例还会给出一套本地 AI 辅助开发工具的配置骨架——用统一的 Key/API 通道把代码补全接进你的编辑器让写 AMDP 时少翻文档。核心检索词先明确AMDP 语法实例、AMDP 数据库存储过程、SAP HANA SQLScript。下面从环境准备开始一步步给出可复制的配置和可运行的 AMDP 代码。1.1 前置条件清单在动手之前确认这几项SAP NetWeaver 7.40 SP08 以上底层是 HANA 数据库HDB。安装好 ADT版本建议 3.20 以上能连到你的 ABAP 项目。有一个可传输的开发包Package比如ZAMDP_DEMO。本地装了 VS Code 或 Cursor 之类的编辑器用来接 AI 补全。AMDP 类只能在 ADT 里开发SAP GUI 里用SE24打开只能看不能编辑。这一点先记住后面排障会用到。1.2 为什么要在本地接 AI 辅助写 AMDP 的痛点很集中SQLScript 的函数名和 ABAP 不一样DECLARE的类型引用要用$ABAP.type( ... )这种字符串写法游标循环的语法也和普通 ABAP 不同。每次写都要查效率低。把 AI 补全接进编辑器后你可以在写DECLARE CURSOR或record_count()时直接得到提示减少上下文切换。接入方式是用一个统一的 API 通道把模型能力接到编辑器的补全插件里。下面给出配置骨架。2. TaoToken 前置准备与统一 Key 通道TaoToken 在这里的角色是一个统一的模型 API 通道你申请一个 Key就能在本地编辑器、命令行工具里调用模型做代码补全和问答不用为每个工具单独配一套凭证。官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。2.1 申请 Key 与确认模型 ID登录后进控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。创建完复制那串 Key只显示一次。模型 ID 在文档里能查到常用的编码模型直接填对应 ID 即可文档地址 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。三个要素记牢后面所有配置都围绕它们Base URLhttps://taotoken.net/apiAPI Key你创建的那串Model ID文档里对应的模型标识2.2 验证 Key 是否可用在正式写配置前先用一条命令确认 Key 通。打开终端curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer 你的KEY \ -d { model: 你的模型ID, messages: [{role: user, content: 用一句话说明AMDP是什么}] }返回里如果choices数组有内容说明通道正常。如果返回 401先检查 Key 有没有复制全、有没有多余空格。这一步过了再往下配编辑器能省很多排查时间。3. 可复制配置骨架settings.json 与 config.toml这一节给两份可直接复制的配置。VS Code 系含 Cursor用settings.json命令行编码工具用config.toml。两份都遵循同一套 Base URL Key Model ID 三件套。3.1 VS Code / Cursor 的 settings.json如果你用的是支持 OpenAI 兼容接口的补全插件在用户设置里加这段。路径CtrlShiftP→ 输入Open Settings (JSON)→ 在打开的settings.json里追加{ aiAssistant.provider: openai-compatible, aiAssistant.baseUrl: https://taotoken.net/api, aiAssistant.apiKey: 你的KEY, aiAssistant.model: 你的模型ID, aiAssistant.completion.enable: true, aiAssistant.completion.languageOverrides: { abap: true, sql: true } }注意baseUrl结尾不要带/v1插件一般会自己拼。languageOverrides里把abap和sql打开写 AMDP 时补全才会触发。3.2 命令行工具的 config.toml如果你用命令行编码助手配置放在~/.config/你的工具/config.tomlWindows 在%USERPROFILE%\.config\下[provider] name taotoken base_url https://taotoken.net/api api_key 你的KEY model 你的模型ID [completion] enabled true max_tokens 2048 temperature 0.2 [context] include_extensions [abap, sql, cds]temperature设低一点代码补全要的是稳定不是发散。include_extensions把.abap、.sql、.cds都纳入上下文写 AMDP 时模型能看到你项目里的相关文件。3.3 配置生效验证改完配置重启编辑器。新建一个.abap文件敲DECLARE CURSOR看有没有补全弹出。如果没有先看插件日志里请求有没有发出去再对照第 5 节的报错排查。4. AMDP 语法实例与调用验证配置就绪后进入正题。AMDP 的本质是一个实现了标记接口if_amdp_marker_hdb的 ABAP 类方法上用特定关键字修饰方法体里写 SQLScript。4.1 定义 AMDP 类骨架在 ADT 里新建 ABAP 类ZCL_AMDP_DEMO定义部分CLASS zcl_amdp_demo DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES if_amdp_marker_hdb. CLASS-METHODS get_flydatas FOR TABLE FUNCTION ztest_tablef. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS.if_amdp_marker_hdb是标记接口实现它才表明这是 AMDP 类。FOR TABLE FUNCTION说明这个方法对应一个 CDS 表函数。4.2 实现方法体变量声明与游标循环实现部分方法用BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT修饰CLASS zcl_amdp_demo IMPLEMENTATION. METHOD get_flydatas BY DATABASE FUNCTION FOR HDB LANGUAGE SQLSCRIPT OPTIONS READ-ONLY USING spfli. DECLARE lv_index INT; DECLARE lt_return TABLE ( MANDT $ABAP.TYPE( MANDT ), CARRID $ABAP.TYPE( s_carr_id ), CONNID $ABAP.TYPE( s_conn_id ) ); DECLARE CURSOR lt_spfli FOR ( SELECT * FROM spfli ); lv_index : 1; FOR ls_spfli AS lt_spfli DO lt_return.mandt [:lv_index] : :ls_spfli.mandt; lt_return.carrid[:lv_index] : :ls_spfli.carrid; lt_return.connid[:lv_index] : :ls_spfli.connid; lv_index : :lv_index 1; END FOR; RETURN SELECT mandt, carrid, connid FROM :lt_return; ENDMETHOD. ENDCLASS.几个关键点变量用DECLARE类型引用用$ABAP.type( ... )字符串形式赋值用:游标用DECLARE CURSOR ... FOR ( SELECT ... )循环用FOR ... DO ... END FOR内表按角标赋值lt_return.mandt[:lv_index]。4.3 条件判断与常用函数条件判断和普通 ABAP 类似IF lv_index 1 THEN -- 处理第一行 ELSEIF lv_index 2 THEN -- 处理第二行 ELSE -- 其他 END IF;常用函数记几个record_count( :lt_table )算行数MOD( :lv_line, 2 )取余CURRENT_DATE/CURRENT_TIME取当前日期时间DAYS_BETWEEN( d1, d2 )算天数差HOUR()/MINUTE()/SECOND()从时间取值。4.4 定义 CDS 表函数并调用新建 CDS 表函数ZTEST_TABLEFEndUserText.label: TEST TABLE FUNCTION define table function ZTEST_TABLEF returns { key mandt : abap.clnt; key carrid : s_carr_id; key connid : s_conn_id; } implemented by method zcl_amdp_demoget_flydatas;然后在 ADT 里用Data Preview打开这个表函数或者写一段 ABAP 调用SELECT * FROM ztest_tablef INTO TABLE DATA(lt_result). cl_demo_outputdisplay( lt_result ).跑通后能看到SPFLI表里的航班数据被游标处理后返回。这一步成功说明 AMDP 从定义到调用整条链路通了。5. 常见报错排查写 AMDP 和配 AI 通道时报错集中在几个地方。下面按真实报错对照排查。5.1 401 Unauthorized请求返回 401说明 Key 没被接受。检查三处Key 有没有复制完整、Authorization头是不是Bearer 你的KEY格式、Base URL 有没有写错。如果 Key 里带了换行或空格也会 401。重新在控制台复制一次粘贴时注意别带首尾空白。5.2 local proxy failed编辑器插件报local proxy failed通常是本地代理端口没起来或者baseUrl填成了带/v1的地址导致拼接重复。把baseUrl改回https://taotoken.net/api重启插件。如果还不行看插件日志里实际请求的 URL 是什么多半是路径拼错了。5.3 reading choices 报错返回体解析时报reading choices相关错误一般是响应结构和你用的插件预期不一致。先确认请求里model字段填的是文档里存在的模型 ID不是随便写的名字。模型 ID 错了返回体里没有choices插件解析就崩。对照文档核对模型 ID。5.4 OAuth 相关报错如果插件走的是 OAuth 流程而不是 API Key报 OAuth 错误说明认证方式选错了。在插件设置里把认证方式切成 API Key填 Base URL Key Model ID 三件套。OAuth 那套不适用于这种直连 API 的场景。5.5 AMDP 侧常见错误METHOD ... is not an AMDP method检查类有没有实现if_amdp_marker_hdb方法有没有加BY DATABASE ...修饰。Table SPFLI is not usedUSING后面没声明用到的表。AMDP 方法里访问的表必须在USING里列出。Syntax error in SQLScript多半是$ABAP.type()的引号写错或者变量引用忘了加冒号:lv_var。SQLScript 里引用 ABAP 变量要加冒号。6. 继续深入的方向AMDP 的BY DATABASE PROCEDURE和BY DATABASE FUNCTION两种模式用途不同前者标记为存储过程可以写更复杂的逻辑后者标记为表函数主要给 CDS 消费。方法嵌套调用时被调用的 AMDP 方法也要在USING里声明方法名大写。如果你要把这套 AI 辅助长期用在日常编码里可以考虑 Coding Plan地址 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 适合需要持续补全和 Agent 辅助的场景。只想先验证模型对话效果用模型对话入口 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 试几句。Key 管理和接入文档分别在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 和 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。最后给个实操建议AMDP 调试时先在 ADT 里用Data Preview单独跑表函数确认 SQLScript 逻辑对了再接到 ABAP 程序里调用。这样出错时能快速定位是 SQLScript 的问题还是 ABAP 调用的问题。写游标循环时lv_index的初始化和自增别漏漏了会死循环或者只处理一行。

相关新闻

200万公里无大修!苏州金龙海格客车阿尔及利亚交出品质硬核答卷

200万公里无大修!苏州金龙海格客车阿尔及利亚交出品质硬核答卷

2026年9月18日,阿尔及利亚提济乌祖山顶,苏州金龙海格客车与 Numidia 公司联合举办海格客车200万公里无大修纪念仪式。苏州金龙海格交付中心总监邢宗智、阿尔及利亚团队,Numidia公司管理层以及一线司机代表共同见证这一历史性时刻。两百万公里…

2026/9/30 23:32:16 阅读更多 →
武汉奥迪Q5L维修哪家专业靠谱?志华车改15年专修

武汉奥迪Q5L维修哪家专业靠谱?志华车改15年专修

武汉Q5L车主找维修店,报价高低是最后才该比的事,先得看这家店对Q5L的故障有没有判断力。Q5L搭的是三代EA888发动机配DL382七速湿式双离合,出保之后发动机漏液、低速顿挫、底盘松散、仪表电气故障这些问题,都有明确的分层处理路径。…

2026/9/30 23:32:16 阅读更多 →
AI编程的下一个范式:SDD+Harness如何用TaoToken统一Key跑通Agent工作流?

AI编程的下一个范式:SDD+Harness如何用TaoToken统一Key跑通Agent工作流?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 23:31:16 阅读更多 →

最新新闻

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱

游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱

游戏引擎原理与实践 02:揭开3A游戏背后的技术面纱Bilibili 同步视频游戏逻辑 vs 游戏引擎,剧本和摄影机的区别现代游戏引擎都包含哪些模块?游戏编辑器:游戏开发者的工作台数学,游戏引擎的内功根基需要重点掌握的数学知…

2026/9/30 23:59:29 阅读更多 →
中科院青藏高原所李新团队提出 READY 框架|地学数据光“开放共享”还不够,得先过“AI 就绪”这道关

中科院青藏高原所李新团队提出 READY 框架|地学数据光“开放共享”还不够,得先过“AI 就绪”这道关

近日,中国科学院青藏高原研究所、国家青藏高原科学数据中心联合国内多个地学数据中心科研人员,系统提出了“人工智能就绪地球科学数据(AI-ready geoscience data)”的定义框架与实现路径。当前,“人工智能就绪数据&…

2026/9/30 23:59:29 阅读更多 →
智能车竞赛芯片选型指南:从主频、资源到双核与生态的决策链

智能车竞赛芯片选型指南:从主频、资源到双核与生态的决策链

1. 为什么第十五届的“芯片选型”忽然成了所有人绕不开的话题从第十五届备赛周期开始,智能车竞赛里的一个趋势变得非常明显:你打开官方通知后,第一件事不再是去翻上届学长传下来的代码,而是先去看“主控芯片”那一栏还能不能沿用老…

2026/9/30 23:59:29 阅读更多 →
MCP Kubernetes Server 实战:用 TaoToken 统一 Key 打通集群管理工具链

MCP Kubernetes Server 实战:用 TaoToken 统一 Key 打通集群管理工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 23:59:29 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →