云服务器内容精选

  • 语法格式 创建子存储过程语法格式: 1 2 3 4 5 6 7 8 PROCEDURE procedure_name [ (parameters) ] [{IMMUTABLE | STABLE | VOLATILE } | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }] { IS | AS } [ declarations ] BEGIN plsql_body END; 创建子函数语法: 1 2 3 4 5 6 7 8 FUNCTION function_name [ (parameters) ] RETURN rettype [{IMMUTABLE | STABLE | VOLATILE } | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }] { IS | AS } [ declarations ] BEGIN plsql_body END; 在declarations部分可再定义下层的嵌套子程序。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 -- 创建一个存储过程 CREATE OR REPLACE PROCEDURE proc_test() AS -- 声明并定义一个子存储过程 PROCEDURE proc_sub() IS BEGIN dbe_output.put_line('this is subpragram'); END; BEGIN dbe_output.put_line('this is a procedure'); -- 执行块内调用子存储过程 proc_sub(); END; / -- 外部调用存储过程 BEGIN proc_test; END; / -- 输出结果 this is a procedure this is subpragram ANONYMOUS BLOCK EXECUTE
  • 注意事项 在ORA兼容性数据库下使用。 最大嵌套层数限制通过GUC参数max_subpro_nested_layers控制(默认值为3,取值范围0~100)。如果嵌套子程序中含有匿名块,匿名块不计算层数,但匿名块内的嵌套子程序计入到总层数。 嵌套子程序不支持重载、不支持使用SETOF。 嵌套子程序内不支持定义为自治事务,可调用含有自治事务的存储过程或函数。 子函数(FUNCTION)不支持直接调用且必须要有返回值,子存储过程(PROCEDURE)不支持在表达式中调用。 嵌套子程序不支持perform调用,动态语句中不能有嵌套子程序。 当前嵌套子程序的修饰符支持如下,其余修饰符暂不支持。 {IMMUTABLE | STABLE | VOLATILE } {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } 仅支持一个限定符引用嵌套子程序或嵌套子程序的变量。 当子函数(FUNCTION)返回值类型为函数自定义的record类型时,无法使用subfunc().col的方式访问子函数返回值的列属性,执行时会报错。 嵌套子程序的声明必须是在声明部分的最后(在其他变量、游标、类型等声明完成之后再声明嵌套子程序)。 嵌套子程序只能在声明的函数或存储过程内部调用,外部不可使用。 嵌套子程序使用不支持debugger打断点,支持step单步调试。 其余注意事项同存储过程及函数一致。
  • 语法格式 创建子存储过程语法格式: 1 2 3 4 5 6 7 8 PROCEDURE procedure_name [ (parameters) ] [{IMMUTABLE | STABLE | VOLATILE } | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }] { IS | AS } [ declarations ] BEGIN plsql_body END; 创建子函数语法: 1 2 3 4 5 6 7 8 FUNCTION function_name [ (parameters) ] RETURN rettype [{IMMUTABLE | STABLE | VOLATILE } | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }] { IS | AS } [ declarations ] BEGIN plsql_body END; 在declarations 部分可再定义下层的嵌套子程序。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 -- 创建一个存储过程 CREATE OR REPLACE PROCEDURE proc_test() AS -- 声明并定义一个子存储过程 PROCEDURE proc_sub() IS BEGIN dbe_output.put_line('this is subpragram'); END; BEGIN dbe_output.put_line('this is a procedure'); -- 执行块内调用子存储过程 proc_sub(); END; / -- 外部调用存储过程 BEGIN proc_test; END; / -- 输出结果 this is a procedure this is subpragram ANONYMOUS BLOCK EXECUTE
  • 注意事项 在A兼容性数据库下使用。 最大嵌套层数限制通过GUC参数max_subpro_nested_layers控制(默认值为3,取值范围0~100)。如果嵌套子程序中含有匿名块,匿名块不计算层数,但匿名块内的嵌套子程序计入到总层数计算 嵌套子程序不支持重载、不支持使用SETOF。 嵌套子程序内不支持定义为自治事务,可调用含有自治事务的存储过程或函数。 子函数(FUNCTION)不支持直接调用且必须要有返回值,子存储过程(PROCEDURE)不支持在表达式中调用。 嵌套子程序不支持perform调用,动态语句中不能有嵌套子程序。 当前嵌套子程序的修饰符支持如下,其余修饰符暂不支持: {IMMUTABLE | STABLE | VOLATILE } {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } 仅支持一个限定符引用嵌套子程序或嵌套子程序的变量。 当子函数(FUNCTION)返回值类型为函数自定义的record类型时,无法使用subfunc().col的方式访问子函数返回值的列属性,执行时会报错。 嵌套子程序的声明必须是在声明部分的最后(在其他变量、游标、类型等声明完成之后再声明嵌套子程序)。 嵌套子程序只能在声明的函数或存储过程内部调用,外部不可使用。 嵌套子程序使用不支持debugger打断点,支持step单步调试。 其余注意事项同存储过程及函数一致。