加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

和符号(&)

(2010-12-02 10:48:51)
标签:

sql

和符号

&

it

分类: SQL语言
 

可以使用和符号(&)来替换SQL语句中的元素,包括所有文本、子句、子子句。即通过和符号来指定变量

  1. SQL语句中最基本、最普遍的元素替换形式是单个和符号(&)替换。和字符是用来在语句中指定替换变量的符号,它在变量名之前,并且它们之间没有空格。
  2. Oracle使用以下两种方式来确定变量的值:
    • 检查用户会话中是否使用DEFINE定义了该变量。
    • 如果没有定义变量,在SQL进程运行时,由用户指定(即输入一个变量值)
  1. 如果变量要替换字符或者日期值,需要将字面值包含在单引号内。
  1. 示例1

SQL> select employee_id,last_name,salary from employees

  2  where last_name='&LASTNAME';

Enter value for lastname: King

old   2: where last_name='&LASTNAME'

new   2: where last_name='King'

 

EMPLOYEE_ID LAST_NAME                     SALARY

----------- ------------------------- ----------

        156 King                           10000

        100 King                           24000

注:如不在&LASTNAME外添加'',则需要在输入King时添加'',否则会报错(ORA-00904:invalid identifier)

 

示例2

SQL> define LASTNAME=King;

SQL> select employee_id,last_name,salary from employees

  2  where last_name='&LASTNAME';

old   2: where last_name='&LASTNAME'

new   2: where last_name='King'

 

EMPLOYEE_ID LAST_NAME                     SALARY

----------- ------------------------- ----------

        156 King                           10000

        100 King                           24000

 

  1. 可以使用和符号(&)替换列名,和字符、日期字符字面值不同,当指定或者通过&替换变量指定时,列名引用都不需要单引号。
  1. 和符号(&)可以替换SQL语句的任何元素,但至少第一个单词是静态的,如:SELECT $rest_of_statement
  1. oracle不会检验相同替换变量输入的字面值。
    select first_name, last_name
    from employees
    where last_name like '%&SEARCH%' AND first_name like '%&SEARCH%';
     

Oracle不会验证两次输入的SEARCH值是否相同。这时可使用双和符号(&&)

 

  1. 使用双和符号(&&)定义的变量,oracle服务器会将其作为会话变量,在后续引用中不再提示替换该变量值。在会话期间或在显式解除定义前,此变量一直有效。
  2. 使用UNDEFINE可以显式解除&&定义的会话变量值。
  1. DEFINE命令有两个作用:
    • 可以用来检索SQL会话中当前定义的所有变量列表:DEFINE
    • 可以定义会话期间一个或者多个变量的值(只在当前会话有效):DEFINE variable=value
  1. 使用SET DEFINE ON/OFF可以打开或关闭和字符(&)的替换功能。当输入的字面值中包括和符号(&)时,可在之前使用set define off来关闭字符(&)的替换功能。
  2. VERIFY命令专用于SQL*PLUS,可以控制提交的替换变量是否显示到屏幕上,以便验证替换是否正确。即示例中的:

old   2: where last_name='&LASTNAME'

new   2: where last_name='King'

可以使用SET VERIFY ON/OFF来打开或关闭此功能。

  1. SET, DEFINE, UNDIFINE不是SQL语言。

0

阅读 收藏 喜欢 打印举报/Report
前一篇:SELECT性能
后一篇:字符串联符号
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有