一: pl/sql基本结构
declare
--声明区
v_first_name varchar2(35);
v_last_name varchar2(35);
c_count constant number:=0;
begin
--语句执行区
select first_name,last_name into v_first_name,v_last_name from
student.student
where student_id=1223;
dbms_output.put_line('student name:' || v_first_name || '' || v_last_name);
exception
--异常处理区
when no_data_found then
dbms_output.put_line('therer is no data found');
end;
1.声明: 从declare后到begin关键字前都是声明区,允许声明:变量、常量、游标
普通定义:变量名 数据类型 {:=默认值}
数据类型可以是系统支持数据类型,如varchar2,char,number,也可以是Anchored数据类型,即与对象列的数据类型绑定,
当列类型改变时,变量的数据类型也跟着改变了
SQL> declare
2 v_name student.student.first_name%TYPE;
3 begin
4 select first_name into v_name from student.student where student_id=123;
5 dbms_output.put_line(v_name);
6 end
7 ;
8 /
Pierre
2.执行PLSQL语句块时,会将语句块发给服务器的PL/SQL引擎,在此进行编译,编译包括以下步骤:
新语句:检查编译错误 -> 为变量分配存储地址 -> 生成伪码 -> 执行
已经执行过: 原语句的伪码 ->执行
3.特殊符号
在SQLPLUS中执行语句块,点号(.)表示语句块的结尾,斜线(/)表示执行该语句块
SQL> set serveroutput on --开启dbms_output结果输出
SQL> begin
2 dbms_output.put_line('hello world');
3 end;
4 /
hello world
PL/SQL procedure successfully completed.
4.SQLPLUS中调用plsql并用替代变量给plsql变量赋值
SQL> set define on
SQL> declare
2 v_stuid number := &stuid;
3 v_name varchar2(35);
4 begin
5 select first_name into v_name from student.student where student_id=v_stuid;
6 dbms_output.put_line(v_name);
7 end
8 ;
9 /
Enter value for stuid: 123
old 2: v_stuid number := &stuid;
new 2: v_stuid number := 123;
输出结果:Pierre
PL/SQL procedure successfully completed.
4.常见数据类型
varchar2(maximum length)
.存储变长的字符数据
.varchar2是oracle提供的独特的数据类型,oracle保证在任何版本中该数据类型向上和向下兼容,
但不保证varchar,这是因为varchar是标准sql提供的数据类型,有可能随着sql标准的变化而改变
.表列中的varchar2最大只支持4000个bytes,pl/sql中定义的vrachar2变量最大32767个bytes
一个字母(不区分大小写) = 1 bytes
一个汉字 = 2 bytes
char(maximum length)
.存储定长的字符数据(不足补空格)
SQL> declare
2 v_test char(15) := '11';
3 begin
4 dbms_output.put_line(length(v_test));
5 end
6 ;
7 /
15 --值只有2位,其余的补了空格,所以总长度总是定义时的位数
.表列最大支持2000个bytes,pl/sql中char变量则与varchar2一样最大32767个bytes
5.其他
set serveroutput on --开启dbms_output结果输出
set define on --开启替代变量
dbms_output.put('输出不换行');
dbms_output.put_line('输出换行');