当尝试以表格形式获取游标数据时,它无法正常工作
when trying cursor fetching data in tabular form its not working properly
我只想用表格形式的游标获取数据 10g 它只显示最后一条记录并且也不接受变量 p_name(错误的绑定变量)所有其他都被接受 p_name 是 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;
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;
我只是希望它以表格形式从 table 中获取所有数据
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
table 创建一个数据块并在输入表单时执行查询。
无论如何,你错过了NEXT_RECORD
。没有它,新的光标值会覆盖以前的值。
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;
一个较短的版本是游标 FOR
循环;它使您免于键入和处理几件事(打开和关闭游标,注意退出循环,声明游标变量)。此外,最好在表单项之前加上它们所属的块(例如 :block.cid
)——这可能会修复 "bad bind variable" 错误:
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;
请注意,NEXT_RECORD
是一个受限过程,不能从 任何 触发器调用;他们中的一些不允许这样的过程 - 如果发生这种情况 - 你将不得不创建一个解决方法。最简单的是我已经建议的那个——在 c
table 上创建的数据块(没有游标,没有循环)。
我只想用表格形式的游标获取数据 10g 它只显示最后一条记录并且也不接受变量 p_name(错误的绑定变量)所有其他都被接受 p_name 是 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;
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;
我只是希望它以表格形式从 table 中获取所有数据
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
table 创建一个数据块并在输入表单时执行查询。
无论如何,你错过了NEXT_RECORD
。没有它,新的光标值会覆盖以前的值。
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;
一个较短的版本是游标 FOR
循环;它使您免于键入和处理几件事(打开和关闭游标,注意退出循环,声明游标变量)。此外,最好在表单项之前加上它们所属的块(例如 :block.cid
)——这可能会修复 "bad bind variable" 错误:
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;
请注意,NEXT_RECORD
是一个受限过程,不能从 任何 触发器调用;他们中的一些不允许这样的过程 - 如果发生这种情况 - 你将不得不创建一个解决方法。最简单的是我已经建议的那个——在 c
table 上创建的数据块(没有游标,没有循环)。