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

  

 

posted @ 2021-11-27 11:17  KINGBASE研究院  阅读(196)  评论(0编辑  收藏  举报