检测到您已登录华为云国际站账号,为了您更好的体验,建议您访问国际站服务网站 https://www.huaweicloud.com/intl/zh-cn
不再显示此消息
锁操作 GaussDB(DWS)提供了多种锁模式用于控制对表中数据的并发访问。这些模式可以用在MVCC(多版本并发控制)无法给出期望行为的场合。同样,大多数GaussDB(DWS)命令自动施加恰当的锁,以保证被引用的表在命令的执行过程中不会以一种不兼容的方式被删除或者修改。比如,在存在其他并发操作的时候,ALTER
定义动态游标的语法图,请参见图2和图3。 图2 cursor_typename::= GaussDB(DWS)支持sys_refcursor动态游标类型,函数或存储过程可以通过sys_refcursor参数传入或传出游标结果集合,函数也可以通过返回sys_refcursor来返回游标结果集合。 图3
GaussDB(DWS)存储过程数据类型转换 数据库中允许有些数据类型进行隐式类型转换(赋值、函数调用的参数等),有些数据类型间不允许进行隐式数据类型转换,可尝试使用GaussDB(DWS)提供的类型转换函数,例如CAST进行数据类型强转。 GaussDB(DWS)数据库常见的隐式类型转换,请参见表1。
GaussDB(DWS)存储过程数组和record 数组 record 父主题: GaussDB(DWS)存储过程
WHEN C1%NOTFOUND; END LOOP; END; / --删除存储过程 DROP PROCEDURE proc_sys_ref; 父主题: GaussDB(DWS)存储过程游标
进入和退出一个包含EXCEPTION子句的块要比不包含的块开销大的多。因此,不必要的时候不要使用EXCEPTION。 在下列场景中,无法捕获处理异常,整个存储过程回滚:节点故障、网络故障引起的存储过程参与节点线程退出以及COPY FROM操作中源数据与目标表的表结构不一致造成的异常。 示例 :UPDATE/INSERT异常
dbms_output.put_line(first_name|| ' ' || salary); END; / --调用存储过程 CALL dynamic_proc(); --删除存储过程 DROP PROCEDURE dynamic_proc; 父主题: 动态语句
设置一个随机数的种子。 DBMS_RANDOM.VALUE 生成一个大小介于指定的low及high之间的随机数。 DBMS_RANDOM.SEED 存储过程SEED用于设置一个随机数的种子。DBMS_RANDOM.SEED函数原型为: 1 DBMS_RANDOM.SEED (seed IN
填写出参。如果在存储过程中则需要用通过perform调用该接口函数。 表2 DBMS_JOB.SUBMIT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 what text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。
设置一个随机数的种子。 DBMS_RANDOM.VALUE 生成一个大小介于指定的low及high之间的随机数。 DBMS_RANDOM.SEED 存储过程SEED用于设置一个随机数的种子。DBMS_RANDOM.SEED函数原型为: 1 DBMS_RANDOM.SEED (seed IN
填写出参。如果在存储过程中则需要用通过perform调用该接口函数。 表2 DBMS_JOB.SUBMIT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 what text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。
offset 要读取的字节数或者字符数量。 buffer 从开始位置偏移的字符数或者字节数量。 DBMS_LOB.TRIM 这个存储过程用于截断指定长度的LOB,执行完这个存储过程会将LOB的长度设置为newlen参数指定的长度。如果对一个空的LOB执行截断操作,不会有任何执行结果;如果指定
offset 要读取的字节数或者字符数量。 buffer 从开始位置偏移的字符数或者字节数量。 DBMS_LOB.TRIM 这个存储过程用于截断指定长度的LOB,执行完这个存储过程会将LOB的长度设置为newlen参数指定的长度。如果对一个空的LOB执行截断操作,不会有任何执行结果;如果指定
设置一个随机数的种子。 DBMS_RANDOM.VALUE 生成一个大小介于指定的low及high之间的随机数。 DBMS_RANDOM.SEED 存储过程SEED用于设置一个随机数的种子。DBMS_RANDOM.SEED函数原型为: 1 DBMS_RANDOM.SEED (seed IN
该函数用来关闭一个游标,是dbms_sql各项操作的结束。如果在存储过程结束时没有调用该函数,则该游标占用的内存仍然会保存,因此关闭游标非常重要。由于异常情况的发生会中途退出存储过程,导致游标未能关闭,因此建议存储过程中有异常处理,将该接口包含在内。 DBMS_SQL.CLOSE_CURSOR函数原型为:
' ' || salary); END; / --调用存储过程 CALL dynamic_proc(); --删除存储过程 DROP PROCEDURE dynamic_proc; 父主题: GaussDB(DWS)存储过程动态语句
GOTO语句 GOTO语句可以实现从GOTO位置到目标语句的无条件跳转。GOTO语句会改变原本的执行逻辑,因此应该慎重使用,或者也可以使用EXCEPTION处理特殊场景。当执行GOTO语句时,目标Label必须是唯一的。 语法 label declaration ::= goto
/ --调用函数 CALL proc_forall(); --查询存储过程调用结果 SELECT * FROM hdfs_t1 WHERE title BETWEEN 100 AND 120; --删除存储过程和表 DROP PROCEDURE proc_forall; DROP
END; / CALL proc_case_branch(3,0); --删除存储过程 DROP PROCEDURE proc_case_branch; 父主题: GaussDB(DWS)存储过程控制语句
QUERY。其中,RETURN NEXT和RETURN QUERY只适用于函数,不适用存储过程。 RETURN 语法 返回语句的语法请参见图1。 图1 return_clause::= 对以上语法的解释如下: 用于将控制从存储过程或函数返回给调用者。 示例 1 2 3 4 5 6 7