我在.sql脚本中有以下行。不知道它做了什么。它是否等待用户输入dbuserid和密码或是否从环境中获取值?
&&
表示什么?在test.sql文件中,我在创建表之前使用下面的行:
CONNECT &&usr/&&pass@&&dbname
答案 0 :(得分:1)
在这个sql脚本中,您将usr,pass和dbname声明为替换变量。来自OTN:
单个&符号(&)和双&符号(&&)都可以在语句中作为替换变量名称的前缀。 SQL Plus预处理语句并替换变量的值。然后执行该语句。如果先前未定义变量,则SQL Plus会在进行替换之前提示您输入值。
如果单个&符号前缀与未定义变量一起使用,则不会存储在提示符处输入的值。在语句中替换值后,立即丢弃该值,并且变量保持未定义。如果变量被引用两次,即使在同一个命令中,也会提示您两次。每次提示都可以输入不同的值。
如果双&符号引用导致SQL Plus提示您输入值,则SQL Plus将该变量定义为该值。使用“&”对变量的任何后续引用(即使在同一命令中)或“&&”替换新定义的值。 SQL * Plus不会再次提示您。
答案 1 :(得分:0)
'&'用于引用SQL Plus中的替换变量。可以使用DEFINE
关键字设置这些变量。或者,如果未使用此关键字指定,SQL Plus将提示您输入变量的值,并在每次看到&variable
双人'&'告诉SQL Plus重用第一个定义的变量值。例如,如果系统根据您的连接代码段提示您输入usr
的值,则&&usr
的所有后续匹配项都将替换为此值。在这种情况下,SQL Plus将仅提示您输入usr
的值。
修改强>
是的,您可以从shell脚本传入参数。例如:
$ cat a.sh
#!/bin/bash
# Ideally, you would retrieve the password from a secure
# location like a password safe/vault etc. Never hardcode
# the connection credentials
USER=scott
PASS=tiger
INST=orcl
sqlplus -s /nolog << EOF >> some_log_file.log
connect ${USER}/${PASS}@${INST}
set serveroutput on
select user from dual;
EOF
$ ./a.sh
$ cat some_log_file.log
USER
------------------------------
SCOTT
$