2009-09-23 29 views
13

Tôi có một số tập lệnh SQL mà tôi đang cố gắng tự động hóa. Trong quá khứ tôi đã sử dụng SQL * Plus, và được gọi là nhị phân sqlplus theo cách thủ công, từ một tập lệnh bash.Làm thế nào để bạn thực hiện SQL từ bên trong một tập lệnh bash?

Tuy nhiên, tôi đang cố gắng tìm hiểu xem có cách nào để kết nối với DB hay không và gọi tập lệnh từ bên trong tập lệnh bash ... để tôi có thể chèn date và làm cho truy vấn chạy liên quan đến số ngày nhất định trong quá khứ.

Trả lời

19

Tôi hơi bối rối. Bạn có thể gọi sqlplus từ bên trong tập lệnh bash. Đây có thể là những gì bạn đã làm với tuyên bố đầu tiên của bạn

Thử Thi sau trong script bash của bạn:

#!/bin/bash   
echo Start Executing SQL commands 
sqlplus <user>/<password> @file-with-sql-1.sql 
sqlplus <user>/<password> @file-with-sql-2.sql 

Nếu bạn muốn để có thể truyền dữ liệu vào kịch bản của bạn, bạn có thể làm điều đó thông qua sqlplus bởi qua các đối số vào kịch bản:

Nội dung file-với-sql-1.sql

select * from users where username='&1'; 

Sau đó ch ange tập lệnh bash để gọi sqlplus đi qua giá trị

#!/bin/bash 

MY_USER=bob 
sqlplus <user>/<password> @file-with-sql-1.sql $MY_USER 
-4

Vì Bash không có kết nối cơ sở dữ liệu sql ... bạn sẽ cần sử dụng một số loại công cụ của bên thứ ba.

+6

sqlplus _is_ rằng "công cụ của bên thứ ba" – michael

-3

Đây là một cách đơn giản để chạy các truy vấn MySQL trong bash shell

mysql -u [database_username] -p [database_password] -D [database_name] -e "SELECT * FROM [table_name]" 
+3

Các OP đang sử dụng Oracle. –

+0

Đây không phải là oracle. –

0

Có lẽ bạn có thể truy vấn SQL ống để sqlplus. Nó hoạt động cho mysql:

echo "SELECT * FROM table" | mysql --user=username database 
8

Bạn cũng có thể sử dụng một "ở đây tài liệu" để làm điều tương tự:

VARIABLE=SOMEVALUE 

sqlplus connectioninfo << HERE 
start file1.sql 
start file2.sql $VARIABLE 
quit 
HERE 
Các vấn đề liên quan