2013-09-04 29 views
21

Làm cách nào để chuyển đối số cho tập lệnh PL/SQL trên dòng lệnh bằng SQLPLUS? Tôi có thể gọi kịch bản PL/SQL của tôi như vậy, nhưng kịch bản lệnh yêu cầu các đối số để nó thành công. Làm thế nào tôi có thể chạy sqlplus.exe để tôi có thể vượt qua đối số cho kịch bản?Làm cách nào để chuyển đối số cho tập lệnh PL/SQL trên dòng lệnh bằng SQLPLUS?

@ECHO off 
// where HOST030 is a tnsnames alias to a machine, port, and instance  
sqlplus.exe MYUSER/[email protected] < refreshDataOnOracle.sql  
pause 

Tôi đã cố tìm kiếm câu trả lời nhưng không thể tìm thấy "ví dụ đối số" ở bất kỳ đâu cho SQLPLUS. Tôi nghi ngờ nó sẽ là một phương pháp tương tự của việc sử dụng lệnh SQL * Plus "START"?

Trả lời

32

Thứ nhất, bạn sẽ cần phải gọi kịch bản của bạn như sau:

sqlplus.exe MYUSER/[email protected] @refreshDataOnOracle.sql foo bar 

Thay vì chuyển hướng hệ điều hành bạn sẽ sử dụng các biểu tượng "@" để chỉ ra tên file để thực thi. Bạn cũng sẽ cung cấp các tham số tập lệnh trên dòng lệnh. Trong kịch bản, bạn sẽ tham khảo các thông số sử dụng &1, &2, vv

update mytable set mycol = '&2' where myid = '&1'; 

mà sẽ chuyển thành

update mytable set mycol = 'bar' where myid = 'foo'; 
+0

Cảm ơn. Điều đó là vậy đó. Có vẻ như ký tự '@' là bí danh cho "START". – djangofan

+1

Làm cách nào để bạn chuyển hướng đầu ra sang tệp nhật ký? – ChadD

+2

@ChadD xem 'sqlplus' [' spool'] (http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve043.htm#i2683777) -command. – user272735

1

Nếu bạn muốn đăng nhập chạy của sqlplus, bạn có thể sử dụng cú pháp sau:

sqlplus.exe MYUSER/[email protected] @refreshDataOnOracle.sql foo bar >> log.log 
Các vấn đề liên quan