页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象, 在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

注意info
title前置条件


数据库类型

数据库权限要求

TeradataOracel、DB2等其他数据库

1、常用数据库:mySQL、SQL Server、Oracel、DB2等其他数据库

2、支持的数据库请查阅:支持的数据源范围

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

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

指定数据库:Teradata

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

信息


存储过程只支持抽取模式!详情可查阅1、如果模型原先是直连模式,增加了存储过程查询,会强制变成抽取模式;详情可查阅直连&抽取

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

2.如果存储过程查询有参数,需要在报表层切换参数展示数据,建议“按次抽取”2、如果存储过程有参数,可参考参数设置进行参数映射


2  存储过程取数

示例说明:用户创建一个名为“FindCustomer”存储过程,用它来找出数据库Customer表中的ContactName;

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

以产品自带northwind数据库创建存储过程FindCustomer,如下图:

Image Removed

以产品自带northwind数据库自带的 ”根据产品类别ID获取产品信息“ 存储过程  northwind.sp_getProductInfow 为示例进行说明。

2.1 前提条件

1.需要先在Smartbi系统中的数据连接中对所需数据库进行数据库管理,选择所需的存储过程资源:

Image Removed

2. 对所选存储过程进行管理1、需要先在Smartbi系统中的 数据连接 中的 数据库管理,选择所需的存储过程资源,具体操作可查看:数据库管理

2、对所选存储过程进行管理,“存储过程管理”窗口中通过 自动检测  检测结果集 按钮分别检测出相关的参数和获取存储过程的结果集,详细可参考:存储过程数据集Image Removed3. 点击【确定】在资源树上会看到该存储过程已经有结果集了: 按钮分别检测出相关的参数和获取存储过程的结果集:

Image Added

3、点击 确定 在资源树上会看到存储过程的结果集: 

2.2 

...

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

Image Removed

...

具体操作

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

  • 选择结果集,如果没有出现结果集,请检查是否 做了 2.1章节 内容
  • 参数默认值:把存储过程结果集,拖拽到到编辑器,会自动检测是否定义了参数、以及参数默认值是否必填; 如果参数默认值是必填的,必须填写参数默认值才能执行成功 以及 预览数据。示例的参数默认值是必填的,给默认值填写”1“,能正常查出数据。

Image Added

Image Added

2、如果要想 回到模型,建议先 保存  再回到模型; 保存之后可以在关系视图中选中该 查询、右键菜单 做更多操作,详细查看:设置及修改查询,或者构建数据模型

Image Removed

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

Image Removed

注意
  • 如果是Oracle数据库下的存储过程:是通过输出参数作为结果集返回。
  • 存储过程的OUT参数只支持游标类型,而且只支持单个输出参数。

3、如果在模型中没有映射参数,会一直以默认值的结果集输出数据;如果在模型中的 参数设置 进行了关联映射,可以随着模型设置的默认值改变输出结果集;具体可参考:参数管理

注意

1、存储过程 的输出参数只支持游标类型,并且只支持一个变量对象作为输出参数。

2、注意:是 Oracle数据库下的存储过程 是通过输出参数作为结果集返回。

3 补充说明

信息

下面的说明只是让技术人员了解不同类型的数据库的调用方法和检测结果集!

3.1 检测参数的调用方法

数据库类型

存储过程获取参数

Teradata

1、常用数据库:mySQL、SQL Server、Oracel、DB2等其他数据库

2、支持的数据库请查阅:支持的数据源范围

调用JDBC中的标准方法: connection.getMetaData().getProcedureColumns(...)。

指定数据库: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(...)


3.2 检测结果集的调用方法

1、检测结果集:在前端弹出界面让用户输入参数后,真正的执行一次存储过程而获得输出字段

数据库类型

存储过程执行过程

1、常用数据库:mySQL、SQL Server、Oracel、DB2等其他数据库

Teradata

2、支持的数据库请查阅:支持的数据源范围

调用下面语句执行宏:

调用JDBC中的标准方法:
connection.

prepareStatement

prepareCall("{

Exec macroName

Call procName(?,?)}")

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

指定数据库:Teradata

Oracel、DB2等其他数据库

调用下面语句执行宏:

调用JDBC中的标准方法:

connection.

prepareCall

prepareStatement("{

Call procName

Exec macroName(?,?)}")

...