定义一个函数,就一个参数,是传入的select语句,返回一个记录集。
网上说可以使用table()来做,但是实验了很多次都解决不了,求高手指点。
网上说可以使用table()来做,但是实验了很多次都解决不了,求高手指点。
解决方案 »
- ORCALE 海量数据统计问题
- 求思路
- 关于连接oracle报错ORA-12500的问题
- 请问扩展名为:.dat的数据文件怎么样才能打开?请高手指点!!!
- 100分,紧急,有关oracle CLOB 的问题,请问如何将CLob的类型的字段插入到数据库中?除了使用Stream来插入,
- 恳请赐教一SQL,一列中符合条件的数量占总数的比例
- 如何优化sql语句
- 工作经验和硕士学历那个重要
- 删表时提示:resource busy and acquire with NOWAIT specified???
- 当A表中某一字段更新时,B表内容复制一遍改变某一字段插入B表
- imp导入报错,求帮忙看看。
- 我的DDLl触发器为什么触发不了?
2 /类型已创建。ChenZw> CREATE OR REPLACE FUNCTION GETDATA
2 RETURN TABLEOFTAPEVARCHAR2
3 IS
4 BEGIN
5 RETURN TABLEOFTAPEVARCHAR2('1','2','3');
6 END;
7 /函数已创建。ChenZw> SELECT * FROM TABLE(GETDATA);COLUMN_VALUE
------------
1
2
3已选择3行。
我现在搞不定的是,传入的select语句是动态的,并且列数是不固定的
--这个函数允许你输入一个select语句并返回一个游标变量
CREATE OR REPLACE FUNCTION REF_EMP(V_S IN VARCHAR2) RETURN SYS_REFCURSOR IS
REF_EMP SYS_REFCURSOR;
BEGIN
OPEN REF_EMP FOR V_S;
RETURN REF_EMP;
END;DECLARE
V_SQL VARCHAR2(100) := 'SELECT * FROM emp'; --这个就是你输入的select
V_EMP EMP%ROWTYPE;
V_EMP_REF SYS_REFCURSOR;
BEGIN
V_EMP_REF := REF_EMP(V_SQL);--调用函数 FETCH V_EMP_REF
INTO V_EMP;
LOOP
EXIT WHEN V_EMP_REF%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
FETCH V_EMP_REF
INTO V_EMP;
END LOOP;
CLOSE V_EMP_REF;END;