自定义SQL语句查询存储过程

<< Click to Display Table of Contents >>

当前位置:  数据准备 > 数据集 > SQL数据集 

自定义SQL语句查询存储过程

复制链接

1. 概述

SQL存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

用户可以在参数的对话框中进行参数的配置,可以对参数进行配置为不同方向的参数,方向分为IN、OUT和IN_OUT三种。

clip0123

SQL存储过程中的参数也具有这三种模式,其区别如下:

参数模式

说明

IN

输入参数,作为查询条件。

OUT

输出参数,作为返回的结果。

IN_OUT

被存储过程和调用者共同使用,作为变量既要传入,又要传出。

自定义SQL语句创建SQL数据集时,可以调用现有的存储过程,这个时候给出的参数要和数据库的存储过程中的参数的方向保持一致。

2. 示例

2.1 在DB2中使用存储过程创建SQL数据集

1) 在数据库中定义存储过程如下:

create procedure pro_char1

(

in in_char char(10),

out out_char char(10),

in in_varchar varchar(10),

out out_varchar varchar(10)

)

dynamic result sets 1

language SQL

 

P1: begin

set out_char = in_char;

set out_varchar = in_varchar;

end P1

2)选择此数据源的数据集会显示出所有的存储过程,然后选择自定义SQL语句,在SQL语句中填写如下的语句:

Query_SqlSelect

3) 编辑参数,调整参数的方向,使其和存储过程中的定义保持一致:

clip0127

4)刷新数据确认参数的值后,预览数据如图:

clip0128

2.2 在SQL SERVER 中使用存储过程创建SQL数据集

对于 SQL SERVER 数据库来讲,进入模式同 DB2,如果在数据库中创建的存储过程的 语句是:

create procedure testsp

@jiu int

AS

select * from student where consume_number=@jiu

Go

1)选择数据源,再输入SQL语句:{Call mydb.dbo.testsp (?{jiu})}。

Database_sqlserver_sql

说明:

在 SQL SERVER 数据库中写 SQL 语句的时候外面的大括号是必须的。

2)在传递参数的同时也需要在参数对话框中对参数 @jiu 进行相应设置。

Database_sqlserver_sql_parameter

3)刷新数据进行预览。

Database_sqlserver_sql_metadata

2.3 在ORACLE数据库中使用存储过程创建SQL数据集

对于 ORACLE 数据库,进入的模式同 DB2,如果在数据库中创建的存储过程的语句是:

CREATE PROCEDURE SCOTT.SP_OUT_JOBS(ret_cursor1 OUT sys_refcursor)

IS

BEGIN

OPEN ret_cursor1 for select * from HR.JOBS;

END;

1)选择数据源后,输入SQL语句:{call "CELINA"."SP_OUT_JOBS"(?{out_cursor})}。

Database_oracle_sql

2)对参数进行配置。

Database_oracle_parameters

3)刷新数据后进行预览。

Database_oracle_data

如果在存储过程中定义了多个游标结果,可以通过配置参数_RETURN_SP_LOCATION_的大小来指定返回的游标结果。如果在数据库中创建的存储过程的语句是:

CREATE OR REPLACE PROCEDURE AUTOCASE."PRO_QUERY_001"

(

in_lx  IN int,

p_cus_01 OUT   SYS_REFCURSOR,

p_cus_02 OUT   SYS_REFCURSOR    

)

AS

BEGIN

OPEN p_cus_01 FOR

   Select "year","month","day" From AUTOCASE.STRTNUMBER a   Where a."ints" = in_lx;

OPEN p_cus_02 FOR  

   Select"ID","market","product"From AUTOCASE."coffee_chain" a   Where a."ID" = in_lx;  

Exception

  WHEN OTHERS Then

  ROLLBACK;

  Return;

End pro_query_001;

1)选择数据源后,输入SQL 语句: call AUTOCASE.pro_query_001(55,?{ret_cursor1},?{ret_cursor2})。

Database_oracle2_sql

2)同时要对参数进行配置,默认返回第一个游标的结果,如果希望返回游标2的结果有,需要配置参数包括参数_RETURN_SP_LOCATION_为整数2,ret_cursor1和ret_cursor2类型为cursor,方向为out。

Database_oracle2_parameters

3)刷新数据为第一个游标coffee_chain表里的数据。

Database_oracle2_data

2.4 在POSTGRESQL数据库中使用存储过程创建SQL数据集

对于 Postgresql 数据库,进入的模式同 DB2,如果在数据库中创建的存储过程的语句是:

CREATE OR REPLACE FUNCTION "public"."cursor_test"()

 RETURNS "pg_catalog"."refcursor" AS $BODY$

declare

 bound_param_cursor cursor for select "market","product","ID","sales" from coffee_chain order  by  "ID"  limit  10  ;

begin

 open bound_param_cursor;

 return bound_param_cursor;

end;

$BODY$

 LANGUAGE plpgsql VOLATILE

 COST 100

1)选择数据源后,输入SQL 语句:{call "public"."cursor_test"(?{cursor})}。

Database_postgresql_sql

2)同时对参数进行配置,包括参数的类型、方向、默认值等。

Database_postgresql_parameters

4)刷新数据进行预览。

Database_postgresql_data