Inceptor中默认对PL/SQL语句块的分号是不支持的,也就是说在inceptor的默认配置中会识别分号为SQL语句块结束的符号,但是在beeline中默认的并不是以分号结束,所以当使用beeline命令进行编译存储过程时就会报错。我们可以通过命令语句手动打开支持。使用命令的时候,我们需要在PL/SQL文件的头部和尾部各加一条命令,具体如下:
1. 在PL/SQL文件头部加上一条set命令
#在CLI+HiveServer1中
set plsql.use.slash = true;
#在Beeline+HiveServer2中
!set plsqlUseSlash true
2. 在PL/SQL文件尾部,加上一条set命令,这样让当前的设定效果限定在当前文件内部
#在CLI+HiveServer1中
set plsql.use.slash = false;
#在Beeline+HiveServer2中
!set plsqlUseSlash false
注意在Server2中命令语句后面不可以加分号。
提示:
Inceptor 要求在一个完整的PL/SQL语句块的后面加上一个新行,这行只包含'/'字符。此时Inceptor执行'/'之前的PL/SQL语句,如果不加'/'的话,Inceptor将不会执行之前的任何PL/SQL语句。一个完整的PL/SQL语句块的最后如果不加'/'字符,则Inceptor会认为语句块并没有结束,不会执行该语句块。
例:在Server2中打开分号支持
-- 设置plsqlUserSlash属性为true
!Set plsqlUserSlash true
-- 创建一个名为test()的过程
CREATE OR REPLACE PRCEDURE test() IS
DECLARE
var INT;
BEGIN
var := 1;
WHILE var != 5
-- 在变量var不等于5的情况下,依次输出var的值
LOOP
dbms_output.put_line("while loop body"||var||".");
var := var+1;
END LOOP;
END;
/
-- 调用过程test()
BEGIN
test();
END;
/
-- 设置plsqlUserSlash属性为false。
!set plsqlUserSlash false
输出结果为:
output
while loop body 1.
while loop body 2.
while loop body 3.
while loop body 4.
参考文章: