Java 如何在Oracle上对架构内的所有表执行“选择”查询
我有一个超过1000个表的模式,我需要运行“选择”查询,即Java 如何在Oracle上对架构内的所有表执行“选择”查询,java,database,oracle,Java,Database,Oracle,我有一个超过1000个表的模式,我需要运行“选择”查询,即 SELECT * FROM Table_Name 在模式的每个表上,这是否可能? 如果是,那么怎么做?确定这是可能的。您将编写1000多条语句,然后运行它们。或者您可以编写一个脚本,为您动态生成SQL,然后运行该脚本 但我能想象的只有一个原因,那就是为什么要这样做,那就是从数据库中导出整个模式,然后将数据移动到其他地方 如果这就是你想做的,那么还有更好的方法 您的提议将非常缓慢,并且会压倒您正在使用的任何客户机/程序/显示器 用一些“
SELECT * FROM Table_Name
在模式的每个表上,这是否可能?
如果是,那么怎么做?确定这是可能的。您将编写1000多条语句,然后运行它们。或者您可以编写一个脚本,为您动态生成SQL,然后运行该脚本 但我能想象的只有一个原因,那就是为什么要这样做,那就是从数据库中导出整个模式,然后将数据移动到其他地方 如果这就是你想做的,那么还有更好的方法 您的提议将非常缓慢,并且会压倒您正在使用的任何客户机/程序/显示器
用一些“为什么”或业务需求更新您的问题,我们可以为您提供更好的答案 显然,你做错了。一、 和其他人一样,我看不出这样做的正当理由,但正如你所说的,你提出了一个问题,需要一个答案。所以,这里有一个选项:它基于Scott的模式,其中包含几个表 我正在清理垃圾箱以清除垃圾 “从中选择”选项卡显示我希望获得的输出表 在循环中,PL/SQL将创建一组begin spool到TXT文件中-select语句本身-end spooling SQL*Plus命令 DBMS_输出结果应复制/粘贴到SQL*Plus中并执行 最终结果是包含数据的TXT文件列表 我正在设置LINESIZE和PAGESIZE,以便输出看起来比平时更漂亮;您可能需要将其他一些参数设置为。有关更多信息,请查看SQL*Plus文档 好的,给你:
SQL> purge recyclebin;
Recyclebin purged.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
SQL> set serveroutput on;
SQL> begin
2 for cur_r in (select tname from tab) loop
3 dbms_output.put_line('spool ' || cur_r.tname ||'.txt');
4 dbms_output.put_line('select * from ' || cur_r.tname ||';');
5 dbms_output.put_line('spool off');
6 end loop;
7 end;
8 /
spool BONUS.txt
select * from BONUS;
spool off
spool DEPT.txt
select * from DEPT;
spool off
spool EMP.txt
select * from EMP;
spool off
spool SALGRADE.txt
select * from SALGRADE;
spool off
PL/SQL procedure successfully completed.
SQL>
现在,运行该结果:
SQL> set pagesize 100
SQL> set linesize 100
SQL> spool BONUS.txt
SQL> select * from BONUS;
ENAME JOB SAL COMM
---------- --------- ---------- ----------
KING PRESIDENT 1000 100
SQL> spool off
SQL> spool DEPT.txt
SQL> select * from DEPT;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> spool off
SQL> spool EMP.txt
SQL> select * from EMP;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17.12.80 800 20
7499 ALLEN SALESMAN 7698 20.02.81 1600 300 30
7521 WARD SALESMAN 7698 22.02.81 1250 500 30
7566 JONES MANAGER 7839 02.04.81 2975 20
7654 MARTIN SALESMAN 7698 28.09.81 1250 1400 30
7698 BLAKE MANAGER 7839 01.05.81 2850 30
7782 CLARK MANAGER 7839 09.06.81 2450 10
7839 KING PRESIDENT 17.11.81 5000 10
7844 TURNER SALESMAN 7698 08.09.81 1500 0 30
7900 JAMES CLERK 7698 03.12.81 950 30
7902 FORD ANALYST 7566 03.12.81 3000 20
7934 MILLER CLERK 7782 23.01.82 1300 10
12 rows selected.
SQL> spool off
SQL> spool SALGRADE.txt
SQL> select * from SALGRADE;
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
SQL> spool off
SQL>
在当前目录中,现在有几个TXT文件:
SQL> $dir *.txt
Volume in drive C is OSDisk
Volume Serial Number is 7635-F892
Directory of C:\Users\littlefoot
16.08.2018. 21:12 353 BONUS.txt
16.08.2018. 21:12 658 DEPT.txt
16.08.2018. 21:12 1.494 EMP.txt
16.08.2018. 21:12 764 SALGRADE.txt
4 File(s) 3.269 bytes
0 Dir(s) 304.432.480.256 bytes free
SQL>
现在,您可以自由地尽可能地使用它们。我很欣赏这种讽刺,但关键是要得到结果并将其与目标端进行比较,因为我们正在迁移数据,在迁移时需要确保数据没有损坏或不正确。这不是讽刺,您确实不应该做您要求做的事情。如果您想比较两个数据源之间的数据完整性,这不是一个好方法。@Taimoor请用您的迁移详细信息更新您的问题,以及您希望如何确保数据完整性-您如何进行导出/迁移可能决定您是否/如何/何时会担心数据。这就是我所问的问题,是否可能,有没有什么办法,比如“for”循环,我不需要提及迁移的细节,因为我关心的只是数据完整性。我要问的是一个简单的问题,我们是否可以对架构中的所有表运行select查询,请不要开始编写1000多条select语句。但是,您的问题并不简单,您希望如何处理查询结果?把它们打印到一张纸上,然后看一看?是的,您可以使用“循环”查询表名列表,并运行select*FROM遍历它们,但这不是您真正的问题。你的问题被否决是有原因的——虽然不是我做的。你想从哪里以及如何获得数据?