一、声明PL/SQL一般变量
语法:
identifier datatype [not null]
[:= | default expr];
例:
declare
v_hiredate date;
v_deptno number(2) not null:=0;
v_location varchar2(13):='Atlanta';
二、一般变量
1.PL/SQL块中可以使用变量
(1)在声明部分声明,使用前必须先声明
(2)声明时必须指定数据类型
(3)在可执行部分的SQL语句和过程语句中使用
给变量赋值有两种方法:
(1)使用赋值语句 :=
(2)使用select into语句
spool d:\sql.txt
declare
emp_code number(4);
emp_salary number(7,2);
begin
emp_code:=7499;
select sal+comm into emp_salary from emp
where empno=emp_code;
dbms_output.put_line(emp_salary);
end;
set line 200
set serveroutput on
run
2.一般变量作用域
<<lab1>>
declare
v_num number(3,4);
begin
declare
v_num char(10);
begin
lab1.v_num:=12345;
end;
end;
declare
v_num number(5,2):=1.23;
begin
declare v_num char(10);
begin
v_num:=12345;
dbms_output.put_line(v_num);
end;
dbms_output.put_line(v_num);
end;
打印结果为:
12345
1.23
三、替代变量
(1)使用SQL*Plus替代变量来暂时保存值
单个(&)符号
两个(&&)符号
DEFINE和ACCEPT命令
(2)在SQL命令中传递变量值
(3)动态更改表头和表尾
1.使用带有一个&号的变量值来提示用户输入一个值
select empno,ename,sal,deptno
from emp
where empno=&employee_num;
使用set verify命令:使SQL*Plus显示用某个具体值替换变量名之前和之后的命令的文本
(查看当前verify的状态 show verify,默认是on;如果是off的话,则不会显示替换变量名之前的文本)
如果查询条件是字符串,需要在变量外层加上单引号
如果变量外层不加单引号,则需要在输入值的时候加上单引号,不然会报错
运行时指定列名、表达式、文本
使用替换变量对下列内容做出补充:
where条件,order by自居,列表达式,表名,整个select语句
2.带有两个&的替换变量:使用带有两个&的变量可以使得该变量可以重复使用,而不必在每次使用时提醒用户输入。
使用&&后,只要输入一次就行了
3.定义用户变量
可以使用下面的两个SQL*Plus命令来预定义用户变量
DEFINE:创建CHAR类型的用户变量
ACCEPT:读取用户输入并把它存在一个变量里面
说明:
(1)当使用DEFINE命令来定义一个包含空格的变量时,要用单引号将该变量括起来
(2)ACCEPT命令
当接收用户输入时,创建可定制的用户提示
明确地定义NUMBER或DATE类型的变量
处于安全方面的考虑,隐藏用户的输入
在D盘根目下,创建一个文件mysql.txt
文本内容为:
accept dept_num prompt '请输入部门号:'
select * from emp
where deptno=&dept_num;
在sqlplus中运行txt文件的语句:
键入下面的命令
如果mysql.txt中的内容为:
accept dept_num prompt '请输入部门号:' hide
select * from emp
where deptno=&dept_num;
则cmd交互过程中不会显示出用户输入的内容
如果mysql.txt中的内容为:
accept var prompt '请输入密码:' hide
select ename,sal from emp
where 'admin'='&var'
order by sal desc;
则用户需要正确输入密码后,才能查看每个员工的工资信息
define命令的使用示例: