SQLPL编程基础文档格式.docx
- 文档编号:20742087
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:33
- 大小:312.17KB
SQLPL编程基础文档格式.docx
《SQLPL编程基础文档格式.docx》由会员分享,可在线阅读,更多相关《SQLPL编程基础文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
||Sysdate);
Commit;
--这里切记要commit否则将不会将数据提交到表中
EndLoop;
记录已经按照计划全部插入,请查看!
);
End;
//注:
hqf为登录用户名,需根据情况改动,如:
实验中一般用scott.
(3).查询表中数据,给出查询结果截图:
2.导入教材实验数据
(1).创建用户school,并赋于相应的权限:
CREATEUSERvendition
identifiedbyvendition;
GRANTCREATESESSION,RESOURCE,DBA
TOvendition;
CREATEUSERSCHOOL
identifiedbySCHOOL;
TOSCHOOL;
(2).将文件夹“TestTableBak”中的备份文件school.DMP和vendition.DMP复制到某一目录下(例如E盘根目)。
(3).然后启动CMD命令提示窗口,运行如下的还原命令。
impuserid=school/schoolignore=yfromuser=schooltouser=schoolfile=e:
\school.DMP
impuserid=vendition/venditionignore=yfromuser=venditiontouser=venditionfile=e:
\vendition.DMP
(4).验证确认。
以用户名School登录系统,查看相应的表,看是否有数据。
7.2.最简单的PL/SQL程序
1.输出"
Hello,World"
/***************************************
第一个例子:
输出"
***************************************/
setserverouton--设置SQL*Plus将服务器所返回的写出来
begin--块开始
DBMS_OUTPUT.put_line('
Hello,World'
--在控制台输出信息,类似C语言的Printf或者java语言中的System.out.print
end;
--块结束
运行结果为:
出错原因:
setserverouton应该先执行
1.接收数据并输出
在此基础上,完成Hello,某某,某某从客户端得到
declare
v_namevarchar2(20);
v_name:
='
&
姓名'
;
--与“客户端”交互,类似C语言的scanf语句
Hello,'
||v_name);
7.3.简单变量的使用
1.变量的声明与引用
setserveroutputon;
--PL/SQL变量之简单类型
v_dept_idnumber(5):
=1111;
v_agebinary_integer:
=12;
v_dept_namevarchar2(20):
='
人事部'
v_rateconstantnumber(4,2):
=22.12;
v_validbooleannotnull:
=TRUE;
v_hire_datedatenotnull:
=sysdate+7;
begin
v_dept_id:
=2222;
dbms_output.put_line(v_dept_id);
/
变量声明的做用户:
就近原则
2.Into子句的使用:
赋值给变量
Declare
V_deptnonumber
(2);
v_locvarchar2(15);
begin
selectdeptno,loc
intov_deptno,v_loc
fromdept
wheredname='
SALES'
DBMS_OUTPUT.PUT_LINE(V_deptno||'
and'
||v_loc);
end;
实验练习:
编写一PL/SQL程序,实现依次从客户端接收各字段的值,并放于变量中,输完一条记录的所有字段值后,将值写到数据库表Emp中。
请给出程序源码:
v_empnonumber(4)notnull:
=8000;
v_enamevarchar2(10);
v_jobvarchar2(9);
v_mgrnumber(4);
v_hiredatedate;
v_salnumber(7,2);
v_commnumber(7,2);
v_deptnonumber
(2);
v_empno:
雇员号码'
v_ename:
雇员姓名'
v_job:
工作名称'
v_mgr:
编号'
v_hiredate:
雇佣时间'
v_sal:
工资'
v_comm:
税'
v_deptno:
办公号'
insertintoscott.EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
VALUES(
v_empno,
v_ename,
v_job,
v_mgr,
v_hiredate,
v_sal,
v_comm,
v_deptno
commit;
end;
给出测试结果:
总结:
获取客户端输入“&
”+表的插入
3.变量作用域:
阅读以下程序,熟悉变量的斌值方法,理解变量的作用,给出运行结果。
--嵌套块中的变量赋值和作用域
DECLARE
v_weightNUMBER(3):
=100;
v_messageVARCHAR2(255):
OuterValue'
BEGIN
DECLARE
v_weightNUMBER(3):
=1;
v_messageVARCHAR2(255):
Innervalue'
BEGIN
v_weight:
=v_weight+1;
v_message:
Put'
||v_message;
DBMS_OUTPUT.PUT_LINE('
innerblock'
||to_char(v_weight)||v_message);
END;
||v_message;
outterblock'
END;
作用范围:
7.4.使用%type和%rowtype变量
1.使用%type变量
阅读以下程序,理解其功能,给出运行结果。
(1)DROPTABLEEMPL;
createtableEMPL
(
EMPLOYEE_IDNUMBER(5)notnull,
LAST_NAMEVARCHAR2(20)notnull,
HIRE_DATEDATE,
SALARYNUMBER(8,2),
JOB_IDNUMBER(5),
DEPARTMENT_IDNUMBER(5)
--PL/SQL变量之%TYPE类型
v_last_nameemployees.last_name%TYPE;
----用户hr
v_hire_dateemployees.hire_date%TYPE;
v_balancenumber(6,2);
v_min_balancev_balance%type;
定义%type类型的变量'
<
类型自动匹配>
(2)declare
v_deptnodept.deptno%type;
v_locdept.loc%type;
begin
selectdeptno,loc
intov_deptno,v_loc
fromdept
wheredname='
DBMS_OUTPUT.PUT_LINE(V_deptno||'
/
(有问题)
2.使用%Rowtype变量
(1) DROPTABLEEMPL;
--PL/SQL变量之%ROWTYPE类型
v_emplemp%rowtype;
定义%rowtype类型的变量'
(2) droptablestock;
createtablestock
symbolvarchar2(50),
pricenumber(6,2)
insertintostockvalues('
IBM'
188.88);
ORCL'
100.88);
stock_info1stock%ROWTYPE;
stock_info2stock%ROWTYPE;
stock_info3stock%ROWTYPE;
--对应纪录直接取得相应字段的:
Populatethespecificfieldsinarecord
SELECTsymbol,price
INTOstock_info1.symbol,stock_info1.price
FROMstock
WHEREsymbol='
--对应纪录直接放入纪录中
SELECT*INTOstock_info2FROMstock
stock_info3:
=stock_info2;
--记录间可以相互赋值
stock_info3.symbol:
ORACLE'
--对纪录的各字段赋值。
stock_info1:
||stock_info1.symbol||'
||stock_info1.price);
stock_info2:
||stock_info2.symbol||'
||stock_info2.price);
stock_info3:
||stock_info3.symbol||'
||stock_info3.price);
思考:
如下所示:
改变表结构。
droptablestock;
pricenumber(6,2),
ownervarchar2(10)
对以上程序运行有影响吗?
为什么?
结构改变,插入数据也必须更正格式,不然无法执行
7.5.使用复合变量
1.记录类型
(1)setserveroutputon;
--PL/SQL变量之RECORD类型1
typenamed_record_typeisrecord(
last_namevarchar2(20),
first_namevarchar2(20),
birthdaydate,
agenumber(3)
);
v_record_1named_record_type;
v_record_2named_record_type;
v_record_1.last_name:
张'
v_record_1.first_name:
三丰'
v_record_1.birthday:
2-2月-1788'
v_record_1.age:
=432;
定义record类型的变量'
(2)--使用记录类型2:
DECLARE
TYPErempISRECORD(
v_empnonumber(10),
v_enameVARCHAR2(20),
v_salaryNUMBER(10,2)
rsm_empremp;
SELECTempno,ename,sal
INTOrsm_emp.v_empno,rsm_emp.v_ename,rsm_emp.v_salary
FROMemp
WHEREsal=(SELECTMAX(sal)FROMemp);
--求出工资最高的雇员
DBMS_OUTPUT.PUT_LINE('
HighestPaidEmployeeis'
||rsm_emp.v_ename);
Idis'
||rsm_emp.v_empno||'
Salary'
||to_char(rsm_emp.v_salary,'
999,999.99'
));
(3)--使用记录类型3:
INTOrsm_emp
2.记录表类型
--一维表类型(相当于基本数据类型元素组成的一维数组)
typetabletype1istableofvarchar2(4)indexbybinary_integer;
--typetabletype2istableofemployees.last_name%typeindexbybinary_integer;
table1tabletype1;
--table2tabletype2;
begin
table1
(1):
大学'
table1
(2):
大专'
--table2
(1):
=88;
--table2
(2):
=55;
dbms_output.put_line(table1
(1)||table1
(2));
--dbms_output.put_line(table1
(2)||table2
(2));
/*
在定义好的表类型变量里,可以使用count、delete、first、last、next、exists和prior等属性进行操作,使用方法为“表变量名.属性”,返回的是数字。
*/
--使用表类型变量属性
Typetabletype1istableofvarchar2(9)indexbybinary_integer;
table1tabletype1;
ibinary_integer:
=11;
table1
(1):
成都市'
table1(5):
北京市'
table1(3):
青岛市'
table1(11):
dbms_output.put_line('
总记录数:
||to_char(table1.count));
第一条记录:
||table1.first);
最后条记录:
||table1.last);
第3条的前一条记录:
||table1.prior(3));
第5条的后一条记录:
||table1.next(5));
if(table1.exists(i))then
该条记录值为:
||table1(i));
else
该条记录不存在!
endif;
table1.delete(11);
--table1.delete(12);
7.6.复合变量的使用
1.完整定义一个记录类型的变量,了解其简单应用。
TypemyrecordIsRecord(
r_recordnumberNumber(4),
r_currentdateDate
v_myrecordmyrecord;
Begin
Select*
Intov_myrecord
Fromtesttable
Whererecordnumber=80;
用记录类型的变量取出来的值为:
||
v_myrecord.r_recordnumber||
v_myrecord.r_currentdate);
给出运行结果:
2.简单的%Rowtype定义变量的实例
v_myrowtesttable%Rowtype;
Intov_myrow
Whererecordnumber=90;
用rowtype查询的结果是:
||v_myrow.recordnumber||v_myrow.currentdate);
--dbms_output.put_line('
||v_myrow.recordnumber||v_myrow.cu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQLPL 编程 基础