【发布时间】:2012-11-14 17:53:09
【问题描述】:
如果我想从表中获取记录(表名是动态的输入),如何定义记录持有者或如何从这个定义的表中获取数据? p_table_name%rowtype 将不符合要求,因为 p_table_name 是一个参数,而不是表名。
PROCEDURE do_scan(p_table_name IN VARCHAR2
,p_min_num IN NUMBER
,p_time_range IN NUMBER
,p_problem_desc OUT
,p_result_code OUT)
IS
TYPE ObjCurTyp IS REF CURSOR;
v_obj_cursor ObjCurTyp;
v_obj_record ???????(p_table_name%rowtype)
BEGIN
v_stmt_str := 'Select * from :t where date_started > TRUNC(SYSDATE-3)';
OPEN v_obj_cursor FOR v_stmt_str USING p_table_name;
LOOP
FETCH v_obj_cursor INTO v_obj_record;
EXIT WHEN v_obj_cursor %NOTFOUND;
END LOOP;
END do_scan;
【问题讨论】:
-
我认为不可能创建动态记录类型。可能有一种完全不同且更好的方法可以让您获得想要的结果。您希望程序输出什么?我认为这与两个输出参数有关。
-
@Jeremy 我只想从表中取出所有数据。这两个输出参数只是用来检查数据是否被正确检索。
-
数据获取后会去哪里?是不是有一些你想对数据做的工作,不按照步骤从表中取出所有行似乎毫无意义。
-
@Jeremy 好的,我想验证数据是否以例外格式插入。但这里的重点是先获取数据。