日期:2014-05-17  浏览次数:20882 次

子查询与trunc()函数
oracle表:code_table 字段code varchar2类型,valuedef varchar2类型;
valuedef的值是一个函数'trunc(sys.dbms_random.value(1400,1500), 0)'
请问如何通过sql语句查询出valuedef对应函数执行结果。

我的想法是这样:
select (select valuedef from code_table where code='061-00') from dual;
但是得到的结果是trunc(sys.dbms_random.value(1400,1500), 0),并不是该函数执行的结果,
select trunc(sys.dbms_random.value(1400,1500), 0) from dual;就能得到函数结果。
有什么办法能用一个sql语句输出函数的结果。

------解决方案--------------------
我大致理解了,楼主的意思是valuedef字段的值为trunc(sys.dbms_random.value(1400,1500), 0),不是这个结果。

按照这个需求,那只能使用动态SQL语句了,数据多的话,用游标吧。这里我就拿一条数据做个示范:


CREATE TABLE CODE_TABLE
(CODE VARCHAR2(50),
 VALUEDEF VARCHAR2(100)
);



INSERT INTO CODE_TABLE VALUES('061-00','TRUNC(SYS.DBMS_RANDOM.VALUE(1400,1500), 0)');

COMMIT;



DECLARE
    vSQL         VARCHAR2(1000);
    vValuedef    VARCHAR2(100);
    vResult      NUMBER;
BEGIN
    SELECT VALUEDEF
    INTO vValuedef
    FROM CODE_TABLE
    WHERE CODE = '061-00';
    
    vSQL := 'SELECT ' 
------解决方案--------------------
 vValuedef 
------解决方案--------------------
 ' FROM DUAL';
    EXECUTE IMMEDIATE vSQL INTO vResult;
    DBMS_OUTPUT.PUT_LINE(vResult);
EXCEPTION 
    WHEN NO_DATA_FOUND THEN
        NULL; 
    WHEN TOO_MANY_ROWS THEN
        NULL;    
END;