广告发布代理的帐户管理员需要查看在 1997 年为 IBM 创建的视频广告, 但仅想看持续时间是 30 秒或更短的广告。
下图显示了存取视频的查询。注意查询中名为 Filename 和 Duration 的 Video Extender UDF。
SELECT FILENAME(ADS_VIDEO) FROM ADS WHERE CLIENT='IBM' AND SHIP_DATE>='01/01/1997' AND DURATION(ADS_VIDEO) <=30 |
此查询返回期望的视频的文件名。然后,帐户管理员打开自己喜欢的视频播放程序,并播放每个视频文件的内容。
前一示例说明了帐户管理员可交互地发出的查询。更常见的是,帐户管理员将使用应用程序来查找并播放视频。 下例显示了用 C 编码的这种应用程序的一些关键元素。该应用程序在名为 hvVid_fname 的 DB2 主变量中检索视频文件名。且注意该应用程序使用名为 DBvPlay 的播放 API 来播放视频。
#include <dmbvideo.h> int count = 0; EXEC SQL BEGIN DECLARE SECTION; char hvClient[30]; /*client name*/ char hvCampaign[30]; /*campaign name*/ char hvSdate[8]; /*ship date*/ char hvVid_fname [251] /*video file name*/ EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE c1 CURSOR FOR SELECT CLIENT, CAMPAIGN, SHIP_DATE, FILENAME(ADS_VIDEO) FROM ADS WHERE CLIENT='IBM' AND SHIP_DATE>='01/01/1997' AND DURATION(ADS_VIDEO)<=30 FOR FETCH ONLY; EXEC SQL OPEN c1; for (;;) { EXEC SQL FETCH c1 INTO :hvClient, :hvCampaign, :hvSdate, :hvVid_fname; if (SQLCODE != 0) break; printf("\nRecord %d:\n", ++count); printf("Client = '%s'\n", hvClient); printf("Campaign = '%s'\n", hvCampaign); printf("Sdate = '%s'\n", hvSdate); rc=DBvPlay(NULL,MMDB_PLAY_FILE,hvVid_fname,MMDB_PLAY_WAIT); } EXEC SQL CLOSE c1; |