关于sql脚本

时间:2010-07-19 04:02:27

标签: sql oracle plsql

我在.sql脚本中有以下行。不知道它做了什么。它是否等待用户输入dbuserid和密码或是否从环境中获取值? &&表示什么?在test.sql文件中,我在创建表之前使用下面的行:

CONNECT &&usr/&&pass@&&dbname

2 个答案:

答案 0 :(得分:1)

在这个sql脚本中,您将usr,pass和dbname声明为替换变量。来自OTN

  

单个&符号(&)和双&符号(&&)都可以在语句中作为替换变量名称的前缀。 SQL Plus预处理语句并替换变量的值。然后执行该语句。如果先前未定义变量,则SQL Plus会在进行替换之前提示您输入值。

     

如果单个&符号前缀与未定义变量一起使用,则不会存储在提示符处输入的值。在语句中替换值后,立即丢弃该值,并且变量保持未定义。如果变量被引用两次,即使在同一个命令中,也会提示您两次。每次提示都可以输入不同的值。

     

如果双&符号引用导致SQL Plus提示您输入值,则SQL Plus将该变量定义为该值。使用“&”对变量的任何后续引用(即使在同一命令中)或“&&”替换新定义的值。 SQL * Plus不会再次提示您。

这是more about SQL*Plus Substitution Variables

答案 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

$