...
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
使用存储过程的前提要求:
数据库类型 | 数据库权限要求 |
---|---|
Teradata | 要求连接用户必须具有访问DBC.TABLES、DBC.COLUMNS的权限,及调用Exec方法的权限。 |
大部分数据库比如:mySQL、SQL Server、 Oracel、DB2等其他数据库 | 要求连接用户必须具有调用getProcedureColumns和Call方法的权限。 |
...
- 如果在模型中的[参数管理]进行了关联映射,可以随着模型设置的默认值改变输出结果集;具体可参考:参数管理
- 最终预览效果:
信息 |
---|
存储过程只支持抽取模式!存储过程只支持抽取模式!详情可查阅: 直连&抽取 1.如果模型原先是直连模式,增加了存储过程查询,会强制变成抽取模式 2.如果存储过程查询有参数,需要在报表层切换参数展示数据,建议“按次抽取” |
...
注意 |
---|
如果是Oracle数据库下的存储过程: 1、是通过输出参数作为结果集返回。 2、存储过程的OUT参数只支持游标类型,而且只支持单个输出参数。 |
3
...
补充说明
信息 |
---|
下面的说明只是让技术人员了解不同类型的数据库的调用方法和检测结果集! |
3.1 在Smartbi中存储过程检测参数的调用方法如下
数据库类型 | 存储过程获取参数 |
---|---|
Teradata | Teradata JDBC接口没有直接提供获取宏参数和字段的方法,所以是通过执行以下SQL语句数据集获得参数的: SELECT C.* FROM DBC.TABLES T, DBC.COLUMNS C T.DATABASENAME=? AND T.TABLENAME=? AND T.TABLEKIND='M' AND T.DATABASENAME=C.DATABASENAME AND T.TABLENAME=C.TABLENAME |
大部分数据库比如:mySQL、SQL Server、 Oracel、DB2等其他数据库 | 调用JDBC中的标准方法: connection.getMetaData().getProcedureColumns(...) |
3.2
...
在Smartbi中存储过程检测结果集的调用方法如下
数据库类型 | 存储过程执行过程 |
---|---|
Teradata | 调用下面语句执行宏: |
大部分数据库比如:mySQL、SQL Server、 Oracel、DB2等其他数据库 | 调用JDBC中的标准方法: |
...
- 检测结果集:在前端弹出界面让用户输入参数后,真正的执行一次存储过程而获得输出字段