Oracle
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; /
--带返回游标的动态执行语句. 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
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 --如果不带参数,以下申明变量及传入参数都不需要写. --申明变量类型及出入参.必须一行写完,不能换行.(如果实在太长,可以放到一个NVARCHAR变量中保存,这里传入NVARCHAR变量) ,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
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; -- EXECUTE IMMEDIATE t_sql; -- 如果不需要使用游标、不需要using参数,只是简单执行一个动态sql时,可以直接此语句即可. END
/* 带游标返回的动态语句与普通语句一样,只是申明游标时,要申明返回类型的游标 并且在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连接到不同类型的数据库,包括MySQL、SQL Server、Oracle、DB2和Access。 1. **MySQL驱动**: MySQL是一种开源、轻量级的关系型数据库管理系统,广泛应用于Web应用。在Java中,我们...
- 通过链接服务器访问其他数据库系统时,SQL Server实例可以通过OpenQuery函数调用其他服务器上的SQL语句,并获得查询结果。 4. SQL Server对Proficy Historian数据库的访问和数据整合方法 - 文章通过实例展示了...
1. **SQL PL基础**:SQL PL是DB2中的过程语言,类似于PL/SQL(Oracle)和T-SQL(SQL Server)。它允许用户编写复杂的业务逻辑,包括条件语句、循环、异常处理等。 2. **创建存储过程**:如何定义参数,指定输入、...
根据提供的文档内容,我们可以得出关于Oracle 10g、DB2 v9.5以及SQL Server 2000这三种数据库管理系统在不同场景下的性能对比分析。以下将详细阐述各个测试场景下的具体表现: ### 一、后台调用存储过程性能对比 ...
本文将详细介绍如何使用Java连接Oracle8、SQL Server、DB2、Informix、Sybase、MySQL以及PostgreSQL等数据库,并提供相应的代码示例。 #### 1. Java连接Oracle8/8i/9i数据库 在连接Oracle数据库时,我们需要使用...
在数据库管理和维护过程中,频繁需要执行一系列SQL语句。然而,大多数数据库管理系统(DBMS)并未提供直观的方式展示每条SQL语句的具体执行时间。这导致了在调试或优化SQL性能时存在一定的挑战。为了弥补这一不足,...
- **Oracle** 和 **DB2** 都支持动态SQL语句,即可以在运行时构造并执行SQL语句。 - Oracle示例: ```sql DECLARE stmt VARCHAR2(200); BEGIN stmt := 'SELECT * FROM table WHERE column = :value'; EXECUTE ...
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它可以与各种数据库进行交互,包括SQL Server、MySQL和DB2等。本篇内容将详细解释如何使用JSP连接这些不同的数据库。 首先,我们来看一下JSP...
它由 **American National Standards Institute (ANSI)** 认证为标准语言,并被众多数据库系统所采用,包括但不限于 **Microsoft SQL Server**、**IBM DB2**、**Oracle**、**MySQL** 和 **Microsoft Access**。...
备份数据库在SQL Server中通常涉及到`sp_addumpdevice`存储过程和`BACKUP DATABASE`命令,如示例所示,用来创建备份设备并执行数据库备份。 创建新表是数据存储的核心。`CREATE TABLE`语句允许你定义表的结构,包括...
- **执行SQL语句**:调用`executeQuery()`方法执行SQL,获取`ResultSet`对象。 - **处理结果集**:遍历`ResultSet`,提取所需数据。 2. **JDBC直接连接Oracle** 对于Oracle数据库,我们可以使用Oracle提供的...
ADO 是一种通用的数据访问接口,允许开发者访问多种数据源,包括 SQL Server、Oracle、IBM DB2 等。 在选择远程数据连接方法时,需要考虑到应用程序的需求和性能要求。例如,如果需要访问多种数据源,ADO 可能是一...
成功映射之后,用户就能够通过SQL Server执行SQL语句来操作异构数据库中的数据。这些操作可以包括查询、插入、更新、删除等,它们都像操作本地SQL Server数据库一样简单,只是在数据源的路径上可能会有所不同。 ...
本文详细介绍了如何使用JDBC连接Oracle、SQL Server、DB2等多种数据库的方式,并给出了具体的代码示例。这些示例涵盖了不同数据库类型的连接配置方法,包括连接字符串、驱动加载及连接建立的具体步骤。希望对您有所...
### SQL语句基础知识点详解 #### 一、SQL概述与基本概念 - **定义**: SQL (Structured Query Language),即结构化查询语言,是一种专门用于管理关系数据库的标准编程语言。它被广泛应用于各种数据库管理系统(DBMS...
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动态SQL语句的一些特点**:Oracle动态SQL的特殊之处。 - **使用动态SQL的四种方法**:构建和执行动态SQL的不同方法。 - **SQLDA**:用于描述动态查询结果的结构。 ### 第五节 INFORMIX 的嵌入SQL/C语言 ...
**SQL语句示例**: ```sql CONNECT TO DB2688usersdcgd USING 1qaz2WSX; QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS; CONNECT RESET; BACKUP DATABASE DB2688usersdcgd USING 1qaz2WSX TO "F:\database\DB2备份...