我有一个包含1000多个表的架构,我需要运行“选择”查询。
SELECT * FROM Table_Name
在模式的每个表上,这是否可行? 如果是,那么如何?
答案 0 :(得分:2)
当然可以。您将编写1,000多个语句,然后运行它们。或者,也许您编写了一个脚本来为您动态生成SQL,然后运行该脚本。
但是,我什至没有一个原因可以想象为什么您想要做这样的事情,那就是从数据库中导出整个架构,并将数据移到其他地方。
如果这就是您要执行的操作,那么有很多更好的方法(Data Pump)。
您提出的建议将非常慢,并且使您所使用的任何客户端/程序/显示都不堪重负。
使用一些“为什么”或业务要求更新您的问题,我们可以为您提供更好的答案。
答案 1 :(得分:0)
您显然做错了。我和其他人一样,看不到这样做的正当理由,但是-正如您所说-您提出了一个问题,需要一个答案。因此,这是一个选择:它基于Scott的模式,该模式包含多个表。
好,你去:
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>
现在,您可以自由使用它们。