pl/sql基础语法
2012-09-07 09:59
447 查看
--数据定义
--创建表
--drop table scores;
--drop table student;
Create
table student(
Name varchar2(10)
constraint nname
not
null ,
No varchar2(3)
constraint pk_no
primary
key ,
Sex varchar2(4)default
'男'
);
create
table scores(
id number
constraint pk_ID
primary key ,
no varchar2(3)
constraint fp_no
references student(no) ,
name varchar2(100),
num number
);
--drop table scores;
--drop table student;
--创建视图
create
view view_student
as select
* from student;
drop
view view_student
---创建索引
create
index bh on student(no,name);
drop
index bh;
---创建约束条件
----ALTER TABLE 表名 ADD(CONSTRAINT 约束名 约束类型(列名))
alter
table STUDENT
add constraint chk
check (sex='男'
or sex=
'女');
----alter table 表名 drop(constraint)
alter
table student
drop constraint chk
ALTER
TABLE scores DISABLE
constraint pk_ID;----关闭 ALTER TABLE student DISABLE/enable CONSTRAINT nn_sname
ALTER
TABLE student disABLE
CONSTRAINT nname;
ALTER
TABLE scores DISABLE
constraint fp_no;
ALTER
TABLE student DISABLE
constraint nname;
ALTER
TABLE student DISABLE
constraint pk_no;
ALTER
TABLE student DISABLE
constraint nname;
---添加列 ALTER TABLE products ADD description text;
ALTER
TABLE student
ADD description
varchar2(100);
----删除列 ALTER TABLE products drop description text;
ALTER
TABLE student
drop column description ;
alter
table yw_cyzt_wyqytj
add YWFSR
number;
comment on
column yw_cyzt_wyqytj.ywfsr
is '物业费
收入';
alter
table yw_cyzt_wyqytj
add YWJYSR
number;
comment on
column yw_cyzt_wyqytj.YWJYSR
is '物业经
营收入';
alter
table yw_cyzt_wyqytj
add QTYWSR
number;
comment on
column yw_cyzt_wyqytj.QTYWSR
is '其他业
务收入';
数据查询
Select
* from student
数据库操纵
Update
insert delete
Update table_name
Insert
into table_name
values()
Delete table_name
添加数据
declare
icount integer;
sSQL varchar(100);
BEGIN
for icount
in 1 ..90 loop
sSQL:='insert into student(name,no)values('||icount
||','
|| icount
|| ');';
dbms_output.put_line(SSQL);
---execute immediate sSQL;
END LOOP;
END;
Sql块
DECLARE
V1 nchar(10);
v_no varchar(3):='1';
BEGIN
SELECT t.name
INTO V1
FROM student t
WHERE no=v_no;
--SELECT t.name INTO V1 FROM student t
DBMS_OUTPUT.PUT_LINE (v1);
exception
When TOO_MANY_ROWS
THEN
DBMS_OUTPUT.PUT_LINE ('More than one manager');
end;
自定义变量
Record类型
declare
type t_re is record
( name1 student.name%type,name2 student.no%type,name3 student.sex%type);
re t_re;
begin
select
* into re
from student
where no=40;
--select * into re from student where no=40;
dbms_output.put_line(re.name1 ||
';'
|| re.name2
|| ';'
||re.name3);
exception
when too_many_rows
then
DBMS_OUTPUT.PUT_LINE ('More than one manager');
end;
索引表
-- INDEX BY TABLES(不是非/聚簇索引-存在的物理表,它是一个虚拟表)
declare
cursor cur
is select
* from student;
type type_arr is
table
of student%rowtype
index
by binary_integer;
arr_tr type_arr;
iCount integer:=1;
begin
for i
in cur LOOP
arr_tr(icount):=i;
icount:=icount+1;
END LOOP;
for icount
in 1 ..arr_tr.count loop
dbms_output.put_line(arr_tr(icount).name || arr_tr(icount).no
|| arr_tr(icount).sex );
end loop;
if arr_tr.EXISTS(2)
then
dbms_output.put_line('arr_tr(2)='
|| arr_tr(2).name
|| arr_tr(2).no
|| arr_tr(2).sex);
end
if;
end;
游标变量
显示游标
declare
icount integer:=0;
cursor cur1
is select
* from student ;---不带参数的游标
cursor cur2(v_no
number)
is select
* from student t
where to_number(t.no)>v_no;---带参数游标
type type_record is record (name student.name%type,no student.no%type,sex
student.sex%type);
rec_stu type_record;
v_name student.name%type;
v_no student.no%type;
v_sex student.sex%type;
begin
dbms_output.put_line('不带参数的手动打开的游标' );
open cur1;--
loop
exit
when cur1%notfound;
fetch cur1
into rec_stu;
dbms_output.put_line('当前获取的值为:'
|| rec_stu.name
||rec_stu.no||rec_stu.sex);
end loop;
close cur1;
dbms_output.put_line('带参数的用for打开的游标');
for i
in cur2(20)loop
dbms_output.put_line('当前获取的值为:'
|| i.name
||i.no||i.sex);
end loop;
end;
隐示游标
declare
v_no varchar2(10):=&学号;
--v_no number:=&学号;---为什么在数字时能够正确判断
begin
delete scores t
where t.no=trim(v_no);
--delete scores t where t.no=v_no;
if sql%notfound
then---found,rowcount,isopen
delete student t1
where t1.no=v_no;
dbms_output.put_line(sql%rowcount);
end
if;
end;
游标修改 删除操作
select
* from student;
declare
cursor cur
is select
* from student
for
update of name nowait;
begin
for i
in cur loop
UPDATE student
set name='1'
where
current of cur;
end loop;
end;
--select * from student;
流程控制语句
条件语句
---条件语句
--if
declare
v_score number(5,2):=&分数;
v_Result varchar(100):='';
begin
if v_score>0
and v_score<60
then
v_result:='未及格';
elsif v_score<80
then
v_result:='中';
elsif v_score<90
then
v_result:='良';
else
v_result:='优';
end
if;
dbms_output.put_line(v_result);
end;
--case
declare
v_score varchar2(4):=&级别;
v_Result varchar(100):='';
begin
case
upper(trim(v_score))
when
'D'
then
v_result:='未及格';
when
'C'
then
v_result:='中';
when
'B'
then
v_result:='良';
when
'A'
then
v_result:='优';
else
v_result:='未知';
end
case;
dbms_output.put_line(v_result);
end;
循环语句
-- for
declare
i number:=0;
j number:=0;
icount number:=10;
str
varchar(20):='';
begin
for i
in 1.. icount loop
str:='';
for j
in 1 .. icount-i loop
str:=str
||'*';
end loop;
dbms_output.put_line(str);
end loop;
end ;
--while循环
declare
cursor cur
is select
* from student;
st student%rowtype;
begin
open cur;
dbms_output.put_line('查询的条数:'
|| cur%rowcount);
loop
exit
when cur%notfound;
fetch cur
into st;
dbms_output.put_line(st.name ||st.no
||st.sex );
end loop;
close cur;
end;
函数
create
or replace
function fun_sum
return
number is
Result number;
begin
select
count(*)
into Result
from student ;
return(Result);
end fun_sum;
-- select fun_sum from dual
create
or replace
function fun_Sum_stu(v_name
varCHAR)
return
number is sun
number:=0;
begin
select
sum(to_number(no))
into sun
from student
where name=v_name;
return sun;
end fun_Sum_stu;
存储过程
create
or replace
procedure pro_find
is
result number;
begin
select
count(*)
into result
from student ;
end pro_find;
触发器
create
or replace
trigger tr_out
before update
on student
for each row
declare
-- local variables here
begin
dbms_output.put_line('修改前数据:'||:old.name
|| :old.no
|| :old.sex);
dbms_output.put_line('修改后数据:'||:new.name
|| :new.no
|| :new.sex);
end tr_out;update student
set name='12'
where no='2'
--创建表
--drop table scores;
--drop table student;
Create
table student(
Name varchar2(10)
constraint nname
not
null ,
No varchar2(3)
constraint pk_no
primary
key ,
Sex varchar2(4)default
'男'
);
create
table scores(
id number
constraint pk_ID
primary key ,
no varchar2(3)
constraint fp_no
references student(no) ,
name varchar2(100),
num number
);
--drop table scores;
--drop table student;
--创建视图
create
view view_student
as select
* from student;
drop
view view_student
---创建索引
create
index bh on student(no,name);
drop
index bh;
---创建约束条件
----ALTER TABLE 表名 ADD(CONSTRAINT 约束名 约束类型(列名))
alter
table STUDENT
add constraint chk
check (sex='男'
or sex=
'女');
----alter table 表名 drop(constraint)
alter
table student
drop constraint chk
ALTER
TABLE scores DISABLE
constraint pk_ID;----关闭 ALTER TABLE student DISABLE/enable CONSTRAINT nn_sname
ALTER
TABLE student disABLE
CONSTRAINT nname;
ALTER
TABLE scores DISABLE
constraint fp_no;
ALTER
TABLE student DISABLE
constraint nname;
ALTER
TABLE student DISABLE
constraint pk_no;
ALTER
TABLE student DISABLE
constraint nname;
---添加列 ALTER TABLE products ADD description text;
ALTER
TABLE student
ADD description
varchar2(100);
----删除列 ALTER TABLE products drop description text;
ALTER
TABLE student
drop column description ;
alter
table yw_cyzt_wyqytj
add YWFSR
number;
comment on
column yw_cyzt_wyqytj.ywfsr
is '物业费
收入';
alter
table yw_cyzt_wyqytj
add YWJYSR
number;
comment on
column yw_cyzt_wyqytj.YWJYSR
is '物业经
营收入';
alter
table yw_cyzt_wyqytj
add QTYWSR
number;
comment on
column yw_cyzt_wyqytj.QTYWSR
is '其他业
务收入';
数据查询
Select
* from student
数据库操纵
Update
insert delete
Update table_name
Insert
into table_name
values()
Delete table_name
添加数据
declare
icount integer;
sSQL varchar(100);
BEGIN
for icount
in 1 ..90 loop
sSQL:='insert into student(name,no)values('||icount
||','
|| icount
|| ');';
dbms_output.put_line(SSQL);
---execute immediate sSQL;
END LOOP;
END;
Sql块
DECLARE
V1 nchar(10);
v_no varchar(3):='1';
BEGIN
SELECT t.name
INTO V1
FROM student t
WHERE no=v_no;
--SELECT t.name INTO V1 FROM student t
DBMS_OUTPUT.PUT_LINE (v1);
exception
When TOO_MANY_ROWS
THEN
DBMS_OUTPUT.PUT_LINE ('More than one manager');
end;
自定义变量
Record类型
declare
type t_re is record
( name1 student.name%type,name2 student.no%type,name3 student.sex%type);
re t_re;
begin
select
* into re
from student
where no=40;
--select * into re from student where no=40;
dbms_output.put_line(re.name1 ||
';'
|| re.name2
|| ';'
||re.name3);
exception
when too_many_rows
then
DBMS_OUTPUT.PUT_LINE ('More than one manager');
end;
索引表
-- INDEX BY TABLES(不是非/聚簇索引-存在的物理表,它是一个虚拟表)
declare
cursor cur
is select
* from student;
type type_arr is
table
of student%rowtype
index
by binary_integer;
arr_tr type_arr;
iCount integer:=1;
begin
for i
in cur LOOP
arr_tr(icount):=i;
icount:=icount+1;
END LOOP;
for icount
in 1 ..arr_tr.count loop
dbms_output.put_line(arr_tr(icount).name || arr_tr(icount).no
|| arr_tr(icount).sex );
end loop;
if arr_tr.EXISTS(2)
then
dbms_output.put_line('arr_tr(2)='
|| arr_tr(2).name
|| arr_tr(2).no
|| arr_tr(2).sex);
end
if;
end;
游标变量
显示游标
declare
icount integer:=0;
cursor cur1
is select
* from student ;---不带参数的游标
cursor cur2(v_no
number)
is select
* from student t
where to_number(t.no)>v_no;---带参数游标
type type_record is record (name student.name%type,no student.no%type,sex
student.sex%type);
rec_stu type_record;
v_name student.name%type;
v_no student.no%type;
v_sex student.sex%type;
begin
dbms_output.put_line('不带参数的手动打开的游标' );
open cur1;--
loop
exit
when cur1%notfound;
fetch cur1
into rec_stu;
dbms_output.put_line('当前获取的值为:'
|| rec_stu.name
||rec_stu.no||rec_stu.sex);
end loop;
close cur1;
dbms_output.put_line('带参数的用for打开的游标');
for i
in cur2(20)loop
dbms_output.put_line('当前获取的值为:'
|| i.name
||i.no||i.sex);
end loop;
end;
隐示游标
declare
v_no varchar2(10):=&学号;
--v_no number:=&学号;---为什么在数字时能够正确判断
begin
delete scores t
where t.no=trim(v_no);
--delete scores t where t.no=v_no;
if sql%notfound
then---found,rowcount,isopen
delete student t1
where t1.no=v_no;
dbms_output.put_line(sql%rowcount);
end
if;
end;
游标修改 删除操作
select
* from student;
declare
cursor cur
is select
* from student
for
update of name nowait;
begin
for i
in cur loop
UPDATE student
set name='1'
where
current of cur;
end loop;
end;
--select * from student;
流程控制语句
条件语句
---条件语句
--if
declare
v_score number(5,2):=&分数;
v_Result varchar(100):='';
begin
if v_score>0
and v_score<60
then
v_result:='未及格';
elsif v_score<80
then
v_result:='中';
elsif v_score<90
then
v_result:='良';
else
v_result:='优';
end
if;
dbms_output.put_line(v_result);
end;
--case
declare
v_score varchar2(4):=&级别;
v_Result varchar(100):='';
begin
case
upper(trim(v_score))
when
'D'
then
v_result:='未及格';
when
'C'
then
v_result:='中';
when
'B'
then
v_result:='良';
when
'A'
then
v_result:='优';
else
v_result:='未知';
end
case;
dbms_output.put_line(v_result);
end;
循环语句
-- for
declare
i number:=0;
j number:=0;
icount number:=10;
str
varchar(20):='';
begin
for i
in 1.. icount loop
str:='';
for j
in 1 .. icount-i loop
str:=str
||'*';
end loop;
dbms_output.put_line(str);
end loop;
end ;
--while循环
declare
cursor cur
is select
* from student;
st student%rowtype;
begin
open cur;
dbms_output.put_line('查询的条数:'
|| cur%rowcount);
loop
exit
when cur%notfound;
fetch cur
into st;
dbms_output.put_line(st.name ||st.no
||st.sex );
end loop;
close cur;
end;
函数
create
or replace
function fun_sum
return
number is
Result number;
begin
select
count(*)
into Result
from student ;
return(Result);
end fun_sum;
-- select fun_sum from dual
create
or replace
function fun_Sum_stu(v_name
varCHAR)
return
number is sun
number:=0;
begin
select
sum(to_number(no))
into sun
from student
where name=v_name;
return sun;
end fun_Sum_stu;
存储过程
create
or replace
procedure pro_find
is
result number;
begin
select
count(*)
into result
from student ;
end pro_find;
触发器
create
or replace
trigger tr_out
before update
on student
for each row
declare
-- local variables here
begin
dbms_output.put_line('修改前数据:'||:old.name
|| :old.no
|| :old.sex);
dbms_output.put_line('修改后数据:'||:new.name
|| :new.no
|| :new.sex);
end tr_out;update student
set name='12'
where no='2'
相关文章推荐
- Oracle pl/sql 基础入门语法
- oracle PL/SQL语法基础
- Oracle PL/SQL基础语法 ——Oracle Database 11g R2
- oracle--PL/SQL基础语法
- PL/SQL基础语法 赋值循环游标etc
- PL/SQL developer基础语法学习(一)
- PL/SQL程序设计基础语法详解(一)
- 【DB.PL/SQL】PL/SQL —— 语法基础
- pl/sql基础语法
- PL/SQL基础语法
- PL/SQL之基础语法
- PL/SQL developer基础语法学习(一)之变量
- PL/SQL基础语法
- ORACLE之PL/SQL简单基础语法学习(一)
- Oracle PL/SQL 基础语法、游标、例外
- PL/SQL基础语法入门
- PL/SQL之一 基础语法
- PL/SQL developer基础语法学习(三)之游标
- PL/SQL developer基础语法学习(二)之语法
- ORACLE之PL/SQL简单基础语法学习(二)