精华内容
下载资源
问答
  • [Oracle]使用滚动游标

    千次阅读 2011-09-05 23:06:23
    功能:演示了Oracle滚动游标操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效 3. 游标...

    源代码:xx.pc

    /*
    	功能:演示了Oracle滚动游标操作
    
    	定义游标时注意事项:
    	1. DECLARE CURSOR语句必须是使用游标的第一条语句
    	2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效
    	3. 游标所对应的SELECT语句不能包含INTO子句
    	4. 游标语句(DECLARE,OPEN,FETCH,CLOSE)必须在同一个预编译单元内
    */
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <sqlca.h>
    #pragma comment(lib, "orasql10.lib")
    
    int connect();
    void cursor();
    void sql_error();
    
    void main()
    {
    	EXEC SQL WHENEVER SQLERROR DO sql_error();	// 安装错误处理句柄
    	if(connect() == 0)
    	{
    		cursor();
    		EXEC SQL COMMIT RELEASE;				// 提交事务,断开连接
    	}
    	else
    		printf("连接失败\n");
    }
    
    int connect()					// connect to oracle database
    {
    	char username[10], password[10], server[10];
    
    	strcpy(username, "scott");
    	strcpy(password, "zzb888888");
    	strcpy(server, "orcl");
    
    	EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
    
    	if(sqlca.sqlcode == 0)
    		return 0;
    	else
    		return sqlca.sqlcode;
    }
    
    void sql_error()				// print error infomation
    {
    	printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
    }
    
    void cursor()					// 游标操作
    {
    	int eno;					// 定义宿主变量
    	char name[10], action;
    	float salary;
    
    	EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR Select empno, ename, sal from emp;	// 定义游标
    	EXEC SQL OPEN emp_cursor;	// 打开游标
    	EXEC SQL WHENEVER NOT FOUND DO BREAK;	// 游标数据提取完毕后退出循环
    	for(; ;)
    	{
    		printf("\nF: 第一行,P:前一行,N:下一行,L:最后一行\n");
    		printf("C: 当前行,X:退出\n请输入具体操作:");
    		scanf("%c", &action);
    		fflush(stdin);
    
    		switch(action)
    		{
    		case 'F':
    		case 'f':
    			EXEC SQL FETCH FIRST emp_cursor into :eno, :name, :salary;
    			break;
    		case 'P':
    		case 'p':
    			EXEC SQL FETCH PRIOR emp_cursor into :eno, :name, :salary;
    			break;
    		case 'N':
    		case 'n':
    			EXEC SQL FETCH NEXT emp_cursor into :eno, :name, :salary;
    			break;
    		case 'L':
    		case 'l':
    			EXEC SQL FETCH LAST emp_cursor into :eno, :name, :salary;
    			break;
    		case 'C':
    		case 'c':
    			EXEC SQL FETCH CURRENT emp_cursor into :eno, :name, :salary;
    			break;
    		case 'X':
    		case 'x':
    			EXEC SQL CLOSE emp_cursor;
    			return;
    		}
    		printf("name = %s(%d), salary = %.2f\n", name, strlen(name), salary);
    	}
    
    	printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]);		// sqlca.sqlerrd[2]存放着Select语句作用的行数
    }


     

    展开全文
  • 源代码:xx.pc/*功能:演示了Oracle滚动游标操作定义游标时注意事项:1. DECLARE CURSOR语句必须是使用游标的第一条语句2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效3. 游标...

    源代码:xx.pc

    /*

    功能:演示了Oracle滚动游标操作

    定义游标时注意事项:

    1. DECLARE CURSOR语句必须是使用游标的第一条语句

    2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效

    3. 游标所对应的SELECT语句不能包含INTO子句

    4. 游标语句(DECLARE,OPEN,FETCH,CLOSE)必须在同一个预编译单元内

    */

    #include

    #include

    #include

    #include

    #pragma comment(lib, "orasql10.lib")

    int connect();

    void cursor();

    void sql_error();

    void main()

    {

    EXEC SQL WHENEVER SQLERROR DO sql_error();// 安装错误处理句柄

    if(connect() == 0)

    {

    cursor();

    EXEC SQL COMMIT RELEASE;// 提交事务,断开连接

    }

    else

    printf("连接失败\n");

    }

    int connect()// connect to oracle database

    {

    char username[10], password[10], server[10];

    strcpy(username, "scott");

    strcpy(password, "zzb888888");

    strcpy(server, "orcl");

    EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;

    if(sqlca.sqlcode == 0)

    return 0;

    else

    return sqlca.sqlcode;

    }

    void sql_error()// print error infomation

    {

    printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);

    }

    void cursor()// 游标操作

    {

    int eno;// 定义宿主变量

    char name[10], action;

    float salary;

    EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR Select empno, ename, sal from emp;// 定义游标

    EXEC SQL OPEN emp_cursor;// 打开游标

    EXEC SQL WHENEVER NOT FOUND DO BREAK;// 游标数据提取完毕后退出循环

    for(; ;)

    {

    printf("\nF: 第一行,P:前一行,N:下一行,L:最后一行\n");

    printf("C: 当前行,X:退出\n请输入具体操作:");

    scanf("%c", &action);

    fflush(stdin);

    switch(action)

    {

    case 'F':

    case 'f':

    EXEC SQL FETCH FIRST emp_cursor into :eno, :name, :salary;

    break;

    case 'P':

    case 'p':

    EXEC SQL FETCH PRIOR emp_cursor into :eno, :name, :salary;

    break;

    case 'N':

    case 'n':

    EXEC SQL FETCH NEXT emp_cursor into :eno, :name, :salary;

    break;

    case 'L':

    case 'l':

    EXEC SQL FETCH LAST emp_cursor into :eno, :name, :salary;

    break;

    case 'C':

    case 'c':

    EXEC SQL FETCH CURRENT emp_cursor into :eno, :name, :salary;

    break;

    case 'X':

    case 'x':

    EXEC SQL CLOSE emp_cursor;

    return;

    }

    printf("name = %s(%d), salary = %.2f\n", name, strlen(name), salary);

    }

    printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]);// sqlca.sqlerrd[2]存放着Select语句作用的行数

    }

    展开全文
  • 功能:演示了Oracle滚动游标操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效 3. ...
     源码:xx.pc
    
    /*
    	功能:演示了Oracle非滚动游标操作
    
    	定义游标时注意事项:
    	1. DECLARE CURSOR语句必须是使用游标的第一条语句
    	2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效
    	3. 游标所对应的SELECT语句不能包含INTO子句
    	4. 游标语句(DECLARE,OPEN,FETCH,CLOSE)必须在同一个预编译单元内
    */
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include <sqlca.h>
    #pragma comment(lib, "orasql10.lib")
    
    int connect();
    void cursor();
    void sql_error();
    
    void main()
    {
    	EXEC SQL WHENEVER SQLERROR DO sql_error();	// 安装错误处理句柄
    	if(connect() == 0)
    	{
    		cursor();
    		EXEC SQL COMMIT RELEASE;
    	}
    	else
    		printf("连接失败\n");
    }
    
    int connect()					// connect to oracle database
    {
    	char username[10], password[10], server[10];
    
    	strcpy(username, "scott");
    	strcpy(password, "zzb888888");
    	strcpy(server, "orcl");
    
    	EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
    
    	if(sqlca.sqlcode == 0)
    		return 0;
    	else
    		return sqlca.sqlcode;
    }
    
    void sql_error()				// print error infomation
    {
    	printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
    }
    
    void cursor()					// 游标操作
    {
    	int dno, eno;				// 定义宿主变量
    	char name[10];
    	float salary;
    
    	printf("输入部门号:");
    	scanf("%d", &dno);
    
    	EXEC SQL DECLARE emp_cursor CURSOR FOR Select empno, ename, sal from emp where deptno=:dno;	// 定义游标
    	EXEC SQL OPEN emp_cursor;	// 打开游标
    	EXEC SQL WHENEVER NOT FOUND DO break;	// 游标数据提取完毕后退出循环
    	for(; ;)
    	{
    		EXEC SQL FETCH emp_cursor into :eno, :name, :salary;	// 循环提取数据
    		printf("name = %s(%d), salary = %.2f\n", name, strlen(name), salary);
    	}
    	EXEC SQL CLOSE emp_cursor;	// 关闭游标
    
    	printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]);		// sqlca.sqlerrd[2]存放着Select语句作用的行数
    }

    运行结果:

    输入部门号:20
    name = SMITH    (9), salary = 800.00
    name = JONES    (9), salary = 2975.00
    name = SCOTT    (9), salary = 3000.00
    name = ADAMS    (9), salary = 1100.00
    name = FORD     (9), salary = 3000.00
    sqlca.sqlerrd[2] = 5

    展开全文
  • EXEC SQL WHENEVER SQLERROR do sql_error("Oracle error"); EXEC SQL DECLARE temp_curcor SCROLL CURSOR FOR SELECT ename FROM EMP; EXEC SQL OPEN temp_curcor; /*FETCH最后一行记录*/ EXEC ...
  • 代码:xx.pc ... 功能:演示了Oracle滚动游标进行更新(或删除)操作 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长度是

    代码:xx.pc

     

    /* 
        功能:演示了Oracle滚动游标进行更新(或删除)操作
     
        定义游标时注意事项: 
        1. DECLARE CURSOR语句必须是使用游标的第一条语句 
        2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字符有效 
        3. 游标所对应的SELECT语句不能包含INTO子句 
        4. 游标语句(DECLARE,OPEN,FETCH,CLOSE)必须在同一个预编译单元内 
    */  
    #include <stdio.h>   
    #include <string.h>   
    #include <stdlib.h>   
      
    #include <sqlca.h>   
    #pragma comment(lib, "orasql10.lib")
      
    int connect();  
    void cursor();  
    void sql_error();  
      
    void main()  
    {  
        EXEC SQL WHENEVER SQLERROR DO sql_error();  // 安装错误处理句柄   
        if(connect() == 0)  
        {  
            cursor();  
            EXEC SQL COMMIT RELEASE;                // 提交事务,断开连接   
        }  
        else  
            printf("连接失败\n");  
    }  
      
    int connect()                   // connect to oracle database   
    {  
        char username[10], password[10], server[10];  
      
        strcpy(username, "scott");  
        strcpy(password, "scott");  
        strcpy(server, "orcl");  
      
        EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
      
        if(sqlca.sqlcode == 0)  
            return 0;  
        else  
            return sqlca.sqlcode;  
    }  
      
    void sql_error()                // print error infomation   
    {  
        printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);  
    }  
      
    void cursor()                   // 游标操作   
    {  
        int eno;                    // 定义宿主变量   
        char name[10], action;  
        float salary;  
      
        EXEC SQL DECLARE emp_cursor SCROLL CURSOR FOR Select empno, ename, sal from emp FOR UPDATE;    // 定义游标用于更新(或删除)   
        EXEC SQL OPEN emp_cursor;   // 打开游标   
        EXEC SQL WHENEVER NOT FOUND DO BREAK;   // 游标数据提取完毕后退出循环   
        for(; ;)  
        {  
            printf("\nF: 第一行,P:前一行,N:下一行,L:最后一行\n");  
            printf("C: 当前行,X:退出\n请输入具体操作:");  
            scanf("%c", &action);  
            fflush(stdin);  
      
            switch(action)  
            {  
            case 'F':  
            case 'f':  
                EXEC SQL FETCH FIRST emp_cursor into :eno, :name, :salary;  
                break;  
            case 'P':  
            case 'p':  
                EXEC SQL FETCH PRIOR emp_cursor into :eno, :name, :salary;  
                break;  
            case 'N':  
            case 'n':  
                EXEC SQL FETCH NEXT emp_cursor into :eno, :name, :salary;  
                break;  
            case 'L':  
            case 'l':  
                EXEC SQL FETCH LAST emp_cursor into :eno, :name, :salary;  
                break;  
            case 'C':  
            case 'c':  
                EXEC SQL FETCH CURRENT emp_cursor into :eno, :name, :salary;  
                break;  
            case 'X':  
            case 'x':  
                EXEC SQL CLOSE emp_cursor;  
                return;  
            }  
            
    		if(salary < 2000)
    		{
    			EXEC SQL UPDATE emp set comm=:salary*0.1 where CURRENT of emp_cursor;		// 使用游标更新当前行
    			printf("name: %s, 工资: %4.0f, 补助: %6.2f\n", name, salary, salary * 0.1);
    		}
    		else
    			printf("name = %s(%d), salary = %4.0f\n", name, strlen(name), salary);
        }  
      
        printf("sqlca.sqlerrd[2] = %d\n", sqlca.sqlerrd[2]);        // sqlca.sqlerrd[2]存放着Select语句作用的行数   
    }

    展开全文
  • oracle游标

    2018-12-07 16:18:19
    为了处理SQL语句,Oracle将在内存中分配一个区域,这就是上下文区。这个区包含了已经处理完的行数、指向被分析语句的指针,整个区是查询语句返回的数据行集。游标就是指向上下文区句柄或指针 一般复杂的存储过程...
  • Oracle 10g中DBMS_STATS包针对GATHER_TABLE/INDEX_STATS和DELETE_TABLE/INDEX_STATS等收集统计信息的存储过程提供了AUTO_INVALIDATE选项;该参数允许用户指定是否让那些对统计信息有依存关系的游标失效,举例来说...
  • 功能:演示了Oracle滚动游标变量的使用 定义游标时注意事项: 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符,而不是宿主变量,其长度是可以任意的,但只有前31个字
  • oracle游标cursor

    2018-04-04 17:56:00
    6,如何使用显示游标,?如何遍历循环游标? ①使用显示游标 ⑴声明游标:划分存储区域,注意此时并没有执行Select 语句。 CURSOR 游标名( 参数 列表) [返回值类型] IS Select 语句; ⑵打开游标:执行Select 语句,...
  • 静态游标在打开时会将数据集存储在tempdb中,因此显示的数据与游标打开时的数据集保持一致,在游标打开以后对数据库的更新不会显示在游标中。   动态游标在打开后会反映对数据库的更改。所有UPDAT...
  • sql游标游标的类型:1、静态游标(不检测数据行的变化)2、动态游标(反映所有数据行的改变)3、仅向前游标(不支持滚动)4、键集游标(能反映修改,但不能准确反映插入、删除)游标使用顺序:1、定义游标2、打开游标3、使用...
  • Oracle 10g中DBMS_STATS包针对GATHER_TABLE/INDEX_STATS和DELETE_TABLE/INDEX_STATS等收集统计信息的存储过程提供了AUTO_INVALIDATE选项; 该参数允许用户指定是否让那些对统计信息有依存关系的游标失效,举例来说...
  • oracle 游标

    2015-11-03 09:55:29
    1,什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制。    ②关系数据库中的操作是在完整的行集合上执行的。  由 SELECT 语句返回的行集合包括满足该语句的 WHERE 子句所列条件...
  • oracle游标

    2019-11-24 15:37:34
    游标(cursor )是一个私有的SQL工作区域,是一个指向上下文区的句柄或指针,位于内存中的 "临时表"。 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的...
  • Oracle 游标

    2018-07-04 13:08:00
    直接上游标代码 系统隐式游标 declare mychar varchar2(100); begin select name into mychar from table_mytest where id=11;//一个j基础操作,所以就有一个隐式游标。 if SQL%found then//写法 ...
  • ORACLE游标

    2018-07-06 10:54:11
    1,什么是游标?  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制。    ②关系数据库中的操作是在完整的行集合上执行的。  由SELECT 语句返回的行集合包括满足该语句的WHERE 子句所列条件的所有行。...
  • Oracle游标的概念和简单应用

    千次阅读 2018-05-24 20:55:55
    概念: 游标用于处理select语句的查询结果(结果集 ResultSet) , ...使用步骤与语法格式(非滚动游标) 1. 声明游标 申明区: cursor 游标名称 is select语句; 2. 打开游标 open 游标名称; ...
  • oracle plsql编程有没有可以自由滚动游标? 比如有一个需求,一个cursor遍历n笔记录,需要取n笔记录中的某一个字段做两两循环比较.不知道该如何实现,不知道有没有可以自由滚动游标呢?欢迎围观,欢迎提供参考思路,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,779
精华内容 1,511
关键字:

oracle滚动游标