PL/SQL 知识 (个人笔记)(一)
1.基本架构
declare
--声明部分,比如变量定义,常量定义及赋值;
begin
--需要执行的代码,比如输出数据,数据的增删改查, DML, DDL都可以
end;
2.变量和常量
变量:
内容可变,在程序运行过程中,可以随时赋值,即变量的内容是可以改变的,所以叫变量;变量一般以v_开头: v_empname varchar2(50);
常量:
一旦定义赋值之后,值不能再改变;常量一般以c_开头,定义时需要加constant关键字: c_empno constant number(4);
3.打印信息
dbms_output.put_line();
括号中可以是列名,即把这一列数据的第一行打印;
括号中还可以是具体的数据,比如字符串(需要单引号),比如数字,比如时间等等.
**
4.赋值
**
语法:
变量名 :=值;
常量名 :=值;
范例:
v_empname varchar2(50) :='ABC';
c_empno constant number(4) :=1234;
5.注释:
1.单行注释
代码前加–,此时代码会变红色,表名此行代码被注释掉,不会执行
2.多行注释
第一行代码前加/最后一行代码后加/,中间就是被注释掉的部分,程序运行是不会执行;
declare
v_v1 number(5) :=10;
c_c1 constant varchar2(20) :='ABC';
begin
dbms_output.put_line('v_v1: '||v_v1);
dbms_output.put_line('c_c1: '||c_c1);
dbms_output.put_line('今天是2月12日');
dbms_output.put_line(trunc(sysdate));
v_v1:=20;
dbms_output.put_line('v_v1:'||v_v1);
c_c1 :='TEST';
dbms_output.put_line('c_c1:'||c_c1);
end;
6.使用表中的类型:
(1).%type:沿用表中某一列的类型和长度:v_empno emp.empno%type;
(2).%rowtype:沿用一张表的数据类型,即变量跟表一样,表中有多少列,变量中就有多少列:v_emp emp%rowtype;
(3).代码块中查询时,需要定义一个变量承接查询出的数据,然后打印变量,方可将查询结果打印出来. 输出时,每次只能输出一行,所以查询时要加限制;
create table test_0212
(
name1 varchar2(50),
age1 number(3)
);
insert into test_0212 values('A',1);
insert into test_0212 values('B',2);
insert into test_0212 values('C',3);
insert into test_0212 values('D',4);
insert into test_0212 values('E',5);
commit;
select * from test_0212;
declare
–声明部分,定义变量
v_empno emp.empno%type;
v_emp emp%rowtype;
begin
--代码执行部分
/*insert into test_0212 values('F',6);
commit;*/
/*delete from test_0212 where name1='A';
commit;*/
/*
update test_0212 set age1=10 where name1='B';
commit;*/
select empno into v_empno from emp where rownum<2;
dbms_output.put_line(v_empno);
select * into v_emp from emp where rownum<2;
dbms_output.put_line('empno:'||v_emp.empno||' ename:'||v_emp.ename||' sal:'||v_emp.sal);
end;
7.自定义类型:
语法:
type 类型名 is record
(
列名1 类型(长度),
列名2 类型(长度),
列名3 类型(长度)
);
范例:
declare
type t_type is record
(
name1 varchar2(50),
job1 varchar2(50)
);
v_d t_type;
begin
select ename, job into v_d from emp where rownum<2;
dbms_output.put_line('ename:'||v_d.name1||','||'job:'||v_d.job1);
end;
注意:
(1):类型定义时,类型名以t_开头;
(2):定义变量语法: 变量名 类型名;–此处意为 变量拥有类型相同的列和属性
(3):变量打印时,列明须保持跟类型内的列名一致: 变量名.列名
8.键盘输入信息:
键盘输入:
&提示信息: &表示将要从键盘输入,提示信息为表明输入的信息内容;
方法1:
用一个变量承接键盘输入:
declare
v_name emp.ename%type;
v_empno number(20) := &编号;
begin
select ename into v_name from emp where empno=v_empno;
dbms_output.put_line(v_name);
end;
方法2:
直接用列名承接键盘输入:
declare
v_name emp.ename%type;
begin
select ename
into v_name
from emp
where empno = &empno;
dbms_output.put_line(v_name);
end;