如何在Oracle架构中的所有表上执行“选择”查询

时间:2018-08-16 13:42:41

标签: java database oracle

我有一个包含1000多个表的架构,我需要运行“选择”查询。

SELECT * FROM Table_Name

在模式的每个表上,这是否可行? 如果是,那么如何?

2 个答案:

答案 0 :(得分:2)

当然可以。您将编写1,000多个语句,然后运行它们。或者,也许您编写了一个脚本来为您动态生成SQL,然后运行该脚本。

但是,我什至没有一个原因可以想象为什么您想要做这样的事情,那就是从数据库中导出整个架构,并将数据移到其他地方。

如果这就是您要执行的操作,那么有很多更好的方法(Data Pump)。

您提出的建议将非常慢,并且使您所使用的任何客户端/程序/显示都不堪重负。

使用一些“为什么”或业务要求更新您的问题,我们可以为您提供更好的答案。

答案 1 :(得分:0)

您显然做错了。我和其他人一样,看不到这样做的正当理由,但是-正如您所说-您提出了一个问题,需要一个答案。因此,这是一个选择:它基于Scott的模式,该模式包含多个表。

  • 我正在清除回收站以清除垃圾
  • 从TAB中选择将显示我希望获得哪些表作为输出
  • PL / SQL循环将一组开始假脱机创建到TXT文件中-select语句本身-结束假脱机 SQL * Plus命令
  • DBMS_OUTPUT结果应复制/粘贴到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>

现在,您可以自由使用它们。