lightdb 的 ltsql 客户端 支持使用 set define on/off 开启/关闭 替换变量
背景
在业务产品中,存在 oracle 移植过来的 sql 语句。先使用变量替换,然后执行替换后的 sql 语句。lightdb 23.4 版本的 ltsql 客户端对此进行了支持。
lightdb 关于替换变量
lightdb23.4 版本以后 ltsql 客户端 oracle 模式下开始支持替换变量。set define on 开启替代变量功能,& 表示替代变量。set define off 关闭替代变量功能,& 表示普通字符。目前只支持对select语句中出现的变量进行替换。替换变量功能默认是开启的。
注意事项
- 只在oracle模式下支持。
- 变量名可以由数字,英文字母,下划线混合组成。
- 您可以使用&标记变量,&&标记变量不支持。遇到连续3个以上&标记变量取最后一个。
- 支持select开头的sql语句。
- 支持除第一个单词select以外的任意位置的变量替换(prepare stmt as SELECT * FROM t1 WHERE id = ‘&id’; 此时&id不生效)。
- 输入字符串不超过240个字符。
使用示例
- 创建表
CREATE TABLE rolelevel(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age INT NOT NULL,
gender CHAR(1) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE
);
INSERT INTO rolelevel(name, age, gender, email)
VALUES ('zhangsan', 25, 'M', 'zhangsan@example.com');
INSERT INTO rolelevel(name, age, gender, email)
VALUES ('lisi', 30, 'M', 'lisi@example.com');
INSERT INTO rolelevel(name, age, gender, email)
VALUES ('wangwu', 22, 'F', 'wangwu@example.com');
INSERT INTO rolelevel(name, age, gender, email)
VALUES ('zhaoliu', 28, 'M', 'zhaoliu@example.com');
INSERT INTO rolelevel(name, age, gender, email)
VALUES ('xiaoqi', 18, 'M', 'xiaoqi@example.com');
- 输入带有&变量的 sql 语句
SELECT &a
FROM &a;
- 输入替换变量查看结果