KingbaseES 匿名块如何传递参数
匿名块的基本语法结构包括声明和执行两部分。匿名块每次提交都被重新编译和执行。因为匿名块没有名称并不在数据库中存储,所以匿名块不能直接从其他PL/SQL 块中调用。
定义语法:
[ DECLARE ] [ variable_declaration ] [ cursor_declaration ] BEGIN sequence_of_statement END
说明:
a. 声明部分 :类似于存储过程中的声明,预先定义块中要用到的变量。包含PL/SQL 变量,异常,游标等。如果没有变量需要定义,声明部分可以省略。
b. 执行部分: 以BEGIN 开始,以END 结束,不可省略。类似于存储过程中的执行块。
在使用过程中oracle数据库的匿名块可以通过 &var形式来动态接收参数输入, KingbaseES也能实现动态输入参数,但是相对麻烦一些,参数需要通过ksql命令来传入。
Oracle:
SQL> set serveroutput on; SQL> DECLARE num1 NUMBER; num2 NUMBER; calResult NUMBER; BEGIN num1:=&n1; num2:=&n2; calResult:=num1+num2; dbms_output.put_line(num1||'+'||num2||'='||calResult); END; / Enter value for n1: 3 old 6: num1:=&n1; new 6: num1:=3; Enter value for n2: 4 old 7: num2:=&n2; new 7: num2:=4; 3+4=7 PL/SQL procedure successfully completed.
KingbaseES:
需要将匿名块保存为脚本,通过ksql命令来调用。
[kingbase@singlekbdb ~]$ vi 1.sql \set SQLTERM / DECLARE v_date date; BEGIN select nd into v_date from t2 where id = :id; raise notice 'time is %',v_date; END; / [kingbase@singlekbdb ~]$ ksql -Usystem -p54321 test -v id=2 -c '\i 1.sql;' ksql:1.sql:9: 注意: time is 2020-09-18 00:00:00 ANONYMOUS BLOCK
KINGBASE研究院