oracle替代变量

   替换变量是指在进行数据查询或更新时,由用户自己输入数据,在ORACLE中用&标记,比如

  select ename,job,sal,hiredate from emp where sal>&inputjob在通过SQL Developer执行时会出现输入提示框,这样我们就可以通过自己输入需要查询的sal>的值进行查询

  上面的输入数据时整,那么如果是字符串怎么办呢?比如ename=&inputename我们要输入'数据'才可以,也就是字符串要用''包括,这样很明显不符合我们要求。

  那么我们可以利用ename=UPPER('&inputename')这样我们就不用担心''的问题了,也不用担心大小写问题,因为在ORACLE中,字段是大写的。

  对于SQL Developer的显示效果是弹出输入框,而SQLPlus的效果则是直接在dos窗口中提示输入,两者显示效果不一样,但是实现功能一样。

  也可以使用替代变量替代搜索关键字ename LIKE '%&inputkeyword%'或日期hiredate < TO_DATE('&inputhiredate','yyyy-mm-dd'),这些都只是一个替代变量,

  我们也可以同时使用多个替代变量,比如job=UPPER('&inputjob') AND sal > &inputsal,这时会依此提示两个输入让用户输入。

  而且替代变量不单单只在WHERE中可以使用,在SELECT,FROM,ORDER BY,GROUP BY等字句中也可以使用。

  值得注意的是在GROUP BY中使用的时候因为SELECT中可能出现和分组字段相同的输入内容:比如

  select &inputGroupByColumn,SUM(sal),AVG(sal) from emp e GROUP BY &inputGroupByColumn

  这时很明显要求用户输入两次相同的数据,这样就显得比较麻烦,同一个值为什么要输入两次呢?这时我们可以将第一个用&&inputGroupByColumn代替。

  这样就相当于定义了一个inputGroupByColumn变量,只要第一次输入,第二次系统将自动读出这个值。但是如果想让这个定义的变量消失,我们要使用

  UNDEFINE inputGroupByColumn或者直接关闭SQLPlus窗口

  除了可以用&&定义替代变量外,也可以用DEFINE 变量名=值创建,比如DEFINE inputdname='ACCOUNTING'这样就定义了一个inputdname的变量,值为后面字符串

  查询已经定义的替代变量可以使用DEFINE inputdname

  一旦定义好了替代变量我们在sql语句中就可以使用了,不用用户再输入数据select * from dept where dname='&inputdname'

  撤销定义了的替换变量就是UNDEFINE inputdname

  上面所有的替换变量都是使用系统的格式,而且发现替代变量的提示信息不是非常清晰,我们可以通过ACCEPT修改我们的提示信息

  语法:ACCEPT 替代变量名称[数据类型] [FORMAT 格式] [PROMPT '提示信息'][HIDE]

  ACCEPT的使用:建立脚本文件.sql文件,将命令写入文件,在SQLPlus中使用@+文件路径执行命令

  上面替代变量名称前面不需要再加&,数据类型可以是NUMBER、VARCHAR、DATE型数据,FORMAT指定格式模型(如A10或9.99等)

  PROMPT是指提示信息,HIDE指输入密码时不显示

  如:ACCEPT inputDate DATE FORMAT 'YYYY-MM-DD' PROMPT '雇员日期:' HIDE,然后就可以执行自己定义的inputDate

  select empno,ename,job,hiredate FROM emp e WHERE hiredate=TO_DATE('inputDate','YYYY-MM-DD')

时间: 2024-12-11 13:54:17

oracle替代变量的相关文章

替代变量与SQL*Plus环境设置

--============================ -- 替代变量与SQL*Plus环境设置 --============================     1.SQL与PL/SQL代码终止符     SQL代码以";"来表示代码的终止     PL/SQL代码以"."来表示代码的终止,以"/"表示代码的执行         scott@ORCL> select * from emp where empno=7788;  

C# 使用oracle绑定变量后,查询效率变慢如何解决?满意可加分

问题描述 如题.本人写了一个C#使用oracle绑定变量的DAL,在应用里使用此连接.查询速度没有提升,反而变慢,是怎么回事?如何解决?急需解决,满意可加分. 解决方案 解决方案二:怎么绑的,代码呢解决方案三:代码如下:publicSystem.Data.DataSetQuery(stringSQLString,List<DBParameter>dbParam){using(OracleConnectionconnection=newOracleConnection(connectionStr

Oracle 系统变量函数介绍_oracle

Oracle函数多种多样,系统变量函数就是其中之一,下面就为您介绍三种最常见的系统变量函数,希望对您学习Oracle能有所帮助. Oracle系统变量函数: (1)SYSDATE 该函数返回当前的日期和时间.返回的是Oracle服务器的当前日期和时间. select sysdate from dual; insert into purchase values ('Small Widget','SH',sysdate, 10); insert into purchase values ('Medu

Oracle 系统变量函数用法指南_oracle

Oracle函数多种多样,系统变量函数就是其中之一,介绍三种最常见的系统变量函数. Oracle系统变量函数: 1)SYSDATE 该函数返回当前的日期和时间.返回的是Oracle服务器的当前日期和时间. select sysdate from dual; insert into purchase values ('Small Widget','SH',sysdate, 10); insert into purchase values ('Meduem Wodget','SH',sysdate-

Oracle环境变量、监听listener.ora、tnsnames.ora、sqlnet.ora配置

Oracle环境变量.监听listener.ora.tnsnames.ora.sqlnet.ora配置 点击(此处)折叠或打开 NLS_DATE_FORMAT=YYYY-MM-DD HH24:mi:ss NLS_LANG=AMERICAN_CHINA.ZHS16GBK ORACLE10G=D:\Program files\app\oracle\product\10.2.0\db_1 ORACLE11G=D:\Program files\app\oracle\product\11.2.0.1\db

Oracle绑定变量分级(Bind Graduation)

Oracle绑定变量分级(Bind Graduation) 绑定变量分级(Bind Graduation)是指Oracle在PL/SQL代码中会根据文本型绑定变量的定义长度而将这些文本型绑定变量分为四个等级,如下所示: l 定义长度小于等于32字节(Byte)的文本型绑定变量被分在第一个等级,Oracle为其分配32字节的内存空间. l 定义长度在[33,128]字节之间的被分在第二个等级,Oracle为其分配128字节的内存空间. l 定义长度在[129,2000]字节之间的文本型绑定变量被分

Oracle的变量绑定与变量窥视

数据库环境 LEO1@LEO1> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production CORE

Oracle绑定变量与直方图

一.绑定变量的窥探(peek) 1.Oracle在处理带有绑定变量的SQL时候,只会在硬解析的时候才会"窥探"一下SQL中绑定变量的值,然后会根据窥探到的值来决定整个SQL的执行计划.参数:_optim_peek_user_binds  2.绑定变量窥探的案例 create table t8(id int ,name varchar2(100)); begin for i in 1 .. 1000 loop  insert into t8 values(i,'gyj'||i);  en

Oracle: 变量绑定

Parent-Child cursor (父子游标) 父游标:只要SQL语句文本相同,它们就对应 同一个parent cursor. 子游标:在某些情况下,虽然SQL语句的文本相同,但是因为其它 因素不同(这些因素可以在视图V$SQL_SHARED_CURSOR中查看),导致产生不同的child cursor.(重新生成child cursor,也就意味着一次硬解析) cursor_sharing 对 于是否使用绑定变量这个问题,最好是交给应用程序决定,在数据库层面是很难正确判断. (这也是为什