2011-01-20 10 views
7

SQL có tùy chọn để đổ dữ liệu vào một tập tin, sử dụng tùy chọn INTO OUTFILE, cho exmapleLàm thế nào để nối thêm dữ liệu từ SQL vào một tập tin hiện có

SELECT * from FIshReport INTO OUTFILE './FishyFile' 

Vấn đề là, lệnh này chỉ được phép nếu tệp không tồn tại trước nó. Nó tạo ra các tập tin và sau đó nhập dữ liệu. Vì vậy, có cách nào để thêm dữ liệu vào một tệp theo cách này không?

+3

nhà cung cấp DB mà chúng ta đang nói đến ở đây? –

+0

Tôi đang sử dụng MySql DB –

Trả lời

4

Như trang MySQL trên cú pháp SELECT gợi ý:

http://dev.mysql.com/doc/refman/5.0/en/select.html

thay thế vào đó là đưa ra SELECT từ khách hàng MySQL:

However, if the MySQL client software is installed on the remote machine, 
you can instead use a client command such as mysql -e "SELECT ..." > file_name 
to generate the file on the client host. 

đó, trong trường hợp của bạn, sẽ được sửa đổi thành:

mysql -e "SELECT * from FishReport" >> file_name 

để bạn chỉ cần ppend vào tập tin.

Từ kịch bản Tcl của bạn, bạn chỉ có thể phát hành này như một lệnh exec:

http://www.tcl.tk/man/tcl/tutorial/Tcl26.html

0

Bạn luôn có thể nối thêm đầu ra từ kịch bản SQL của bạn vào một tập tin sử dụng >>

Ví dụ (đối với Sybase):

isql <script.sql>> outputfile.out 

Tôi không thể cho bạn biết những gì tương đương là dành cho MySQL nhưng nguyên tắc phải giống nhau.

Tất nhiên đầu ra tất cả sẽ đi đến một tệp vì vậy nếu tập lệnh SQL của bạn xuất ra nhiều lựa chọn SQL khác nhau cho các tệp đầu ra thì bạn cần phải tách tập lệnh lên.

+0

không thực sự hoạt động .. Tôi đang sử dụng MySql từ tập lệnh tcl, vì vậy nó không in kết quả trên màn hình bất cứ khi nào lệnh được phát hành. Nhưng cảm ơn :) –

1

Tôi nghĩ rằng MySQL không cho phép phụ thêm dữ liệu vào một tập tin hiện có hoặc ghi đè lên một file đang tồn tại vì những lý do an ninh. Một công việc xung quanh có thể là để lưu resuts trong các tập tin riêng biệt và sau đó nối thêm các tập tin bằng cách sử dụng IO.

+1

đây là những gì im làm ngay bây giờ, chỉ hy vọng có một giải pháp tốt hơn :) –

+0

tiếc là không có một :( –

0

Bạn chỉ có thể thêm nó vào một biến. Sau đó, sử dụng SELECT với UNION.

declare t varchar(100); 

set @myvar = concat(' 
    select * INTO OUTFILE \'',file,'\' 
    from (
     select \'',t,'\' 
     union all 
     SELECT col from tbl where x  
    ) a' 
); 
PREPARE stmt1 FROM @myvar; 
EXECUTE stmt1; 
Deallocate prepare stmt1;