oracle中游标的使用(一)
程序员文章站
2022-07-02 14:26:47
...
一 .使用游标的四个步骤:
-
定义游标
CURSOR <游标名称> IS <select语句> ;
- 打开游标
OPEN <游标名称> ; - 取出使用游标
FETCH <游标名称> INTO 变量1,变量2…..变量n;
或者
FETCH <游标名称> INTO 行对象; - 关闭游标
CLOSE <游标名称>;
二 游标的属性
- %NOTFOUND
如果取出游标失败,也就是FETCH 语句失败,则该属性是 true,否则为 false - %FOUND
如果取出游标成功,也就是FETCH语句成功,该属性为 true,否则为 false - ROWCOUNT
返回游标当前行的行数 - ISOPEN
如果游标是开着的,则返回 true ,否则返回false
例子演示
declare
--定义游标 ,将 T-EMP表中的 EMPID,EMPNAME,EMPTELEP放入游标中
CURSOR C_EMP IS SELECT EMPID,EMPNAME,EMPTELEP FROM T_EMP;
P_EMPID T_EMP.EMPID%TYPE;
P_EMPNAME T_EMP.EMPNAME%TYPE;
P_EMPTELEP T_EMP.EMPTELEP%TYPE;
BEGIN
--打开游标
OPEN C_EMP;
LOOP
--取出游标
FETCH C_EMP INTO P_EMPNAME,P_EMPID,P_EMPTELEP ;
IF C_EMP%FOUND THEN
dbms_output.put_line('员工id 是' || P_EMPID || ',员工姓名是' || P_EMPNAME || ',员工电话是' || P_EMPTELEP);
END IF;
EXIT WHEN C_EMP%NOTFOUND; --当游标找不到时,退出循环
END LOOP;
END;
输出结果是:
怎么回事? 怎么员工id 是 姓名了,姓名的结果是 id值,注意:
我在 定义 游标的 语句是: CURSOR C_EMP IS SELECT EMPID,EMPNAME,EMPTELEP FROM T_EMP;
EMPID 在前面,EMPNAME在后面
但是我在取出游标的时候: FETCH C_EMP INTO P_EMPNAME,P_EMPID,P_EMPTELEP ;
在这里,我将顺序换了一下,所以结果就出错了,可以得知:
* 我在定义游标的时候,放入字段的顺序是什么样子的,取出游标的时候,也要按什么样子的顺序取出 *
那么,当我定义游标是SELECT * FROM T_EMP的时候,一定要注意字段的顺序,可以先查看该表。
正确的输出结果是:
如果是 对于指定的 字段值的 结果,就需要使用带参数的游标
例子演示二
declare
--给游标设定参数,部门ID,注意,一定要where ID = P_ID
CURSOR C_EMP(P_ID T_EMP.ID%TYPE) IS SELECT EMPID,EMPNAME,EMPTELEP FROM T_EMP WHERE ID = P_ID;
--在定义 行对象 的时候,可以将类型定义成游标的类型
--在取 行对象 中每个字段的时候,可以 行对象.字段名 ,具体看下面输出
P_EMP C_EMP%ROWTYPE;
BEGIN
--打开游标的时候,给参数赋值,指定部门编号是 111
OPEN C_EMP(111);--放入参数
FETCH C_EMP INTO P_EMP;
WHILE C_EMP%FOUND
LOOP
--取出行对象的每个字段,可以 行对象.字段 ,该字段是表中的真实字段名
DBMS_OUTPUT.put_line('员工的编号是' || P_EMP.EMPID || ',员工的姓名是' || P_EMP.EMPNAME || ',员工的电话是' || P_EMP.EMPTELEP);
--在LOOP循环中,取出游标,并移动到下一个位置
FETCH C_EMP INTO P_EMP;
END LOOP;
CLOSE C_EMP;
END;
结果是:
上一篇: vue -- 引入外部组件弹框
下一篇: Tkinter设置消息框、对话框