oracle 中怎么用函数控制游标实现如mssql中的滚动游标的效果 oracle 中怎么用函数控制游标实现如mssql中的滚动游标的效果查了好多资料发现oracle中的游标提取数据后自动指向结果集中下条数据。我怎么在取一个数据后再次给游标定位到上次提取数据的位置。。知道的来发表下观点啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用集合吧,例如:SQL> set linesize 120SQL> SET SERVEROUTPUT ON;SQL> SELECT * FROM emp ORDER BY sal; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20 7900 JAMES CLERK 7698 03-12月-81 950 30 7876 ADAMS CLERK 7788 23-5月 -87 1100 20 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7934 MILLER CLERK 7782 23-1月 -82 1300 10 7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30 7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------------- ---------- ---------- ---------- 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20 7902 FORD ANALYST 7566 03-12月-81 3000 20 7839 KING PRESIDENT 17-11月-81 5000 10已选择14行。SQL> SQL> DECLARE 2 TYPE tab_type IS TABLE OF NUMBER; 3 v_sal tab_type; 4 BEGIN 5 --按薪水排升序后求两相邻记录的新水差距 6 SELECT sal BULK COLLECT INTO v_sal FROM emp ORDER BY sal; 7 FOR i IN 1 .. v_sal.count LOOP 8 IF i > 1 THEN 9 dbms_output.put_line(v_sal(i) - v_sal(i - 1)); 10 END IF; 11 END LOOP; 12 END; 13 /1501501500502001008504001252502000PL/SQL 过程已成功完成。当然这种需求也可用分析函数来实现SQL> SELECT t.empno, 2 t.ename, 3 t.sal, 4 sal - lag(t.sal) over(ORDER BY sal) delta_value 5 FROM emp t 6 ORDER BY t.sal; EMPNO ENAME SAL DELTA_VALUE---------- ---------- ---------- ----------- 7369 SMITH 800 7900 JAMES 950 150 7876 ADAMS 1100 150 7521 WARD 1250 150 7654 MARTIN 1250 0 7934 MILLER 1300 50 7844 TURNER 1500 200 7499 ALLEN 1600 100 7782 CLARK 2450 850 7698 BLAKE 2850 400 7566 JONES 2975 125 EMPNO ENAME SAL DELTA_VALUE---------- ---------- ---------- ----------- 7788 SCOTT 3000 25 7902 FORD 3000 0 7839 KING 5000 2000已选择14行。SQL> 在SQLplus上执行脚本,脚本很简单,为什只执行了前两行,后面就不执行了?急啊! 这种情况下SQL怎么写 oracle里是否有函数,能把中文的符号和数字转换成英文? 疑难问题!oralce 多个hsodbc.exe不释放如何解决? oracle数据库根据时间查询数据,所取的时间范围问题 求救数据库同步触发器因该处理那些异常 触发器的问题.我写的这个触发器老是说编译有错,不明白什么意思,请指教!谢 相当简单的问题 数据导入的问题 请教SQL语句,在线等待。。。 添加数据,批量 oracle表在线重定义后blocks变小,所占空间变小?
SQL> set linesize 120
SQL> SET SERVEROUTPUT ON;
SQL> SELECT * FROM emp ORDER BY sal; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7900 JAMES CLERK 7698 03-12月-81 950 30
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30
7934 MILLER CLERK 7782 23-1月 -82 1300 10
7844 TURNER SALESMAN 7698 08-9月 -81 1500 0 30
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7902 FORD ANALYST 7566 03-12月-81 3000 20
7839 KING PRESIDENT 17-11月-81 5000 10已选择14行。SQL>
SQL> DECLARE
2 TYPE tab_type IS TABLE OF NUMBER;
3 v_sal tab_type;
4 BEGIN
5 --按薪水排升序后求两相邻记录的新水差距
6 SELECT sal BULK COLLECT INTO v_sal FROM emp ORDER BY sal;
7 FOR i IN 1 .. v_sal.count LOOP
8 IF i > 1 THEN
9 dbms_output.put_line(v_sal(i) - v_sal(i - 1));
10 END IF;
11 END LOOP;
12 END;
13 /150
150
150
0
50
200
100
850
400
125
25
0
2000PL/SQL 过程已成功完成。当然这种需求也可用分析函数来实现SQL> SELECT t.empno,
2 t.ename,
3 t.sal,
4 sal - lag(t.sal) over(ORDER BY sal) delta_value
5 FROM emp t
6 ORDER BY t.sal; EMPNO ENAME SAL DELTA_VALUE
---------- ---------- ---------- -----------
7369 SMITH 800
7900 JAMES 950 150
7876 ADAMS 1100 150
7521 WARD 1250 150
7654 MARTIN 1250 0
7934 MILLER 1300 50
7844 TURNER 1500 200
7499 ALLEN 1600 100
7782 CLARK 2450 850
7698 BLAKE 2850 400
7566 JONES 2975 125 EMPNO ENAME SAL DELTA_VALUE
---------- ---------- ---------- -----------
7788 SCOTT 3000 25
7902 FORD 3000 0
7839 KING 5000 2000已选择14行。SQL>