(一)、赋值语句语法
PL/SQL中的赋值使用 :=
“=”被用作比较操作符
赋值语句中有一些规则需要遵守:
字符类型必须使用单引号
不可以使用group by
可以使用数学操作符或字符串连接操作符
(二)、PL/SQL脚本语言的变量声明
(a)、变量必须在declare语句块中声明
变量声明的语法规则
Identifier [constant] datatype [not null] [:= | default expr];
在变量声明时需要遵守一些基本的规则或者规范:
变量名不能够使用保留字,如from 、 select等
第一个字符必须是字母(v_)
变量名最多包含30个字符
不要与数据库的表或者列同名
每一行只能声明一个变量
(b)、变量类型
number:数字类型
char:定长字符串
varchar2:变长字符串
date:日期
boolean:布尔类型,可以取值为true、false和null值
注:如果声明变量的类型想和某一表字段或另一变量一样,且可以动态的跟踪字段类型 的变化,就使用字段或变量的%type属性
(c)、注意事项
在PL/SQL中,select语句有且只能返回一条记录,否则程序就会出错
select语句中加into子句,将查询到得数据放入变量中
PL/SQL中的DML语句
直接使用
DML语句起作用或者回退的话,需要显式的调用commit或者rollback
sql%rowcount属性来记录最后一条SQL语句影响了多少条记录
使用execute immediate 语句
必须将DDL语句用单引号引起来
(三)、匿名块:
PL/SQL的匿名块由四个部分组成
declare – 可选 声明各种变量或游标的地方。
begin – 必要 开始执行语句。
--单行注释语句用两个连在一起的‘-’表示。
/*多行注释语句,
可以换行*/
exception – 可选 出错后的处理。
end; – 必要(请注意end后面的分号)结束。
(三)、table record 符合类型
(a)、table 类似数组
able变量的声明包含两部分,第一部分声明一个包含着具体类型的table类型,然后再用这个具体的类型去声明一个变量
type type_name is table of data_type index by binary_integer;
identifier type_name;
(b)、record 类似结构体
record变量的声明语法规则
type type_name is record
(field_name1 data_type [not null {:= | default } expr],
field_name2 data_type [not null {:= | default } expr],
…);
identifier type_name;
如果声明变量的类型想和某一表结构一样,且可以动态的跟踪表
结构的变化,就使用%rowtype属性
被%rowtype 给替换了
(c)、示例
declare
--record table 变量复合类型
type emp_record is record(
ename emp.ename%type,
job emp.job%type,
sal emp.sal%type
);
emp_info emp_record;
type str_tab is table of varchar2(10) index by binary_integer;
v_str str_tab;
begin
select e.ename, e.job, e.sal into emp_info.ename, emp_info.job, emp_info.sal from emp e where e.empno=7369;
dbms_output.put_line(emp_info.ename);
v_str(0) := 'afdfa';
v_str(1) := 'afewea';
v_str(3) := 'fej';
dbms_output.put_line(v_str(3)||' '||v_str(0));
end ;
(四)、if else 选择语句
declare
v_num1 number(8,4);
v_num2 number(8,4);
v_num3 number(8,4);
v_sum number(8);
begin
v_num1 := floor(dbms_random.value * 6) + 1;
v_num2 := floor(dbms_random.value * 6) + 1;
v_num3 := floor(dbms_random.value * 6) + 1;
v_sum := v_num1 + v_num2 + v_num3;
if v_sum > 12 then -- if then 之间可以写条件 可以出现 and or ()
dbms_output.put_line('手气不错');
elsif v_sum > 8 then
dbms_output.put_line('手气一般');
else
dbms_output.put_line('手气不好');
end if;
end;