背景
在信创移植DDL SQL语句中,来源于Oracle数据库的SQL语句文件存在prompt命令。在 Oracle SQLPlus 中,prompt命令用于向用户显示一条消息或文本。它通常用于在脚本执行过程中提供一些额外信息,以帮助用户了解脚本的执行状态或流程。这在编写复杂的 SQLPlus 脚本或在执行脚本时需要向用户显示进度时非常有用。
这命令类似于PG \echo命令;LightDB 23.2版本起支持prompt命令使得信创移植更加平滑。
场景
ltsql是LightDB 命令行交互工具。针对prompt的使用,主要有如下场景
- ltsql交互模式下直接执行prompt命令
- ltsql非交互模式下执行文件内容中包含prompt命令
案例演示
交互模式
lightdb@postgres=# create table test(id int);
CREATE TABLE
lightdb@postgres=# prompt select start
select start
lightdb@postgres=# select count(*) from test;
count
-------
0
(1 row)
lightdb@postgres=# prompt select complete
select complete
在上述示例中,我们使用prompt打印提示出我们的交互信息。
文件模式
文件test1.sql内容如下:
PROMPT Creating table...
CREATE TABLE test_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
PROMPT Inserting data...
BEGIN;
INSERT INTO test_table (id, name) VALUES (1, 'John Doe');
INSERT INTO test_table (id, name) VALUES (2, 'Jane Smith');
COMMIT;
PROMPT Querying data...
SELECT * FROM test_table;
DROP table test_table;
PROMPT Done.
执行SQL效果:
zhangliang[lightdb@localhost ~/stage/lightdb-x/bin]$ ./ltsql -f test/ltsql/test1.sql
Creating table...
CREATE TABLE
Inserting data...
BEGIN
INSERT 0 1
INSERT 0 1
COMMIT
Querying data...
id | name
----+------------
1 | John Doe
2 | Jane Smith
(2 rows)
DROP TABLE
Done.
上述示例展示了在文件中使用prompt命令展示SQL执行状态和流程信息。
复杂场景展示
我们注意到prompt命令后面无需跟;
结束符。同时在SQLPlus当中 prompt支持大写、小写、大小混写、前缀空格、前缀制表、前空行、前空行含空格、前空行含制表、空行制表混合。针对这一场景,LightDB中也做了兼容。如下示例。
文件test2.sql内容如下:
prompt test1
prompt test2
prompt test3
prompt test4
prompt "test5"
prompt "test6";
prompt "test7";;
Prompt "test8";;;
PrOmpt "test9"
PROMPT "test10"
prompt create table.
create table demo (
prompt text
);
prompt insert data.
insert into demo values('test1');
insert into demo values('test2');
prompt query data.
select * from demo;
prompt drop table.
drop table demo;
PROMPT "test11"
PROMPT "test12"
PROMPT "test13"
PROMPT "test14"
执行SQL效果:
zhangliang[lightdb@localhost ~/stage/lightdb-x/bin]$ ./ltsql -f test/ltsql/test2.sql
test1
test2
test3
test4
"test5"
"test6";
"test7";;
"test8";;;
"test9"
"test10"
create table.
CREATE TABLE
insert data.
INSERT 0 1
INSERT 0 1
query data.
prompt
--------
test1
test2
(2 rows)
drop table.
DROP TABLE
"test11"
"test12"
"test13"
"test14"
结论
在LightDB中, ltsql支持prompt命令,该命令无需;
结尾,同时该命令支持交互和文件两种模式下执行,支持大写、小写、大小混写、前缀空格、前缀制表、前空行、前空行含空格、前空行含制表、空行制表混合