Database 以变量作为参数的游标
我有一个带光标的函数。在这个游标中,我想得到另一个游标,我传递了一个参数。此参数是主光标的值。我的逻辑是这样的:Database 以变量作为参数的游标,database,oracle,cursor,Database,Oracle,Cursor,我有一个带光标的函数。在这个游标中,我想得到另一个游标,我传递了一个参数。此参数是主光标的值。我的逻辑是这样的: CURSOR cursor1 IS SELECT * FROM SCHEMAP.TABLA1 ; registro cursor1%ROWTYPE; CURSOR cursor2 (parametro IN NUMBER) IS SELECT * FROM SCHEMAP.TABLA2 WHERE CAMPO_1 = parametro; registroV
CURSOR cursor1 IS
SELECT * FROM SCHEMAP.TABLA1 ;
registro cursor1%ROWTYPE;
CURSOR cursor2 (parametro IN NUMBER) IS
SELECT * FROM SCHEMAP.TABLA2 WHERE CAMPO_1 = parametro;
registroVac cursor2%ROWTYPE;
..........
BEGIN
.......
OPEN cursor1;
FETCH cursor1 INTO registro;
WHILE cursor1%found
LOOP
dbms_output.put_line('VARIABLE1:' + registro.VARIABLE1 );
OPEN cursor2(registro.VARIABLE1);
FETCH cursor2 INTO registroVac;
WHILE cursor2%found
LOOP
SELECT HC3PKDMUTILITIES.GET_DIAGNOSTIC_CODE_VAC(registro.VARIABLE1,registroVac.VAC_DOS,registroVac.VAC_CVH)
into v_diagnostic_code
from DUAL;
dbms_output.put_line('v_diagnostic_code -->' || v_diagnostic_code);
FETCH cursor2 INTO registroVac;
END LOOP;
CLOSE cursor2;
FETCH cursor1 INTO registro;
END LOOP;
CLOSE cursor1;
当我运行该进程时,cursor2中出现如下错误:
CURSOR cursor1 IS
SELECT * FROM SCHEMAP.TABLA1 ;
registro cursor1%ROWTYPE;
CURSOR cursor2 (parametro IN NUMBER) IS
SELECT * FROM SCHEMAP.TABLA2 WHERE CAMPO_1 = parametro;
registroVac cursor2%ROWTYPE;
..........
BEGIN
.......
OPEN cursor1;
FETCH cursor1 INTO registro;
WHILE cursor1%found
LOOP
dbms_output.put_line('VARIABLE1:' + registro.VARIABLE1 );
OPEN cursor2(registro.VARIABLE1);
FETCH cursor2 INTO registroVac;
WHILE cursor2%found
LOOP
SELECT HC3PKDMUTILITIES.GET_DIAGNOSTIC_CODE_VAC(registro.VARIABLE1,registroVac.VAC_DOS,registroVac.VAC_CVH)
into v_diagnostic_code
from DUAL;
dbms_output.put_line('v_diagnostic_code -->' || v_diagnostic_code);
FETCH cursor2 INTO registroVac;
END LOOP;
CLOSE cursor2;
FETCH cursor1 INTO registro;
END LOOP;
CLOSE cursor1;
ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误CAMPO_1:102435313
CAMPO_1被证明是一个数字数据库和registro.VARIABLE1。如何解决这个问题?。谢谢。这只是一个被剪掉的代码吗?您的应用程序中有更多的代码吗 如果没有,那么您可以一次完成所有任务,这应该更快、更短:
CURSOR All_in_one IS
SELECT VARIABLE1,
HC3PKDMUTILITIES.GET_DIAGNOSTIC_CODE_VAC(registro.VARIABLE1,registroVac.VAC_DOS,registroVac.VAC_CVH) AS v_diagnostic_code
FROM SCHEMAP.TABLA2 t registroVac
RIGHT OUTER JOIN SCHEMAP.TABLA1 registro ON CAMPO_1 = VARIABLE1;
你的代码有很多错误 首先让我印象深刻的是,您正在打开cursor1,打开、获取和关闭cursor2,然后从cursor1获取。这似乎不正确 其次,为什么要费心拥有两个游标并自己重新创建嵌套循环联接呢?SQL完全能够处理连接,优化器非常擅长决定使用哈希连接、嵌套循环等连接 第三,如果hc3pkdulities.GET_DIAGNOSTIC_CODE_VAC是一个函数,为什么要从dual中选择它,从而在PL/SQL和SQL引擎之间引入上下文切换,而不是简单地将函数的返回值分配给变量 我认为您可以将上述代码改写为:
declare
v_diagnostic_code varchar2(100); -- wasn't sure of the correct datatype; this is just a guess
begin
for rec in (select t1.variable1,
t2.vac_dos,
t2.vac_cvh
from schemap.tabla1 t1
inner join schemap.tabla2 t2 on (t2.campo_1 = t1.variable1))
loop
v_diagnostic_code := hc3pkdmutilities.get_diagnostic_code_vac(rec.variable1,rec.vac_dos,rec.vac_cvh);
dbms_output.put_line('variable1 --> '||rec.variable1||', v_diagnostic_code -->' || v_diagnostic_code);
end loop;
end;
/
尝试在SCHEMAP.TABLA2.CAMPO_1%类型中使用游标游标游标2参数