oracle编程题.docx
- 文档编号:12177370
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:25
- 大小:30.88KB
oracle编程题.docx
《oracle编程题.docx》由会员分享,可在线阅读,更多相关《oracle编程题.docx(25页珍藏版)》请在冰豆网上搜索。
oracle编程题
1.通过if...else语句实现只有年龄大于或等于56岁,才可以申请退休,否则不可以申请退休。
setserveroutputondeclareageint:
=55;beginifage>=56thendbms_output.put_line(您可以申请退休了!
);elsedbms_output.put_line(您小于56岁,不可以申请退休!
);endif;end;/
2.创建一个名为student的数据表答案:
sql>createtablestudent{student_idnumbernotnull,student_namevarchar2(20),student_agenumber}tablespaceusers/
3.用SQL语句写出以下操作建一张数据表EMP(职工信息表),包含工号、姓名、性别、部门、年龄、工资等字段。
CreatetableEMP(IDNUMBER,NAMEVARCHAR2(20),SEXCHAR(4),DEPARTMENTVARCHAR2(20),AGENUMBER,SALARYNUMBER(6,2))
4.将user表中ID=123的name替换为LCY
updateusersetname=LCYwhereID=123;
5.查询没有学全所有课的同学的学号、姓名;selectstu.sno,stu.sname,count(o)fromstudentstuleftjoinsconstu.sno=sc.snogroupbystu.sno,stu.snamehavingcount(o)<(selectcount(distinctcno)fromcourse)===================================select*fromstudentwheresnoin(selectsnofrom(selectstu.sno,ofromstudentstucrossjoincoursecminusselectsno,cnofromsc))
6.使用for语句求前100个自然数中偶数之和declaresum_iint:
=0;beginforiinreverse1..100loopifmod(i,2)=0thensum_i:
=sum_i+i;endif;endloop;dbms_output.put_line(前100个自然数中偶数之和是:
||sum_i);end;
7.创建一个名为student的数据表答案:
sql>createtablestudent{student_idnumbernotnull,student_namevarchar2(20),student_agenumber}tablespaceusers/
8.创建一个名为student的数据表答案:
sql>createtablestudent{student_idnumbernotnull,student_namevarchar2(20),student_agenumber}tablespaceusers/
9.在表"student"中查询姓张的学生:
select*fromstudentwheresnamelike张%;
10.CREATETABLEabc
(
xmchar(20);
xhnumber(10);
nlnumber(10);
);
以以上语句为基础,分别以此完成插入,删除,查看操作。
INSERTINTOabc(xm,xb,nl)VALUES(张三,2015072000,21);
DELETEFROMabcWHERExm=张三;
SELECT*FROMabc
11.要求创建一个用户MRFUN,并为其分配连接数据库和创建数据表的权限。
--创建用户
createuserMRFUNidentifiedbymrsoft
defaulttablespaceusers
temporarytablespacetemp;
--授权
grantconnect,createtabletoMRFUN;
12.创建一个用户名为student,密码为myuser,默认表空间为users,临时表空间为temp的用户,并指定该用户在tbsp_1表空间上最多可以使用的大小为10M。
答:
createuserstudentidentifiedbymyuserdefaulttablespaceuserstemporarytablespacetempquota10Montbsp_1;
13.建一张数据表EMP(职工信息表),包含工号、姓名、性别、部门、年龄、工资等字段。
CreatetableEMP(IDNUMBER,NAMEVARCHAR2(20),SEXCHAR(4),DEPARTMENTVARCHAR2(20),AGENUMBER,SALARYNUMBER(6,2));
14.请写出在sqlplus中以system身份登陆后,查询Scott表空间的emp表的所有数据的sql语句。
答案:
select*fromscott.emp;
本问题解答如下:
15.编写程序,求解小于1000的所有水仙花数。
(水仙花数是一个大于3位的数,它等于每个数字的n次幂之和。
例如,153=13+53+33)Declare@nintset@n=100while@n<=999beginifpower(@n%10,3)+power(@n/10%10,3)+power(@n/100,3)+@nprintcast(@nAsnvarchar(3))set@n=@n+1end
16.操作题:
如何连接到服务器?
connsystem/Pw123456@210.44.193.250:
1521/swdb;
17.创建一个用户为mr,口令为mrsoft,并默认表空间为users,临时表空间为temp的用户:
createusermridentifiedbymrsoftdafaulttablespaceuserstemporarytablespacetemp;
18.编写PL程序块循环给scott.emp表中所有职工增加工资,每次增加100元,直到平均工资高于5000或任一职工的工资超过6000元为止,最后显示出给所有员工一共增加了多少工资。
DECLARE--声明变量avg_salemp.sal%TYPE;max_salemp.sal%TYPE;v_countnumber:
=0;BEGIN--循环遍历loopSELECTAVG(sal)INTOavg_salFROMemp;SELECTMAX(sal)INTOmax_salFROMemp;--退出条件判断EXITWHENavg_sal>5000ORmax_sal>6000;UPDATEempSETsal=sal+100;v_count:
=v_count+SQL%ROWCOUNT;ENDLOOP;--打印结果dbms_output.put_line(职工工资增加了¥||v_count*100);END;
19.100以内能被5整除的数。
declareIinteger;beginforIin1..100loopifmod(i,5)=0thendbms_output.put_line(I);endif;endloop;end;
20.使用for语句求前100个自然数中偶数之和
declare
sum_iint:
=0;
begin
foriinreverse1..100loop
ifmod(i,2)=0then
sum_i:
=sum_i+i;
endif;
endloop;
dbms_output.put_line(前100个自然数中偶数之和是:
||sum_i);
end;
21.在学生表(xsb)中创建触发器,要求新插入的学生记录的年龄不能超过现有学生的最大年龄。
Createorreplacetriggerins_ageBeforeinsertonxsboneachrowDeclareTimedate;BeginSelectmin(ccsj)intotimefromxsb;if(:
new.ccsjraise_applicartion_error(-20001,”新插入的学生记录的年龄不能超过现有的最大年纪”);End;
22.以DBA身份登陆数据库后,如何修改scott的密码?
答案:
alteruserscottaccountunlock;connscott/tiger;
23.用函数get_sal查询员工7521号的工资,请写出一种查询方式。
Selectget_sal(7521)fromdual;
24.请用SQL语言创建一个视图GM_VIEW,检索顾客的顾客号、顾客名和订购商品的商品名、金额和日期。
(金额等于数量*购买价)(6分)CREATVIEWGM_VIEW(顾客号,顾客名,商品名,金额,日期)ASSELECT顾客号,顾客名,商品名,数量*购买价as金额,日期FROMArtcle,Customer,OrderItemWHERECustomer.顾客号=OrderItem.顾客号and_Article.商品号=_OrderItem.商品号
24.自定义角色my_role,该角色拥有创建表的权限,创建用户my_user,将my_role以及更新表的权限赋予该用户。
createrolemy_role;grantcreatetabletomy_role;createusermy_user;grantmy_role,updateanytabletomy_user;
25.输出九九乘法表declareiint;jint;beginforiin1..9loopforjin1..iloopdbms_output.put(i||*||j||=||(i*j)||);endloop;dbms_output.put_line();endloop;end;
26.在emp表中,查询既不是最高工资也不是最低工资的员工信息。
selectempno,ename,salfromempwheresal>(selectmin(sal)fromemp)andsal<(selectmax(sal)fromemp);
27.在emp表中,查询既不是最高工资也不是最低工资的员工信息。
selectempno,ename,salfromempwheresal>(selectmin(sal)fromemp)andsal<(selectmax(sal)fromemp);2.当一个表被删除掉时所有基于该表的索引都被自动删除。
(√)4、求部门号为D_01的平均工资·SQL>SELECTAVG(sal)FROMempWHEREdetno=D_01;
28.编写PL/SQL程序,计算1-100之间所有奇数之和。
答案:
DECLAREsum_iINT:
=0;BEGINFORiIN1..100LOOPIFMOD(i,2)=1THENsum_i:
=sum_i+i;ENDIF;ENDLOOP;DBMS_OUTPUT.PUT_line(前100个自然数奇数的和是:
||sum_i);END;/
29.创建一个用户名为mr,口令为mrsoft,并设置默认表空间为users,临时表空间为temp的用户。
createusermridentifiedbymrsoftdefaulttablespaceuserstemporarytablespacetemp;
30.在Goods表中查询所有商品的商品号(g_id)、商品名称(g_name)。
selectg_id,g_namefromGooods;
31.编写PL程序块循环给scott.emp表中所有职工增加工资,每次增加100元,直到平均工资高于5000或任一职工的工资超过6000元为止,最后显示出给所有员工一共增加了多少资。
DECLARE--声明变量avg_salemp.sal%TYPE;max_salemp.sal%TYPE;v_countnumber:
=0;BEGIN--循环遍历loopSELECTAVG(sal)INTOavg_salFROMemp;SELECTMAX(sal)INTOmax_salFROMemp;--退出条件判断EXITWHENavg_sal>5000ORmax_sal>6000;UPDATEempSETsal=sal+100;v_count:
=v_count+SQL%ROWCOUNT;ENDLOOP;--打印结果dbms_output.put_line(职工工资增加了¥||v_count*100);END;
32.对所有JOB_ID为IT_PROG薪水增加一倍.
declare
cursorcur_raise_itisselect*fromemployeesewheree.job_id=IT_PROGforupdate;
begin
foriincur_raise_itloopupdateemployeesesete.salary=e.salary*2wherecurrentofcur_raise_it;
endloop;
end;
33.完成以下PL/SQL块,功能是:
创建一个交换两数的过程。
CREATEORREPLACEPROCEDUREswap(p1INOUTNUMBER,p2INOUTNUMBER)ISv_tempNUMBER;BEGINv_temp:
=p1;p1:
=p2;p2:
=v_temp;END;
34.用PL/SQL语言求前100个自然数的和。
declare
sum_iint:
=0;
iint:
=0;
begin
whilei<=99loop
i:
=i+1;
sum_i:
=sum_i+1;
endloop;
dbms_output.put_line(前一百个自然数的和是:
||sum_i);
end;
35.创建连接视图v_regions_countries,包含字段r_id,r_name,c_id,c_name。
视图从regions表、countries表查询出region_id、region_name、country_id、country_name字段。
Createviewv_regions_countriesAsSelectregion_id、region_name、country_id、country_nameFromHR.regions,HR.countriesWherer_id=c_id;r_name=c_name;
36.员工表(emp):
(empnoNUMBER(4)notnull,--员工编号,表示唯一enameVARCHAR2(10),--员工姓名jobVARCHAR2(9),--员工工作职位mgrNUMBER(4),--员工上级领导编号hiredateDATE,--员工入职日期salNUMBER(7,2),--员工薪水commNUMBER(7,2),--员工奖金deptnoNUMBER
(2)—员工部门编号)部门表(dept):
(deptnoNUMBER
(2)notnull,--部门编号dnameVARCHAR2(14),--部门名称locVARCHAR2(13)—部门地址)1.列出各个部门的MANAGER(经理)的最低薪水。
SELECTdeptno,MIN(sal)FROMempWHEREjob=MANAGERGROUPBYdeptno;2.找出收取奖金的员工的不同工作。
SELECTDISTINCT(JOB)FROMEMP
36.
(1).使用createtable命令创建student表,表中包含的字段及字段类型:
SNAMECHAR(20),
SNOCHAR(20),SAGEINT,SSEXCHAR
(2),SDEPTCHAR(30),其中字段SNO为主键
CREATETABLESTUDENT(
SNAMECHAR(20),
SNOCHAR(20)PRIMARYKEY,
SAGEINT,
SSEXCHAR
(2),
SDEPTCHAR(30)
);
(2).在student中插入一条数据(王林,20150001,22,男,信科学院)
INSERTINTOSTUDENTVALUES(王林,20150001,22,男,信科学院);
37.创建一个student表其中包含的字段有Sno,Sname,Ssex,Sage,Major
createtablestudent(
Snochar(8),
Snamechar(10),
Ssexchar
(2),
Sageint,
Majorchar(20)
);
38..编程题:
建立一个student表(姓名,性别,学号,年龄)createtablestudent(snamevarchar(10)notnull,ssexvarchar(6)notnull,snonumber(10)notnull,ageint);插入一个名为Tom男学号为123456年龄为20的人insertintostudentvalues(Tom,男,123456,20)
39.输出九九乘法表:
declareiint:
=0;jint:
=0;beginDbms_Output.put_line(九九乘法表);while(i<=9;j<=i)dbms_Output.put(i||*||j||=||i*j||);dbms_output.put();endloop;dbms_output.new_line;endloop;end;
40.编写PL/SQL程序,计算计算10的阶乘:
declareinumber
(2):
=1;snumber(10):
=1;beginloops:
=s*i;i:
=i+1;dbms_output.put_line(s);exitwheni>10;endloop;end;
41.编写一函数GetName,该函数的功能是在表Teacher中根据指定的教师编号,返回该教师的姓名。
SETserverOutputON;DECLAREGetNamevarchar(50):
=‟TID‟;BEGINDbms_output.put_line(GetName);END;
42.用命令行的方式,创建一个新的ORACLE用户,用户名为AAA,口令为BBB,默认表空间为USERS,临时表空间为TEMP。
答案:
CREATEUSERAAAIDENTIFIEDBYBBBDEFAULTTABLESPACEUSERSTEMPORARYTABLESPACETEMP;
43.定义一个PL/SQL代码块,计算两个整数的和与这两个整数的差的商。
SQL>declareaint:
=100;bint:
=200;cnumber;beginc:
=(a+b)/(a-b);dbms_output.put_line(c);exceptionwhenzero_dividethendbms_output.put_line(除数不许为零!
);end;/
44.填写下面语句,使其可以将Class表移动到表空间system中的数据段,并且其初始化盘区为30KB,第二个盘区为20KB,随后分配的盘区不会增长。
答:
altertableClass(move)tablespacesystemstorage(()()()minextents1maxextentsunlimited);
45.定义一个PL/SQL代码块,计算两个整数的和与这两个整数的差的商。
declareaint:
=100;bint:
=200;cnumber;beginc:
=(a+b)/(a-b);dams_output.put_line(c);exceptionwhenzero_dividethendbms_output.put_line(除数不许为零!
);end;/
46.完成以下PL/SQL块,功能是:
显示2到50的25个偶数。
BEGINFORevennumberIN1..25LOOPDBMS_OUTPUT.PUT_LINE(even_number*2);ENDLOOPEND;
47.编写一个PL块,定义一个静态游标存储scott.emp表中所有雇员的员empno、ename和sal,并使用循环打印出所有数据。
declarecursorcur_empisselect*fromemp;v_erowemp%rowtype;beginopencur_emp;loopfetchcur_empintov_erow;exitwhencur_emp%notfound;dbms_output.put_line(员工编号:
||v_erow.empno||员工姓名:
||v_erow.ename||员工工资:
||v_erow.sal);endloop;end;
48.完成以下PL/SQL块,功能是:
创建一个交换两数的过程。
CREATEORREPLACEPROCEDURE
swap(p1INOUTNUMBER,p2___INOUT___NUMBER)IS
v_tempNUMBER;
BEGIN
v_temp:
=p1;
p1:
=p2;
p2:
=v_temp;
END;
49.已知公司的员工表EMP(EID,ENAME,BDATE,SEX,CITY),部门表DEPT(DID,DNAME,DCITY),工作表WORK(EID,DID,STARTDATE,SALARY)。
各个字段说明如下:
EID——员工编号,最多6个字符。
例如A00001(主键)ENAME——员工姓名,最多10个字符。
例如SMITHBDATE——出生日期,日期型SEX——员工性别,单个字符。
F或者MCITY——员工居住的城市,最多2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 编程
![提示](https://static.bdocx.com/images/bang_tan.gif)