!set plsqlUseSlash true BEGIN DBMS_OUTPUT.put_line ('Hello World!') -- 输出信息 Hello World END; /
复制
输出结果:
+---------------+ | output | +---------------+ | Hello World! | +---------------+
复制
PL/SQL 语句块可以是一个没有名字的语句块,也可以是命名的语句块(即过程和函数)。本章节中我们主要讲述匿名块的创建过程。
PL/SQL 块由四个基本部分组成:声明、执行体开始、异常处理、执行体结束。
DECLARE —— 可选部分
变量、常量、函数游标、用户定义异常的声明。
BEGIN —— 必要部分
SQL 语句和 PL/SQL 语句构成的执行程序。
EXCEPTION —— 可选部分
程序出现异常时,捕捉异常并处理异常。
END —— 必须部分
|
最简单的匿名块只包含 PL/SQL 语句块中的两个必要部分,BEGIN 和 END。
!set plsqlUseSlash true BEGIN DBMS_OUTPUT.put_line ('Hello World!') -- 输出信息 Hello World END; /
复制
输出结果:
+---------------+ | output | +---------------+ | Hello World! | +---------------+
复制
稍复杂的匿名块除了包含 PL/SQL 语句块中的两个必要部分,BEGIN 和 END 之外,还包含一个 DECLARE 的部分,即声明变量的部分。
!set plsqlUseSlash true DECLARE -- 定义一个 string 类型的变量 l_message,并赋值。 l_message STRING := 'Hello World!' BEGIN -- 输出 l_message 的值。 DBMS_OUTPUT.put_line (l_message) END; /
复制
输出结果:
+---------------+ | output | +---------------+ | Hello World! | +---------------+
复制
一个完整的匿名块包含了 PL/SQL 语句块的四个部分分别为 DECLARE,BEGIN,EXCEPTION,END。
!set plsqlUseSlash true DECLARE -- 定义一个 string 类型的变量 transid。 transid STRING; BEGIN -- 查询 transactions 表中的交易号,并放进变量 transid 中,此处 transactions 后需加上表的别名。 SELECT trans_id INTO transid FROM transactions t1; -- 输出变量 transid 的值。 PUT_LINE(transid) EXCEPTION -- 引用一个情况名为 too_many_rows 的异常。 WHEN too_many_rows THEN -- 当异常发生时的所输出的信息。 DBMS_OUTPUT.put_line ('too many rows') END; /
复制
输出结果:
+----------------+ | output | +----------------+ | too many rows | +----------------+
复制
SELECT 或 SELECT INTO 语句后如果跟函数调用或赋值语句,SELECT 或 SELECT INTO 语句不能以 FROM <TABLE_NAME> 结尾,否则函数名会被识别为 alias,ArgoDB 会报语义错误。更多用法说明及解决方法可参考注意事项。 |
通过 Beeline 的方式连接数据库 SQL 引擎,并利用如下命令手动打开分号支持。
!set plsqlUseSlash true复制
!set plsqlUseSlash true DECLARE -- 声明外部语句块中的变量 test1。 test1 STRING BEGIN DECLARE -- 声明内部语句块中的变量 test2。 test2 STRING BEGIN -- 查询 transactions 表中账号为 6513064 的交易号,并放进变量 test2 中。 SELECT trans_time INTO test2 FROM transactions WHERE acc_num=6513064; -- 输出变量 test2 的值。 dbms_output.put_line(test2) EXCEPTION -- 引用一个 NO_DATA_FOUND 的异常情况名。 WHEN NO_DATA_FOUND THEN dbms_output.put_line('no values') END -- 查询 transactions 表中价格为 12.13 的交易号,并放进变量 test1 中。 SELECT trans_id INTO test1 FROM transactions WHERE price=12.13; -- 输出变量 test1 的值。 dbms_output.put_line(test1) EXCEPTION -- 引用一个 TOO_MANY_ROWS 的异常情况名。 WHEN TOO_MANY_ROWS THEN dbms_output.put_line('too many rows') END; /
复制
输出结果:
内部语句块中抛出异常发生时所返回的值,外部语句块中成功输出变量test1的值。
+------------+ | output | +------------+ | no values | | 943197522 | +------------+
复制
|