目前,我正在尝试使用sql语句将不同数据库(oracle,sqlserver,MySQL ...等)中的数据导出到文件中。有人可以帮我这样做吗,就像下面这样:
SELECT order_id,product_name FROM orders INTO OUTFILE 'orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
但是我的查询不起作用,出现以下错误
ORA-00933: SQL command not properly ended
答案 0 :(得分:2)
从Oracle开始,一个简单的选项是将查询结果假脱机到文件中(这是您在示例中尝试做的事情)。它是通过命令行工具SQL * Plus完成的。您应该了解有关SET
命令的信息,这些命令使您可以生成 pretty 输出。
这是此类命令的示例:
SQL> set termout off
SQL> set trimspool on
SQL> set echo off
SQL> set verify off
SQL> set autoprint off
SQL> set serveroutput off
SQL> set arraysize 1000
SQL> set pagesize 0
SQL> set linesize 100
SQL> set long 10000
SQL> set numwidth 10
SQL> set feedback off
SQL> set colsep ';'
SQL> col empno format 99999
SQL> col ename format a10
SQL> col sal format 999G990
SQL> spool emps.txt
SQL> select empno, ename, sal from emp;
7369;SMITH ; 800
7499;ALLEN ; 1.600
7521;WARD ; 1.250
7566;JONES ; 2.975
7654;MARTIN ; 1.250
7698;BLAKE ; 2.850
7782;CLARK ; 2.450
7839;KING ; 5.000
7844;TURNER ; 1.500
7900;JAMES ; 950
7902;FORD ; 3.000
7934;MILLER ; 1.300
7788;SCOTT ; 3.000
7876;ADAMS ; 1.100
SQL> spool off
SQL>
顺便说一句,您编写的第2-4行看起来像SQL * Loader的控制文件,用于加载数据(而不是卸载数据)。
答案 1 :(得分:0)
最终,这取决于您使用的数据库。
最简单的方法是使用数据库管理器。例如,我知道phpMyAdmin具有导出功能,并且很容易做到这一点(很好,我将链接一个帖子,可以为您提供帮助)。 MySQL Workbench也有一个。
对于每个不同的数据库,您将需要不同的语法。我将尝试为几种可能性提供答案:
MySQL: 您将使用命令行,导航到要将输出文件保存到的文件夹,然后输入命令:
mysqldump --add-drop-table -u admin -p`cat /etc/psa/.psa.shadow` dbname > dbname.sql
请注意,这将导出整个数据库,而这可能不是您想要的。请参见有关此here的不错的指南。如果您想对字段进行更多选择(使用SELECT),请尝试一下:
SELECT order_id,product_name INTO outfile 'full_path/orders.csv' fields terminated BY ',' from orders;
Oracle: 您应该可以使用以下命令:
exp username/password PARAMETER=(value1,value2,...,valuen)
这是一个更为复杂的程序,我建议您查阅他们的官方文档中有关导出here的信息。
MS SQL: 这可能是最好的。最好的选择是使用Server Management Studio,因为它在那里非常简单,因为我不记得,并且找不到任何简单的命令来执行此操作。您也许可以使用bcp命令(在cmd中)执行某些操作。
真相: 使用服务器管理工作室,到目前为止,这是最好的选择。如果出于某种原因,您需要通过命令提示符或脚本来执行此操作,则有可能(但并非真的)这样做。也请访问this以获得常规帮助。