页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 7 下一个 »

1 概述

【存储过程】就是存储在数据库中的一组 SQL 语句集。Smartbi 的数据模型支持调用数据库中的存储过程,从而获得执行了存储过程 SQL 语句集后的数据结构、数据集。

2 示例

比如用户想创建一个名为“FindCustomer”存储过程,可以用它来找出数据库Customer表中的ContactName;

  • 找出CustomerID为指定值(输入参数)的记录的ContactName字段的名称

以产品自带northwind数据库创建存储过程FindCustomer

具体操作如下:

1)先在数据库中创建存储过程FindCustomer,如下图:

2)再到Smartbi系统中的数据连接中对所需数据库进行数据库管理,选择所需的存储过程资源:

3)对所选存储过程进行管理,“存储过程管理”窗口中通过 自动检测  检测结果集 按钮分别检测出相关的参数和获取存储过程的结果集,详细可参考:存储过程数据集

  • 点击【确定】在资源树上会看到该存储过程已经有结果集了: 

4)创建数据模型,并添加“存储过程查询”:

  • 必须确保在“存储过程管理”窗口中通过 自动检测 和 检测结果集 按钮分别检测出相关的参数和结果集,左侧资源区才会出现可选资源。
  • 点击【预览】图标,可预览根据默认值查询的数据
  • 点击【保存】并回到模型修改数据类型、修改别名设置与其他查询的关系或者参考构建数据模型

  • 如果在模型中的[参数管理]进行了关联映射,可以随着模型设置的默认值改变输出结果集;具体可参考:参数管理
  • 最终预览效果:

存储过程只支持抽取模式!

1.如果模型原先是直连模式,增加了存储过程查询,会强制变成抽取模式

2.如果存储过程查询有参数,需要在报表层切换参数展示数据,建议“按次抽取”

如果是Oracle数据库下的存储过程:

1、是通过输出参数作为结果集返回。

2、存储过程的OUT参数只支持游标类型,而且只支持单个输出参数。

3 使用存储过程的要求

1)在Smartbi中存储过程检测参数的调用方法如下:

数据库类型

存储过程获取参数

Teradata

Teradata JDBC接口没有直接提供获取宏参数和字段的方法,所以是通过执行以下SQL语句数据集获得参数的:

SELECT C.* FROM DBC.TABLES T, DBC.COLUMNS C
WHERE

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(...)


2)在Smartbi中存储过程检测结果集的调用方法如下:(检测结果集:在前端弹出界面让用户输入参数后,真正的执行一次存储过程而获得输出字段。)

数据库类型

存储过程执行过程

Teradata

调用下面语句执行宏:
connection.prepareStatement("{Exec macroName(?,?)}")

大部分数据库比如:mySQL、SQL Server、

Oracel、DB2等其他数据库

调用JDBC中的标准方法:
connection.prepareCall("{Call procName(?,?)}")

3)数据库权限要求

数据库类型

数据库权限要求

Teradata

要求连接用户必须具有访问DBC.TABLES、DBC.COLUMNS的权限,及调用Exec方法的权限。

大部分数据库比如:mySQL、SQL Server、

Oracel、DB2等其他数据库

要求连接用户必须具有调用getProcedureColumns和Call方法的权限。



  • 无标签