关键字:
匿名块 参数
正文:
- 匿名块定义
匿名块的基本语法结构包括声明和执行两部分。匿名块每次提交都被重新编译和执行。因为匿名块没有名称并不在数据库中存储,所以匿名块不能直接从其他PL/SQL 块中调用。
定义语法:
[ DECLARE ]
[ variable_declaration ]
[ cursor_declaration ]
BEGIN
sequence_of_statement
END
说明:
1). 声明部分
类似于存储过程中的声明,预先定义块中要用到的变量。包含PL/SQL 变量,异常,游标等。如果没有变量需要定义,声明部分可以省略。
2). 执行部分
以BEGIN 开始,以END 结束,不可省略。类似于存储过程中的执行块。
- oracle数据库的匿名块传递参数
在使用过程中oracle数据库的匿名块可以通过 &var形式来动态接收参数输入, KingbaseES也能实现动态输入参数,但是传递参数需要通过ksql命令来传入。
Oracle数据库匿名块传递参数测试实例:
SQL> set serveroutput on;
SQL> DECLARE
2 num1 NUMBER;
3 num2 NUMBER;
4 calResult NUMBER;
5 BEGIN
6 num1:=&n1;
7 num2:=&n2;
8 calResult:=num1+num2;
9 dbms_output.put_line(num1||'+'||num2||'='||calResult);
10 END;
11 /
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数据库的匿名块传递参数
KingbaseES:需要将匿名块保存为脚本,通过ksql命令,加-v来传递参数。
KingbaseES数据库匿名块传递参数测试实例:
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
参考文档:金仓PLSQL-SQL过程语言