我正在尝试在 Oracle 中创建一个存储过程,该过程具有一个输入参数和一个输出变量,如果有结果,则将数据集返回到我的 .Net 应用程序。主要问题是我无法更改程序的签名,需要执行 if 条件来验证是否存在记录。我一直在努力的主要问题是游标(执行和返回信息),并计算选择的结果。
这是我正在尝试检索数据的示例。
CREATE PROCEDURE SP_Testing (v_input IN VARCHAR2(50), v_OutID NUMBER(1))
AS
TYPE v_record_botoes IS RECORD (
v_dummy_col1 VARCHAR2(50),
v_dummy_col2 VARCHAR2(250)
);
TYPE table_botoes IS TABLE OF v_record_botoes;
tt_botoes table_botoes;
v_ref_cursor SYS_REFCURSOR;
CURSOR v_cursor IS
(SELECT dt.v_dummy_col1,
dt.v_dummy_col2
FROM dummy_table dt
WHERE v_dummy_col3 = v_input);
v_check NUMBER;
BEGIN
tt_botoes := table_botoes();
v_check := 0;
FOR v_row IN v_cursor
LOOP
tt_botoes.extend;
tt_botoes(tt_botoes.COUNT) := v_row;
END LOOP;
v_check := tt_botoes.COUNT;
-- condition that need to know the nr of records of the select
IF v_check = 0 THEN
v_OutID := 0;
ELSE
v_OutID := 1;
OPEN v_ref_cursor FOR
SELECT *
FROM tt_botoes; -- also tryed "FROM TABLE (tt_botoes)" and "FROM TABLE (cast(tt_botoes AS table_botoes))"
-- return dataset to .net application
DBMS_SQL.RETURN_RESULT(v_ref_cursor)
END IF;
END;
已经尝试将v_cursor转换为sys_refcursor以由DBMS_SQL 包输出,但没有得到任何结果。我还尝试创建一个临时表来保存信息,但随后出现了并发问题。
知道我做错了什么,或者任何其他可能的解决方案来解决这个问题?
提前致谢