动态时能用SELECT INTO,
用ORDER BY 和 ROWNUM结合的时候,需要用子查询,因为语句是先取出前几个记录,然后再ORDER BY,
SELECT * FROM (SELECT * FROM TABLE ORDER BY COL1) WHERE ROWNUM=1;
把你的输出的WK_SQL仔细检查一下,看是不是没有空格什么的

解决方案 »

  1.   

    关于动态SQL的使用,可以参考这里的一篇文章.http://blog.csdn.net/dinya2003/关于动态SQL的使用.
      

  2.   

    试一下DECLARE
        WK_KEIJO_YMD VARCHAR(8) := null;
        WK_SQL VARCHAR2(5000) := NULL;
        P_IF_TABLE_ID VARCHAR(30) := 'ZBTNV_H530';
    BEGIN
        WK_SQL := ' SELECT ';
        WK_SQL := WK_SQL || ' KEIJO_YMD ';
        WK_SQL := WK_SQL || ' FROM '||P_IF_TABLE_ID;
        WK_SQL := WK_SQL || ' WHERE ROWNUM = 1 ';
        WK_SQL := WK_SQL || ' ORDER BY KEIJO_YMD  ';
        DBMS_OUTPUT.PUT_LINE(WK_SQL);
    EXECUTE IMMEDIATE WK_SQL into WK_KEIJO_YMD;
        DBMS_OUTPUT.PUT_LINE(WK_KEIJO_YMD);
    END;
      

  3.   

    1  DECLARE
      2      WK_KEIJO_YMD VARCHAR(8) := null;
      3      WK_SQL VARCHAR2(5000) := NULL;
      4      P_IF_TABLE_ID VARCHAR(30) := 'cw_rjzb';
      5  BEGIN
      6      WK_SQL := ' SELECT ';
      7      WK_SQL := WK_SQL || ' lsh ';
      8      WK_SQL := WK_SQL || ' FROM '||P_IF_TABLE_ID;
      9      WK_SQL := WK_SQL || ' WHERE ROWNUM = 1 ';
     10      WK_SQL := WK_SQL || ' ORDER BY lsh  ';
     11      DBMS_OUTPUT.PUT_LINE(WK_SQL);
     12  EXECUTE IMMEDIATE WK_SQL into WK_KEIJO_YMD;
     13      DBMS_OUTPUT.PUT_LINE(WK_KEIJO_YMD);
     14* END;
    SQL> /
    SELECT  lsh  FROM cw_rjzb WHERE ROWNUM = 1  ORDER BY lsh
    27003PL/SQL procedure successfully completed.SQL> select lsh from cw_rjzb where rownum=1 order by lsh;      LSH
    ---------
        27003SQL>