createProcedure()

语法

db.createProcedure( <code> )

在数据库对象中创建存储过程。

参数描述

参数名参数类型描述是否必填
code自定义函数标准函数定义,不是字符串类型,在输入参数时不能使用引号。

Note:

  • 推荐直接使用存储过程中已初始化全局的 db,且全局 db 采用当前执行该存储过程的会话的鉴权信息,如:db.createProcedure( function getAll() { return db.foo.bar.find(); } )
  • 自己初始化 db 的形式为 var db = new Sdb(),db 采用当前执行该存储过程的会话的鉴权信息。如果需要加入其它用户名和密码,为 var db = new Sdb( 'usrname','passwd' ) 。这里需要注意的是,存储过程只能运行在已连接上的 db,不提供远程连接其他 db 的方法。在不需要鉴权的情况下,即使如 var db = new Sdb( 'hostname', 'servicename' ) 语句正常执行。得到的 db 仍然是本地 db。
  • db 角色必须为协调节点。standalone 模式不提供存储过程功能。

自定义函数

  • 函数定义

(1) 函数必须包含函数名,不能使用如:function(x,y) { return x+y; }。

(2) 在函数定义时可以调用其他函数甚至是不存在的函数,但需要保证运行时所有函数已存在。

(3) 函数名全局唯一,不提供重载。

(4) 每个函数均在全系统可用,随意删除一个存储过程可能导致他人运行失败。

  • 函数参数
  1. native type of JS
  • 函数输出

函数中所有标准输出,标准错误会被屏蔽。同时不建议在函数定义或执行时加入输出语句,大量的输出可能会导致存储过程运行失败。

  • 函数返回值

函数返回值可以是除 db 以外任意类型数据,如:function getCL() { return db.foo.bar; }。

返回值

无返回值,出错抛异常,并输出错误信息,可以通过 getLastErrMsg() 获取错误信息 或 通过 getLastError() 获取错误码。关于错误处理可以参考常见错误处理指南

示例

  • 创建 sum 函数
  1. > db.createProcedure( function sum(x,y) { return x+y; } )

创建之后可以使用 db.listProcedures() 查看函数信息。