{"hidden":false,"children":[{"configs":{"itemId":"module"},"expanded":true,"children":[{"configs":{"quoted":"true","itemId":"text","text":"在WebBuilder中可以很容易地访问存储过程，既可以通过控件也可以通过脚本来访问存储过程并获取结果，下面举例说明：\n一、访问 Oracle 存储过程\n1、创建游标类型：\nCREATE OR REPLACE PACKAGE TYPES AS\nTYPE X_CURSOR IS REF CURSOR;\nEND;\n2、创建存储过程：\nCREATE OR REPLACE PROCEDURE USER_PROC\n(\nP_USER OUT TYPES.X_CURSOR,\nP_NAME IN VARCHAR\n)\nAS\nBEGIN\nOPEN P_USER FOR SELECT * FROM WB_USER WHERE USER_NAME = P_NAME;\nEND USER_PROC;\n3、添加DataProvider控件，设置sql属性：\n{call USER_PROC({?@-10.result?},'admin')}\nDataProvider默认获取名称为result的输出参数为结果集\n二、访问 SQL Server 存储过程\n1、创建存储过程：\ncreate procedure USER_PROC \n@user_name varchar(50)\nas\nbegin\nselect * from WB_USER where USER_NAME = @user_name\nend\n2、添加DataProvider控件，设置sql属性：\n{call USER_PROC('admin')}\n三、在ServerScript中也可以使用脚本输出结果集：\napp.output('{call USER_PROC(\"admin\")}');//具体使用说明请参考app.output方法文档\nvar script = app.output('{call USER_PROC(\"admin\")}', null, true);//不立即输出至客户端，把脚本保存到变量\n四、在返回值中输出结果集，在输出参数中输出其他参数：\n// 如果在返回值中输出结果集的过程中加载所有输出参数，在某些数据库会抛出结果集已经关闭异常。\n// 因此系统默认自动根据是否返回结果集来判断是否加载所有输出参数，如果返回结果集不加载所有输出参数，如果未返回结果集加载所有输出参数。\n// 是否加载所有输出参数由参数loadParams控制，可选值为auto, load和none，默认为auto，见文档。\n// app.output(\"{call testproc('inParam', {?@otherParams?})}\",{loadParams:'load'});\nQuery:\nvar map=app.run(\"{call testproc('inParam', {?@otherParams?})}\");//如果返回值中输出结果集，系统不自动加载输出参数，只返回名称为outParams的statement对象。\napp.log(map.get('return'));//过程返回值\napp.log(map.get('outParams').getString(1));//outParams为statement对象，获取第1个输出参数即otherParams值\nDataProvider:\napp.output(\"{call testproc('inParam', {?@otherParams?})}\");\napp.log(app.get('return'));///过程返回值，如果有itemId使用app.get('itemId')\napp.log(app.get('outParams').getString(1));//outParams为statement对象，获取第1个输出参数即otherParams值\n五、在返回值中不输出结果集，在输出参数中同时输出结果集和其他参数：\nQuery:\nvar map = app.run(\"{call user_proc({?@-10.rs?},'admin',{?@otherParams?})}\");//如果返回不是结果集自动读取和加载所有输出参数，具体由参数loadParams控制。\napp.log(map.get('return')); //过程返回值\napp.log(map.get('rs')); //结果集参数\napp.log(map.get('otherParams')); //其他输出参数\nDataProvider:\napp.output(\"{call user_proc({?@-10.result?},'admin',{?@otherParams?})}\");\napp.log(app.get('return')); //过程返回值，如果有itemId使用app.get('itemId')\napp.log(app.get('otherParams'));//其他输出参数，如果有itemId使用app.get('itemId.otherParams')"},"expanded":false,"children":[],"type":"string"},{"configs":{"layout":"fit","itemId":"viewport1"},"expanded":true,"children":[{"configs":{"itemId":"xwl1","file":"m?xwl=sys/dialog/dev/script-editor"},"expanded":false,"children":[],"type":"xwl"}],"type":"viewport","events":{"afterrender":"app.xwl1.setValue(\"{#text#}\", 'txt', true);"}}],"type":"module"}],"roles":{"demo":1},"title":"访问存储过程","iconCls":"","inframe":false,"pageLink":""}