execute immediate '执行动态语'
返回记录集要用包来实现,在包在定义动态游标

解决方案 »

  1.   

    sql = 动态语'; //拼装
    execute immediate sql;
      

  2.   

    将泥的输入参数拼成SQL,然后“execute immediate”即可。
      

  3.   

    如果execute immediate 不好用,使用dbms_sql包解决问题。
      

  4.   

    example:set serveroutput on-- Create test table
    drop table longtable;
    create table longtable (longcol long) tablespace TOOLS;
    insert into longtable values ( rpad('x', 257, 'QWERTY') );DECLARE
      cur1       PLS_INTEGER         := DBMS_SQL.OPEN_CURSOR;;
      rc         NUMBER;
      long_piece VARCHAR2(256);
      piece_len  INTEGER             := 0;
      long_tab   DBMS_SQL.VARCHAR2S;
      long_len   INTEGER             := 0;
    BEGIN
      DBMS_SQL.PARSE(cur1, 'select longcol from longtable', DBMS_SQL.NATIVE);
      DBMS_SQL.DEFINE_COLUMN_LONG(cur1, 1);
      rc := DBMS_SQL.EXECUTE(cur1);
      rc := DBMS_SQL.FETCH_ROWS(cur1);                       -- Get one row  -- Loop until all pieces of the long column are processed
      LOOP
         DBMS_SQL.COLUMN_VALUE_LONG(cur1, 1, 256, long_len, long_piece, piece_len);
         EXIT WHEN piece_len = 0;
         DBMS_OUTPUT.PUT_LINE('Long piece len='|| piece_len);     long_tab( NVL(long_tab.LAST, 0)+1 ) := long_piece;  -- Add piece to table
         long_len := long_len + piece_len;
      END LOOP;
      DBMS_SQL.CLOSE_CURSOR(cur1);
      DBMS_OUTPUT.PUT_LINE('Total long col fetched, len='|| long_len);
    END;
    /
      

  5.   

    oracle 8 以上的应该可以用sql = 动态语'; //拼装
    execute immediate sql;
    了。