这是动态sql的第三种
你需要在dbms_sql.execute之前
DBMS_SQL.DEFINE_COLUMN
然后在dbms_sql.execute之后
DBMS_SQL.COLUMN_VALUE具体请去察看相应的oracle文档

解决方案 »

  1.   


    dbms_sql.parse(cursor_name,v_sqlquery,dbms_sql);
    改为
    dbms_sql.parse(cursor_name,v_sqlquery,dbms_sql.native);
      

  2.   

    nSQL := DBMS_SQL.OPEN_CURSOR;
    table_name := 'T' || LTRIM(TO_CHAR( bbbh, v_format ));
    sqlcmd := 'SELECT COUNT(*) FROM tabs WHERE TABLE_NAME=:TBNAME';
    DBMS_SQL.PARSE( nSQL, sqlcmd, DBMS_SQL.v7 ) ;
    DBMS_SQL.BIND_VARIABLE( nSQL, ':TBNAME', table_name ) ;
    DBMS_SQL.DEFINE_COLUMN( nSQL, 1, my_count ) ;
    ret := DBMS_SQL.EXECUTE( nSQL ) ;
    LOOP
    IF DBMS_SQL.FETCH_ROWS( nSQL ) = 0 THEN 
    EXIT;
    END IF;
    DBMS_SQL.COLUMN_VALUE( nSQL, 1, my_count ) ;
    END LOOP;
    EXCEPTION 
    when others then 
    DBMS_SQL.CLOSE_CURSOR(nSQL);
    raise_application_error( -20514, sqlerrm );
    END;
    DBMS_SQL.CLOSE_CURSOR(nSQL);
    这句话要防在循环外面
    cursor_name:=dbms_sql.open_cursor;
    LOOP
          dbms_sql.parse(cursor_name,v_sqlquery,DBMS_SQL.v7);DBMS_SQL.v7加上个。V7