JDBC + ng-grid(AngularJS 1.4+)分页Oracle 11(数百万条记录)

时间:2017-11-20 05:29:43

标签: angularjs spring jdbc oracle11g

想知道从数据库表(oracle 11)流式传输数百万条记录的最佳方法/方法

我尝试过简单的

  1. stmt.executeQuery()在stmt,resultset等上使用setFetchSize但是当表有数百万条记录时它没有返回任何记录

  2. 尝试使用oracle'rownum'子句,仍然没有返回任何执行

  3. 有以下程序 http://www.sqlines.com/postgresql-to-oracle/copy_export_csv_from_procedure

  4. 但它需要文件包...

    我的问题是有什么最好的方法可以从后端将数百万条记录流式传输到UI

    喜欢在浏览器的本地存储中存储大量(多少)的最佳方式?这必须保护存储,因为数据是敏感的

    请帮助我。

    注意:由于表生成是动态的,因此无法使用ORM / JPA

    谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,这就是我解决它的方法......

第1步: oracle存储过程获取'页面的数量'根据你想要的号码。记录/页面

create or replace
procedure sp_dynlkp_pages (pTable in varchar2, rowCnt out number)
  as

begin
  EXECUTE IMMEDIATE 'select count(*) from ' || pTable into rowCnt;    
end;

第2步:显示页码下拉列表以及从输入页码的下火休息呼叫中选择页码

create or replace procedure sp_dynlkp_data_view (pTable in varchar2, pageNumber in number, pageSize in number, p_data_cursor out sys_refcursor) 
as
  v_sql varchar2(4000);
  v_sql1 varchar2(4000);  

begin
  v_sql := '';
  for r in (select column_name from user_tab_cols where table_name = pTable)loop
    -- decrypt fn
    --v_sql := v_sql || 'f_decrypt(' || r.column_name ||', ' || dKey || ')' || ',';
    v_sql := v_sql || r.column_name || ',';
  end loop;
  v_sql := rtrim(v_sql, ',');-- || ' from ' || pTable; --|| ' where rownum < ' || r_cnt;

  v_sql1 := 'SELECT ' || v_sql || ' FROM
  (
      SELECT a.*, rownum r__
      FROM
      ( select * from '
         ||   pTable 
      || ') a
      WHERE rownum < ' || ((pageNumber * pageSize) + 1) 
  || ')
  WHERE r__ >= ' || (((pageNumber-1) * pageSize) + 1);
  --DBMS_OUTPUT.PUT_LINE(v_sql1);
  open p_data_cursor for v_sql1;         
end;

注意:在UI方面我使用ng-grid(由于项目规范),你们可以使用任何最新的功能丰富的UI网格组件。