当前位置: 代码迷 >> Oracle管理 >> sqlplus 怎么直接从命令行传递一个参数给 ACCEPT 指令
  详细解决方案

sqlplus 怎么直接从命令行传递一个参数给 ACCEPT 指令

热度:5114   发布时间:2013-02-26 00:00:00.0
sqlplus 如何直接从命令行传递一个参数给 ACCEPT 指令
1. 现在PL/SQL 脚本中有个参数,是通过 ACCEPT 指令交互式得到的,我希望能直接从命令行调用这个 SQL 文件并且把这个参数也从命令行指定它。

如何做到这点?

另外.
2. sqlplus 脚本中,能像 C 语言 system("dir") 那样调用一个操作系统的程序吗?

------解决方案--------------------------------------------------------
shell下是可以的,cmd下没有研究过,估计也行

sqlplus不能调用程序,但是能调用SQL脚本,也能用host命令切换到操作系统环境下执行程序

------解决方案--------------------------------------------------------
1. 可以将ACCEPT 替换为'@1', '@2'...:
19:52:21 C:\temp>cat test.pls
DECLARE
  v_log_path     VARCHAR2(50);
  v_log_filename VARCHAR2(20);
BEGIN
  v_log_path     := '&1';
  v_log_filename := '&2';
  dbms_output.put_line(v_log_path 
------解决方案--------------------------------------------------------
 '/' 
------解决方案--------------------------------------------------------
 v_log_filename);
END;
/

19:52:30 C:\temp>sqlplus  xxx/xx@xx

SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 17 19:52:38 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

SQL> start test.pls 'c:\temp' 'test.log'
old   5:   v_log_path     := '&1';
new   5:   v_log_path     := 'c:\temp';
old   6:   v_log_filename := '&2';
new   6:   v_log_filename := 'test.log';

PL/SQL procedure successfully completed.


2. 可以使用$<command>来执行windows命令,比如
SQL> $hostname
machinename

如果此程序是JAVA,可以定一个存储过程调用JAVA,然后sqlplus里面调用此存储过程。
------解决方案--------------------------------------------------------
引用:
1. 现在PL/SQL 脚本中有个参数,是通过 ACCEPT 指令交互式得到的,我希望能直接从命令行调用这个 SQL 文件并且把这个参数也从命令行指定它。

如何做到这点?

另外.
2. sqlplus 脚本中,能像 C 语言 system("dir") 那样调用一个操作系统的程序吗?
              
              
       ……

问题1:举例select * from dual where 1=&a;   &a为参数,即参数前加一个&符号
问题2:可通过java编写存储过程实现调用...
  相关解决方案