`
sbfivwsll
  • 浏览: 63401 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

sql server、db2、oracle 存储过程动态sql语句示例

阅读更多

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
 
0
0
分享到:
评论

相关推荐

    JDBC连接各种数据库的驱动(mySQL,SQLServer,Oracle,DB2,Access)

    本篇文章将深入探讨如何使用JDBC连接到不同类型的数据库,包括MySQL、SQL Server、Oracle、DB2和Access。 1. **MySQL驱动**: MySQL是一种开源、轻量级的关系型数据库管理系统,广泛应用于Web应用。在Java中,我们...

    基于SQL Server链接服务器实现Proficy Historian数据库的访问.pdf

    - 通过链接服务器访问其他数据库系统时,SQL Server实例可以通过OpenQuery函数调用其他服务器上的SQL语句,并获得查询结果。 4. SQL Server对Proficy Historian数据库的访问和数据整合方法 - 文章通过实例展示了...

    DB2.SQL.PL.Essential.Guide(DB2 存储过程_English)

    1. **SQL PL基础**:SQL PL是DB2中的过程语言,类似于PL/SQL(Oracle)和T-SQL(SQL Server)。它允许用户编写复杂的业务逻辑,包括条件语句、循环、异常处理等。 2. **创建存储过程**:如何定义参数,指定输入、...

    Oracle10g、Db2v9.5、SqlServer2000性能对比.docx

    根据提供的文档内容,我们可以得出关于Oracle 10g、DB2 v9.5以及SQL Server 2000这三种数据库管理系统在不同场景下的性能对比分析。以下将详细阐述各个测试场景下的具体表现: ### 一、后台调用存储过程性能对比 ...

    java连接数据库(Oracle8、Sql Server、DB2、Informix、Sybase、MySQL、PostgreSQL)

    本文将详细介绍如何使用Java连接Oracle8、SQL Server、DB2、Informix、Sybase、MySQL以及PostgreSQL等数据库,并提供相应的代码示例。 #### 1. Java连接Oracle8/8i/9i数据库 在连接Oracle数据库时,我们需要使用...

    DB查询分析器批量执行多条SQL语句并查看各自的执行时间

    在数据库管理和维护过程中,频繁需要执行一系列SQL语句。然而,大多数数据库管理系统(DBMS)并未提供直观的方式展示每条SQL语句的具体执行时间。这导致了在调试或优化SQL性能时存在一定的挑战。为了弥补这一不足,...

    oracle转DB2 对照

    - **Oracle** 和 **DB2** 都支持动态SQL语句,即可以在运行时构造并执行SQL语句。 - Oracle示例: ```sql DECLARE stmt VARCHAR2(200); BEGIN stmt := 'SELECT * FROM table WHERE column = :value'; EXECUTE ...

    jsp连接SQLServer,mysql,db2数据库[参考].pdf

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,它可以与各种数据库进行交互,包括SQL Server、MySQL和DB2等。本篇内容将详细解释如何使用JSP连接这些不同的数据库。 首先,我们来看一下JSP...

    SQL Server教程SQL简介和SQL语法

    它由 **American National Standards Institute (ANSI)** 认证为标准语言,并被众多数据库系统所采用,包括但不限于 **Microsoft SQL Server**、**IBM DB2**、**Oracle**、**MySQL** 和 **Microsoft Access**。...

    MS、ORACLE等SQL语句大全

    备份数据库在SQL Server中通常涉及到`sp_addumpdevice`存储过程和`BACKUP DATABASE`命令,如示例所示,用来创建备份设备并执行数据库备份。 创建新表是数据存储的核心。`CREATE TABLE`语句允许你定义表的结构,包括...

    jsp连接SQLServer,mysql,db2数据库宣贯.pdf

    - **执行SQL语句**:调用`executeQuery()`方法执行SQL,获取`ResultSet`对象。 - **处理结果集**:遍历`ResultSet`,提取所需数据。 2. **JDBC直接连接Oracle** 对于Oracle数据库,我们可以使用Oracle提供的...

    用vfp与sqlserver构建ClientServer应用程序(远程视图)(1)[整理].pdf

    ADO 是一种通用的数据访问接口,允许开发者访问多种数据源,包括 SQL Server、Oracle、IBM DB2 等。 在选择远程数据连接方法时,需要考虑到应用程序的需求和性能要求。例如,如果需要访问多种数据源,ADO 可能是一...

    SQL SERVER管理异构数据库.pdf

    成功映射之后,用户就能够通过SQL Server执行SQL语句来操作异构数据库中的数据。这些操作可以包括查询、插入、更新、删除等,它们都像操作本地SQL Server数据库一样简单,只是在数据源的路径上可能会有所不同。 ...

    JDBC连接各种数据库字符串大全

    本文详细介绍了如何使用JDBC连接Oracle、SQL Server、DB2等多种数据库的方式,并给出了具体的代码示例。这些示例涵盖了不同数据库类型的连接配置方法,包括连接字符串、驱动加载及连接建立的具体步骤。希望对您有所...

    sql语句基础.docx

    ### SQL语句基础知识点详解 #### 一、SQL概述与基本概念 - **定义**: SQL (Structured Query Language),即结构化查询语言,是一种专门用于管理关系数据库的标准编程语言。它被广泛应用于各种数据库管理系统(DBMS...

    嵌入SQL资料

    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语言...

    嵌入式SQL语言

    - **ORACLE动态SQL语句的一些特点**:Oracle动态SQL的特殊之处。 - **使用动态SQL的四种方法**:构建和执行动态SQL的不同方法。 - **SQLDA**:用于描述动态查询结果的结构。 ### 第五节 INFORMIX 的嵌入SQL/C语言 ...

    数据库db2及Oracle的自动备份

    **SQL语句示例**: ```sql CONNECT TO DB2688usersdcgd USING 1qaz2WSX; QUIESCE DATABASE IMMEDIATE FORCE CONNECTIONS; CONNECT RESET; BACKUP DATABASE DB2688usersdcgd USING 1qaz2WSX TO "F:\database\DB2备份...

Global site tag (gtag.js) - Google Analytics