Oracle 当尝试以表格形式游标获取数据时,其工作不正常
我想用游标以表格形式10g获取数据,它只显示最后一条记录,也不接受变量p_名称(坏绑定变量)所有其他都被接受p_名称为varchar2其他都是数字此代码在运行plsql时工作正常 我写了这段代码Oracle 当尝试以表格形式游标获取数据时,其工作不正常,oracle,plsql,oracleforms,Oracle,Plsql,Oracleforms,我想用游标以表格形式10g获取数据,它只显示最后一条记录,也不接受变量p_名称(坏绑定变量)所有其他都被接受p_名称为varchar2其他都是数字此代码在运行plsql时工作正常 我写了这段代码 DECLARE c_id C.CID%TYPE; c_name C.P_NAME%TYPE; c_ro C.RO%TYPE; C_TR C.TR%TYPE; CURSOR c_customers is SELECT all CID, P_name, RO, TR FROM C; BEGI
DECLARE
c_id C.CID%TYPE;
c_name C.P_NAME%TYPE;
c_ro C.RO%TYPE;
C_TR C.TR%TYPE;
CURSOR c_customers is
SELECT all CID, P_name, RO, TR FROM C;
BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, C_name, c_RO, C_TR;
EXIT WHEN c_customers%notfound;
:CID := C_ID;
--:P_NAME := C_NAME;
:RO := C_RO;
:TR := C_TR;
END LOOP;
CLOSE c_customers;
END;
我只希望它以表格形式从表中获取所有数据这是关于表单的
declare
c_empno emp.empno%type;
c_ename emp.ename%type;
c_job emp.job%type;
c_deptno emp.deptno%type;
c_stat varchar2(10):='test';
l_stat varchar2(10);
cursor c_emp_data is select empno, ename, job, deptno, c_stat
from emp;
Begin
Open c_emp_Data;
loop
fetch c_emp_Data into c_empno, c_ename, c_job, c_deptno, l_stat;
dbms_output.put_line(c_empno||' '||c_ename||c_job||c_deptno||l_stat);
exit when c_emp_data%notfound;
end loop;
end;
就我个人而言,我会避免使用游标和循环,只需基于c
表创建一个数据块,并在输入表单时执行查询
无论如何,您缺少下一条记录。如果没有它,新的光标值将覆盖以前的值
DECLARE
c_id C.CID%TYPE;
c_name C.P_NAME%TYPE;
c_ro C.RO%TYPE;
C_TR C.TR%TYPE;
CURSOR c_customers is
SELECT all CID, P_name, RO, TR FROM C;
BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, C_name, c_RO, C_TR;
EXIT WHEN c_customers%notfound;
:CID := C_ID;
:P_NAME := C_NAME;
:RO := C_RO;
:TR := C_TR;
NEXT_RECORD; --> this is missing
END LOOP;
CLOSE c_customers;
END;
较短的版本是循环的游标;它使您不用输入和处理一些事情(打开和关闭游标,注意退出循环,声明游标变量)。此外,最好在表单项前面加上它们所属的块(例如,:block.cid
)-这可能会修复“坏绑定变量”错误:
请注意,NEXT_RECORD
是一个受限过程,不能从任何触发器调用它;他们中的一些人不允许这样的程序,所以——如果发生这种情况——你必须创建一个变通方法。最简单的一个是我已经建议过的一个——在c
表上创建一个数据块(没有光标,没有循环)。谢谢Littlefoot是的,这是最好的,谢谢你的回复,我很喜欢你很多论坛,你做得很好
BEGIN
FOR cur_r in (select cid, p_name, ro, tr from c)
LOOP
:block.CID := cur_r.cid;
:block.P_NAME := cur_R.p_NAME;
:block.RO := cur_r.RO;
:block.TR := cur_r.TR;
NEXT_RECORD; --> this is missing
END LOOP;
END;