Với những gì bạn đã hiển thị, bạn cần phải thoát khỏi dấu ngoặc đơn:
echo execute some_procedure\(123,234\) | sqlplus username/[email protected]
Hoặc đặt lệnh của bạn trong dấu ngoặc kép:
echo "execute some_procedure(123,234)" | sqlplus username/[email protected]
Một trong hai cách sẽ ngăn trình bao cố gắng thâm nhập vào chính các thông số, điều này sẽ cung cấp cho bạn một 'syntax error: '(' unexpected
hoặc lỗi tương tự. Nó thực sự không liên quan gì đến Oracle, nó chỉ là cách trình thông dịch shell hoạt động, trước khi nó đi xa đến mức chuyển chuỗi được lặp lại sang SQL * Plus.
Ngẫu nhiên, tôi thường sử dụng heredoc cho loại việc này và tránh đặt thông tin đăng nhập trên dòng lệnh để chúng không hiển thị qua ps
; ví dụ:
sqlplus -s /nolog <<!EOF
connect username/[email protected]
execute some_procedure(123,234)
exit
!EOF