打开系统输出 set serveroutput on; 只需要打开一次
**书写格式 以斜杠/号 结束(基本结构)
--declare --语句后面必须以;号结束
declare
--用来区分变量名和表里的名 接受查询的结果
--声明变量,游标,类型
v_name varchar2(50);
--begin //相当于大括号
--两种赋值方式 --注释
--v_name:='张三';
v_name:='&输入name的值'
--输出
--||双竖线用来连接字符串
--输出语句 line 是换行
dbms_output.put_line('你输入的姓名是:'||v_name);
--put 能输出,会被缓存,只有遇到put_line (换行)才会全部输出
dbms_output.put('你输入的姓名是:'||v_name);
--end;
plsql相关知识点:
1.声明一个变量,使它的类型与某个变量或数据库基本表中某个列的数据类型一致。
(不知道该变量或列的数据类型)可以使用 %TYPE 。
DECLARE
Teacher_name CHAR(5);
Student_name Teacher_name%TYPE;
……END
BEGIN
Teacher_name CHAR(5);
Student_name Teacher_name%TYPE;
……END
BEGIN
2.plsql的记录集类型一共分为四种类型
** 题目:告诉部门编号,告诉平均工资 同一个表
--列类型 第一种
declare
--v_deptno number(10);
--取sal一列的类型当做变量的类型 表名.列名%type
v_deptno emp.deptno%type;
--v_avgsal number(10,2);
--取sal一列的类型当做变量的类型 表名.列名%type
v_avgsal emp.sal%type;
begin
v_deptno:=&deptno;
--只能保存一个结果
select avg(sal) into v_avgsal from emp where deptno=v_deptno;
dbms_output.put_line('平均工资'||v_avgsal);
end;
--v_deptno number(10);
--取sal一列的类型当做变量的类型 表名.列名%type
v_deptno emp.deptno%type;
--v_avgsal number(10,2);
--取sal一列的类型当做变量的类型 表名.列名%type
v_avgsal emp.sal%type;
begin
v_deptno:=&deptno;
--只能保存一个结果
select avg(sal) into v_avgsal from emp where deptno=v_deptno;
dbms_output.put_line('平均工资'||v_avgsal);
end;
--行类型 第二种
declare
emp_row emp%rowtype;
begin
--选取员工号7788 的一行 存入变量emp_row中
select * into emp_row from emp where empno=7788;
dbms_output.put_line('姓名:'||emp_row.ename);
dbms_output.put_line('职位:'||emp_row.job);
end;
emp_row emp%rowtype;
begin
--选取员工号7788 的一行 存入变量emp_row中
select * into emp_row from emp where empno=7788;
dbms_output.put_line('姓名:'||emp_row.ename);
dbms_output.put_line('职位:'||emp_row.job);
end;
--记录集类型 第三种
--输入一个员工编号,输出他的姓名,职位,薪水 还有部门的名称
declare
--声明一个记录集类型
type myRecord is record
(
--四个属性 (变量名 数据类型)
ename emp.ename%type,
--变量名与表里面的名无关,随便命名
job emp.job%type,
sal emp.sal%type,
dname dept.dname%type
);
--声明一个变量(变量名 类型;)
myrow myRecord;
begin
select ename,job ,dname into myrow from emp e
inner join dept d
on e.deptno =d.deptno
where empno=7788;
dbms_output.put_line('姓名'||myrow.ename);--记录集中声明的变量名ename
dbms_output.put_line('职位'||myrow.job);--记录集中声明的变量名job
dbms_output.put_line('薪水'||myrow.sal);--记录集中声明的变量名sal
dbms_output.put_line('部门'||myrow.dname);--记录集中声明的变量名dname
end;
declare
--声明一个记录集类型
type myRecord is record
(
--四个属性 (变量名 数据类型)
ename emp.ename%type,
--变量名与表里面的名无关,随便命名
job emp.job%type,
sal emp.sal%type,
dname dept.dname%type
);
--声明一个变量(变量名 类型;)
myrow myRecord;
begin
select ename,job ,dname into myrow from emp e
inner join dept d
on e.deptno =d.deptno
where empno=7788;
dbms_output.put_line('姓名'||myrow.ename);--记录集中声明的变量名ename
dbms_output.put_line('职位'||myrow.job);--记录集中声明的变量名job
dbms_output.put_line('薪水'||myrow.sal);--记录集中声明的变量名sal
dbms_output.put_line('部门'||myrow.dname);--记录集中声明的变量名dname
end;
--游标类型 第四种
declare
type mycursor is ref cursor;
mycur mycursor;
emprow emp%rowtype;
begin
open mycur for select * from emp where deptno=10;
loop
fetch mycur into emprow;
exit when mycur%notfound;
dbms_output.put_line(emprow.ename||' '||emprow.job||' '||emprow.hiredate);
end loop;
close mycur;
end;
type mycursor is ref cursor;
mycur mycursor;
emprow emp%rowtype;
begin
open mycur for select * from emp where deptno=10;
loop
fetch mycur into emprow;
exit when mycur%notfound;
dbms_output.put_line(emprow.ename||' '||emprow.job||' '||emprow.hiredate);
end loop;
close mycur;
end;