Như một phác thảo cơ bản, bạn có thể chạy SQL * Plus với một heredoc để thực hiện truy vấn và gán đầu ra cho một biến:
P_NUMBER=`sqlplus -s /nolog <<!EOF
connect username/password
whenever sqlerror exit failure
set pagesize 0
set feedback off
select your_value from your_table where your_key = 'something';
exit 0
!EOF`
Bao gồm trong dấu gạch ngược sẽ gán kết quả cho biến. Sau đó, $ P_NUMBER sẽ giữ bất kỳ giá trị nào mà truy vấn của bạn nhận được (hoặc thông báo lỗi nếu thông tin đăng nhập sai, chẳng hạn). Sẽ hữu ích nếu bạn chắc chắn truy vấn sẽ trả về chính xác một kết quả. Bạn cũng có thể kiểm tra mã trả lại bằng $?
để tìm lỗi, trước khi bạn cố gắng sử dụng biến của mình.
Bao gồm -s
gắn cờ, tắt phản hồi và đặt kích thước trang thành 0 sẽ triệt tiêu tất cả nhiễu để bạn chỉ nhận được kết quả và không phải loại bỏ các biểu ngữ, tiêu đề, v.v.
Và cuối cùng tôi đã sử dụng /nolog
và đặt connect
bên trong heredoc để thông tin xác thực không xuất hiện trong danh sách quy trình, đây là một vấn đề bảo mật thường bị bỏ qua. Nếu bạn không muốn làm điều đó và hãy đặt thông tin đăng nhập là sqlplus username/passwd
, bạn có thể thêm -l
gắn cờ để nó chỉ cố gắng đăng nhập một lần; nếu không, nếu đăng nhập không thành công vì lý do nào đó, nó sẽ cố gắng sử dụng phần còn lại của heredoc làm thông tin đăng nhập khác và có vẻ như bị treo với các tập lệnh ngắn.