一定义:
语法:
declare
--声明部分
begin
--代码块
exception
异常处理
end;
变量和常量:
变量和常量都是用来保存数据的
语法:
变量名 数据类型:=初始值;
变量可以在程序中修改它存储的值
常量:不可修改,在声明是必须包含常量名
语法:
常量名 constant 数据类型:=常量值;
标识符命令规范:
(1)对象名以字母开头,可以有数字,——,#等特殊字符
(2)长度不能超过30个英文字符
(3)不能以数字开头
(4)避免使用oracle关键字
sql dbms_output.put(字符串),--在控制台输出一个字符串内容 ,输出晚不换行,但是不换行不输出 dbms_output.put_line(z字符串)在控制台输出一个字符串内容,输出之后换行
declare
--声名一个变量,并给变量一个初始值 'PLSQL'
v varchar2(30):='PLSQL';
--声名一个常量
p constant number(7,6):=3.141591;
begin
/*
--能过dbms_output.put_line,输出变量v的值
dbms_output.put_line(v);
--修改变量的值
v:='oracle';
dbms_output.put_line(v);
dbms_output.put_line(p);
--p:=3; 常量值不可修改
*/
--输出不换行
dbms_output.put(v);--输出变量v的值
dbms_output.put('smith');
dbms_output.put(' ni hao');
--dbms_output.put_line(''); --使用dbms_output.put_line()打印空字符串,让其换行
dbms_output.new_line(); --换行
end;
&:输入符号
注意:
数字类型:&变量名
字符串类型:‘&变量名’
select * from emp where deptno=&部门编号;
二 plsql中的数据类型
1.基础类型
1数字类型:
number(长度,精度):最大长度38,最小默认1
integger:整数类型
pls_integer:整数类型
binary_interger:整数类型
filoat:浮点型(小数类型)
2.字符串类型
varchar2(长度):变长字符串类型,最大长度4000个字符(英文)
char(长度):定长字符串类型
long:可以存放2G的内容(oralce不建议使用的类型)
CLOB:存放大文本内容(txt,word),可能会在代码块中出现
blob:二进制方式存储大文件(音频,视频文件)
3.日期类型
date:日期类型
timestamp:时间类型
4.布尔类型
boolean:只有三个值,true,false null;2
2.复杂类型
5.记录类型:
record:可以存放多个值;
记录类型:可以存放多个值,但都属于一条数据
定义类型语法
type 类型名称 is record(
·属性名 数据类型;
.........
);
变量声名
变量名 类型名;
记录类型的使用;
变量名.属性名;—取一个记录类型的属性值
变量名.属性名:=值;
declare
--定义一个记录类型
type amtype is record(
name varchar2(30),
job varchar2(50),
sal number(5)
);
--声名一个记录类型变量
v amtype;
begin
v.name:='张三';
v.job:='CLERK';
v.sal:=1234;
--记录类型变量不能直接打印
dbms_output.put_line(v.name||','||v.job||','||v.sal);
end;
6.%type类型
%type:取其他对象的类型,作为变量类型(取表中的一列数据类型,作为变量类型)
对象名%type(类型)
注意:
只能取单一类型
emp.job%type–取emp表中job列的数据类型,作为一个新的类型varchar(9)
7.%rowtype类型
%rowtype类型:它是记录类型和%type的类型的结合;取一个对象的类型作为变量的类型
表名%rowtype;
emp%rowtype
三select into语句:
1.语法
select 列名,列名,…into 变量,变量,…from 表名 where 。。group by。。。order by。。
注意:select into语句每次只能查询一条数据,不能多不能少
declare
--声名一个变量保存,员工的姓名
v_ename varchar2(20);
begin
select ename into v_ename from emp where empno=7369; --将7369的员工编号查询到变量v_ename中
--打印员工姓名
dbms_output.put_line(v_ename);
end;
代码块部分:sql语句,流程控制语句
sql语句的扫行:
1.select into语句(selec)
2.insert,update,delete语句(可以直接在代码块中扫行)
begin
insert into dept values(50,'dept1','loc');
end;
3.使用execute immediate 执行
语法:
execute immediate sql语句(字符串类型)[into 变量] [using 值];
into 字句和select into 中的一样:用于将select查询结果保存到变量中
using子句:用于给sql语句传递参数
ddl语句不能直接在plsql代码块中运行,但是可以放在execute immediate 中运行
declare
--声名一个变量保存员工的姓名
v_ename varchar2(20);
begin
execute immediate 'select ename from emp where empno=7369' into v_ename;
--打印查询结果,打印变量的值
dbms_output.put_line(v_ename);
end;
execute immediate 语句中sql点位符
:n 表示点位符,n一般情况下是一个正整数,也可以是其他字符串,如果sql语句中包含点位符,那么必须使用using字句给点位符传值;
begin
execute immediate 'delete from emp where empno=:1' using 7369;--delete from emp where empno=7369
end;
oracle字符串中包含字符串的情况:
1)使用两个单引号表示一个单引号
2)使用chr()函数来获取一个单引号chr(39)
execute immediate 和直接执行的sql语句的
1)ddl语句不能直接在plsql代码块中运行,但是可以放在execute immediate中运行
2)当sql语句操作的表,是使用execute immediate动态创建的,那么只能在execute immediate中运行
3)当将表名放入变量中时,这是必须使用execute immediate 语句来运行
begin
--创建一张ttt3的表
execute immediate 'create table ttt3(id number(11),name varchar2(30))';
--给表里添加数据
insert into ttt3 values(1,'plsql'); ---不允许运行,但是可以在execute immediate中运行
end;