在SQL中,预准备语句用于模板化类似的查询或更新。 Adobe Experience Platform Query Service 通过使用参数化查询支持预准备语句。 这可以优化性能,因为您不再需要重复地重新分析查询。
使用预准备语句时,支持以下语法:
此SQL查询将写入的SELECT查询保存为指定的名称 PLAN_NAME
. 您可以使用变量,例如 $1
代替实际值。 此准备好的语句将在当前会话期间保存。 请注意,计划名称是 非 区分大小写。
PREPARE {PLAN_NAME} AS {SELECT_QUERY}
PREPARE test AS SELECT * FROM table WHERE country = $1 AND city = $2;
此SQL查询使用以前创建的准备语句。
EXECUTE {PLAN_NAME}('{PARAMETERS}')
EXECUTE test('canada', 'vancouver');
此SQL查询用于删除命名的预准备语句。
DEALLOCATE {PLAN_NAME}
DEALLOCATE test;
最初,您可以有一个SQL查询,如以下查询:
SELECT * FROM table WHERE id >= 10000 AND id <= 10005;
上述SQL查询将返回以下响应:
id | 名字 | 姓氏 | 生日 | 电子邮件 | city | 国家/地区 |
---|---|---|---|---|---|---|
10000 | 亚历山大 | 戴维斯 | 1993-09-15 | example@example.com | 温哥华 | 加拿大 |
10001 | 安东尼 | 杜布瓦 | 1967-03-14 | example2@example.com | 巴黎 | 法国 |
10002 | 恭子 | 樱花 | 1999-11-26 | example3@example.com | 东京 | 日本 |
10003 | linus | 彼得松 | 1982-06-03 | example4@example.com | 斯德哥尔摩 | 瑞典 |
10004 | aasir | 韦塔卡 | 1976-12-17 | example5@example.com | 内罗毕 | 肯尼亚 |
10005 | 费尔南多 | rios | 2002-07-30 | example6@example.com | 圣地亚哥 | 智利 |
可以使用以下预准备语句参数化此SQL查询:
PREPARE getIdRange AS SELECT * FROM table WHERE id >= $1 AND id <= $2;
现在,可以使用以下调用执行预准备语句:
EXECUTE getIdRange(10000, 10005);
调用此选项时,您会看到与之前完全相同的结果:
id | 名字 | 姓氏 | 生日 | 电子邮件 | city | 国家/地区 |
---|---|---|---|---|---|---|
10000 | 亚历山大 | 戴维斯 | 1993-09-15 | example@example.com | 温哥华 | 加拿大 |
10001 | 安东尼 | 杜布瓦 | 1967-03-14 | example2@example.com | 巴黎 | 法国 |
10002 | 恭子 | 樱花 | 1999-11-26 | example3@example.com | 东京 | 日本 |
10003 | linus | 彼得松 | 1982-06-03 | example4@example.com | 斯德哥尔摩 | 瑞典 |
10004 | aasir | 韦塔卡 | 1976-12-17 | example5@example.com | 内罗毕 | 肯尼亚 |
10005 | 费尔南多 | rios | 2002-07-30 | example6@example.com | 圣地亚哥 | 智利 |
使用完预准备语句后,可以使用以下调用取消分配该语句:
DEALLOCATE getIdRange;