1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
CREATE OR REPLACE PROCEDURE a_test
AS t_sql VARCHAR2(2000);
t_a VARCHAR2(20);
t_b VARCHAR2(20);
t_c VARCHAR2(20);
t_d VARCHAR2(20);
BEGIN t_c := 'f' ;
t_d := 'g' ;
--这里可为insert 等任何sql语句.
t_sql := 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD' ;
EXECUTE IMMEDIATE t_sql
INTO t_a, t_b --如果不需要查询赋值,这里不用写 INTO XXX语句.
USING t_c, t_d -- 如果不需要使用变量,不用写USING XXX语句.
;
END a_test;
/ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
--带返回游标的动态执行语句. CREATE OR REPLACE PROCEDURE a_test2
( o_cursor OUT SYS_REFCURSOR
) AS t_sql VARCHAR2(2000);
t_a VARCHAR2(20);
t_b VARCHAR2(20);
t_c VARCHAR2(20);
t_d VARCHAR2(20);
BEGIN t_c := 'f' ;
t_d := 'g' ;
--这里可为insert 等任何sql语句.
t_sql := 'SELECT * FROM t1 WHERE c = :tempC OR c = :tempD' ;
OPEN o_cursor FOR t_sql
USING t_c, t_d -- 同样如果不需要使用变量,不用写USING XXX语句.
;
END a_test2;
/ |
SQL Server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
CREATE PROCEDURE a_test
AS DECLARE @t_sql NVARCHAR(2000); --sql server 动态语句要申明为NVARCHAR类型.
DECLARE @t_a VARCHAR (20);
DECLARE @t_b VARCHAR (20);
DECLARE @t_c VARCHAR (20);
DECLARE @t_d VARCHAR (20);
BEGIN SET @t_c = 'f' ;
SET @t_d = 'g' ;
--这里可为insert 等任何sql语句.
SET @t_sql = 'SELECT @tempA = MAX(a), @tempB = MAX(b) FROM t1 WHERE c = @tempC OR c = @tempD' ;
--不可在EXECUTE SP_EXECUTESQL后边拼接字符串
EXECUTE SP_EXECUTESQL @t_sql
--如果不带参数,以下申明变量及传入参数都不需要写.
--申明变量类型及出入参.必须一行写完,不能换行.
,N '@tempA VARCHAR(20) OUT, @tempB VARCHAR(20) OUT, @tempC VARCHAR(20), @tempD VARCHAR(20)'
-- 参数值. 传入变量的顺序要与申明变量的顺序一致,
,@t_a OUT , @t_b OUT , @t_c, @t_d
;
END GO --sql server返回游标与普通的语句一样,直接将t_sql赋值成 select * from XXX 即可. |
Db2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
CREATE PROCEDURE a_test
( v_c VARCHAR (20)
) BEGIN DECLARE t_sql VARCHAR2(2000);
DECLARE t_a VARCHAR2(20);
DECLARE t_b VARCHAR2(20);
DECLARE t_c VARCHAR2(20);
DECLARE t_d VARCHAR2(20);
-- FOR 后边的t_stmt要与下边的 prepare后的变量一致,其类型为 statement.
DECLARE t_cur CURSOR FOR t_stmt;
SET t_c = 'f' ;
SET t_d = 'g' ;
--这里可为insert 等任何sql语句.
SET t_sql = 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD' ;
--我目前在这里没找到其它方式来替代,只能使用游标读取:
PREPARE t_stmt FROM t_sql;
OPEN t_cur
--如果不需要使用变量,不用写USING XXX语句.
USING t_c, t_d
;
FETCH t_cur INTO t_a, t_b;
CLOSE t_cur;
END |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/* 带游标返回的动态语句与普通语句一样,只是申明游标时,要申明返回类型的游标 并且在begin关键字之前需要插入: DYNAMIC RESULT SETS 1 LANGUAGE SQL */ CREATE PROCEDURE a_test2
( v_c VARCHAR (20)
) DYNAMIC RESULT SETS 1
LANGUAGE SQL BEGIN DECLARE t_sql VARCHAR2(2000);
DECLARE t_a VARCHAR2(20);
DECLARE t_b VARCHAR2(20);
DECLARE t_c VARCHAR2(20);
DECLARE t_d VARCHAR2(20);
-- FOR 后边的t_stmt要与下边的 prepare后的变量一致,其类型为 statement.
DECLARE t_cur CURSOR WITH RETURN FOR t_stmt;
SET t_c = 'f' ;
SET t_d = 'g' ;
--这里可为insert 等任何sql语句.
SET t_sql = 'SELECT MAX(a), MAX(b) FROM t1 WHERE c = :tempC OR c = :tempD' ;
PREPARE t_stmt FROM t_sql;
OPEN t_cur
--如果不需要使用变量,不用写USING XXX语句.
USING t_c, t_d
;
END |
相关推荐
JDBC驱动程序是实现这一接口的桥梁,它允许Java代码与数据库之间建立连接,执行SQL语句并处理结果。本篇文章将深入探讨如何使用JDBC连接到不同类型的数据库,包括MySQL、SQL Server、Oracle、DB2和Access。 1. **...
- 通过链接服务器访问其他数据库系统时,SQL Server实例可以通过OpenQuery函数调用其他服务器上的SQL语句,并获得查询结果。 4. SQL Server对Proficy Historian数据库的访问和数据整合方法 - 文章通过实例展示了...
根据提供的文档内容,我们可以得出关于Oracle 10g、DB2 v9.5以及SQL Server 2000这三种数据库管理系统在不同场景下的性能对比分析。以下将详细阐述各个测试场景下的具体表现: ### 一、后台调用存储过程性能对比 ...
1. **SQL PL基础**:SQL PL是DB2中的过程语言,类似于PL/SQL(Oracle)和T-SQL(SQL Server)。它允许用户编写复杂的业务逻辑,包括条件语句、循环、异常处理等。 2. **创建存储过程**:如何定义参数,指定输入、...
本文将详细介绍如何使用Java连接Oracle8、SQL Server、DB2、Informix、Sybase、MySQL以及PostgreSQL等数据库,并提供相应的代码示例。 #### 1. Java连接Oracle8/8i/9i数据库 在连接Oracle数据库时,我们需要使用...
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它可以与各种数据库进行交互,包括SQL Server、MySQL和DB2等。本篇内容将详细解释如何使用JSP连接这些不同的数据库。 首先,我们来看一下JSP...
在数据库管理和维护过程中,频繁需要执行一系列SQL语句。然而,大多数数据库管理系统(DBMS)并未提供直观的方式展示每条SQL语句的具体执行时间。这导致了在调试或优化SQL性能时存在一定的挑战。为了弥补这一不足,...
本篇将详细解释如何使用JSP连接SQLServer、MySQL和DB2这三种不同类型的数据库。 1. **JDBC-ODBC桥接连接SQLServer** JDBC-ODBC桥接是早期Java应用程序连接数据库的常用方式,它依赖于系统中已经配置好的ODBC数据...
成功映射之后,用户就能够通过SQL Server执行SQL语句来操作异构数据库中的数据。这些操作可以包括查询、插入、更新、删除等,它们都像操作本地SQL Server数据库一样简单,只是在数据源的路径上可能会有所不同。 ...
ADO 是一种通用的数据访问接口,允许开发者访问多种数据源,包括 SQL Server、Oracle、IBM DB2 等。 在选择远程数据连接方法时,需要考虑到应用程序的需求和性能要求。例如,如果需要访问多种数据源,ADO 可能是一...
本文详细介绍了如何使用JDBC连接Oracle、SQL Server、DB2等多种数据库的方式,并给出了具体的代码示例。这些示例涵盖了不同数据库类型的连接配置方法,包括连接字符串、驱动加载及连接建立的具体步骤。希望对您有所...
它由 **American National Standards Institute (ANSI)** 认证为标准语言,并被众多数据库系统所采用,包括但不限于 **Microsoft SQL Server**、**IBM DB2**、**Oracle**、**MySQL** 和 **Microsoft Access**。...
备份数据库在SQL Server中通常涉及到`sp_addumpdevice`存储过程和`BACKUP DATABASE`命令,如示例所示,用来创建备份设备并执行数据库备份。 创建新表是数据存储的核心。`CREATE TABLE`语句允许你定义表的结构,包括...
- 编写使用SELECT FOR XML EXPLICIT语句的SQL Server存储过程,以生成XML-SS格式的数据。 - 通过Internet Explorer使用URL访问SQLXML模板查询,获取XML格式的数据。 - 利用Internet Explorer的“文件”-“另存为...
4.3.1 ORACLE动态SQL语句的一些特点72 4.3.2 使用动态SQL的四种方法72 4.3.3 SQLDA75 第五节INFORMIX的嵌入SQL/C语言89 5.1 一个简单的入门例子89 5.2 宿主变量91 5.3 嵌入SQL的处理过程96 5.4 动态SQL语言...
- **关系数据库**:基于关系模型,是最常用的一种类型,如Oracle、DB2、Sybase、MSSQL Server、Informax、MySQL等。当前企业中广泛使用的是关系数据库系统,特别是在商业应用领域。 - **树状数据库**:采用层次...
- **ORACLE动态SQL语句的一些特点**:Oracle动态SQL的特殊之处。 - **使用动态SQL的四种方法**:构建和执行动态SQL的不同方法。 - **SQLDA**:用于描述动态查询结果的结构。 ### 第五节 INFORMIX 的嵌入SQL/C语言 ...
### SQL语句基础知识点详解 #### 一、SQL概述与基本概念 - **定义**: SQL (Structured Query Language),即结构化查询语言,是一种专门用于管理关系数据库的标准编程语言。它被广泛应用于各种数据库管理系统(DBMS...