动态SQL游标和函数返回游标举例(转载)

动态SQL游标的例子,来自: http://www.itpub.net/thread-257998-1-1.html
strSQL:='SELECT * FROM ' || tmp_tbl;
open c_sign_stat for strSQL;
 

函数返回游标的例子,来自:http://soft.zdnet.com.cn/software_zone/2009/1221/1568365.shtml

 
过程或函数能返回或out静态游标吗?
 
CREATE OR REPLACE PACKAGE Types AS 
  TYPE cursor_type IS REF CURSOR; 
END Types; 
/
 
CREATE OR REPLACE 
PROCEDURE GetEmpRS (p_deptno    IN  emp.deptno%TYPE, 
                    p_recordset OUT Types.cursor_type) AS 
BEGIN 
  OPEN p_recordset FOR 
    SELECT ename, 
          empno, 
          deptno 
    FROM  emp 
    WHERE  deptno = p_deptno 
    ORDER BY ename; 
END GetEmpRS; 
/
 
 
在pl/sql中使用: 
SET SERVEROUTPUT ON SIZE 1000000 
DECLARE 
  v_cursor  Types.cursor_type; 
  v_ename  emp.ename%TYPE; 
  v_empno  emp.empno%TYPE; 
  v_deptno  emp.deptno%TYPE; 
BEGIN 
  GetEmpRS (p_deptno    => 30, 
            p_recordset => v_cursor); 
            
  LOOP 
    FETCH v_cursor 
    INTO  v_ename, v_empno, v_deptno; 
    EXIT WHEN v_cursor%NOTFOUND; 
    DBMS_OUTPUT.PUT_LINE(v_ename || ' | ' || v_empno || ' | ' || v_deptno); 
  END LOOP; 
  CLOSE v_cursor; --记得close游标,add by valleylord
END; 
/
 
在java中使用: 
import java.sql.*; 
import Oracle.jdbc.*;
 
public class TestResultSet  { 
  public TestResultSet() { 
    try { 
      DriverManager.registerDriver (new Oracle.jdbc.OracleDriver()); 
      Connection conn = DriverManager.getConnection("jdbc:Oracle:oci:@w2k1", "scott", "tiger"); 
      CallableStatement stmt = conn.prepareCall("BEGIN GetEmpRS(?, ?); END;"); 
      stmt.setInt(1, 30); // DEPTNO 
      stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR 
      stmt.execute(); 
      ResultSet rs = ((OracleCallableStatement)stmt).getCursor(2); 
      while (rs.next()) { 
        System.out.println(rs.getString("ename") + ":" + rs.getString("empno") + ":" + rs.getString("deptno")); 
      } 
      rs.close(); 
      rs = null; 
      stmt.close(); 
      stmt = null; 
      conn.close(); 
      conn = null; 
    } 
    catch (SQLException e) { 
      System.out.println(e.getLocalizedMessage()); 
    } 
  }
 
  public static void main (String[] args) { 
    new TestResultSet(); 
  } 
}
 
 

转载于:https://www.cnblogs.com/valleylord/archive/2012/11/07/2758784.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在设计 SQL Server 网上购物系统时,游标函数是非常有用的工具。游标可用于处理一系列数据行,而函数可用于执行特定的操作并返回结果。 以下是创建游标函数的步骤: 创建游标: 1. 使用 DECLARE 语句声明游标变量,并指定要查询的数据集。 2. 使用 OPEN 语句打开游标并将游标指向数据集的第一行。 3. 使用 FETCH 语句检索当前游标指向的行,并将该行的数据存储到变量中。 4. 使用 WHILE 循环遍历游标,直到到达数据集的末尾。 5. 在处理完数据后,使用 CLOSE 和 DEALLOCATE 语句关闭游标。 以下是一个示例创建游标SQL 代码: ``` DECLARE @ProductName varchar(100) DECLARE @ProductPrice money DECLARE ProductCursor CURSOR FOR SELECT ProductName, ProductPrice FROM Products OPEN ProductCursor FETCH NEXT FROM ProductCursor INTO @ProductName, @ProductPrice WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Product name: ' + @ProductName PRINT 'Product price: ' + CAST(@ProductPrice AS varchar(20)) FETCH NEXT FROM ProductCursor INTO @ProductName, @ProductPrice END CLOSE ProductCursor DEALLOCATE ProductCursor ``` 创建函数: 1. 使用 CREATE FUNCTION 语句创建函数。 2. 在函数中编写 SQL 代码,执行特定的操作。 3. 使用 RETURN 语句返回结果。 以下是一个示例创建函数SQL 代码: ``` CREATE FUNCTION GetProductCountByCategory ( @CategoryName varchar(50) ) RETURNS int AS BEGIN DECLARE @ProductCount int SELECT @ProductCount = COUNT(*) FROM Products WHERE CategoryName = @CategoryName RETURN @ProductCount END ``` 在以上示例中,函数名为 GetProductCountByCategory,它接收一个参数 CategoryName,并返回该类别下的产品数量。在函数中,使用 COUNT 函数计算产品数量,并将结果存储在变量 @ProductCount 中,最后使用 RETURN 语句返回结果。 总的来说,游标函数都是非常有用的 SQL Server 工具,可以帮助您更好地处理数据和执行特定的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值