需求大概是这样的
我传递的参数为表名,
type ref_cur is ref cursor;
v_alltab ref_cur; open v_alltab for s_tab ;
loop
fetch v_alltab into crd_record;
end loop;
close v_alltab;
因为是动态传递的表名,所以crd_record 这里不知道如何定义,我需要把结果取出来,把表里每一个字段值都需要取出来。
我传递的参数为表名,
type ref_cur is ref cursor;
v_alltab ref_cur; open v_alltab for s_tab ;
loop
fetch v_alltab into crd_record;
end loop;
close v_alltab;
因为是动态传递的表名,所以crd_record 这里不知道如何定义,我需要把结果取出来,把表里每一个字段值都需要取出来。
因为PL/SQL不支持动态的类型定义。
再有PL/SQL也不存在通用的数据类型。
CREATE OR REPLACE PROCEDURE P_COLVALBYTABNM(TABNM VARCHAR2,
COLVALUE OUT SYS_REFCURSOR) AS
V_SQL_COLNM VARCHAR2(4000);
V_TABNM VARCHAR2(50);
V_COLNM VARCHAR2(4000);
V_SQL VARCHAR2(4000);
CURSOR COL_CUR(C_TABNM) IS
SELECT T.COLUMN_NAME
FROM USER_TAB_COLUMNS T
WHERE T.TABLE_NAME = C_TABNM
ORDER BY COLUMN_ID;
BEGIN
FOR C IN COL_CUR(TABNM) LOOP
V_SQL_COLNM := V_SQL_COLNM || C.COLUMN_NAME || ',';
END LOOP;
V_SQL_COLNM := SUBSTR(V_SQL_COLNM, 1, LENGTH(V_SQL_COLNM) - 1);
OPEN COLVALUE FOR 'SELECT ' || V_SQL_COLNM || ' FROM ' || V_TABNM;
END P_COLVALBYTABNM;看看是不是这种情况