pl/sql基础语法

-- 数据定义
--
创建表
--
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 '
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值