当前位置: 代码迷 >> 综合 >> 2017-02-16 笔试
  详细解决方案

2017-02-16 笔试

热度:2   发布时间:2024-01-19 10:17:49.0
一、理论题
1.SQL功能强大,但是概括起来,它可分成三组。
请分别写上所知道的命令或语句
DML 
 1.INSERT
       语法:
       INSERT INTO
       table_name[ (column_name1[ ,column_name2]...) ]
        VALUES(express1[,express2]...)


       电信的语句的工作应用   
 创建预算单位  ,需要复制一套2013年
       Insert Into cbudgetorg  Select * From cbudgetorg_2013ini;
        --插入新数据
       INSERT INTO   CSUBJECT_REPAIR SELECT * FROM LEI_CSUBJECT_REPAIR;  ---修理类关系表          
       INSERT INTO cnettype SELECT * FROM LEI_cnettype;                 ---修理类网络类型             
       INSERT INTO cspectype SELECT * FROM LEI_cspectype;                   --修理类专业属性         
       INSERT INTO CSUBJECT_SALE SELECT * FROM LEI_CSUBJECT_SALE;         --销售类型关系表                        
       INSERT INTO cmaterialuse SELECT * FROM LEI_cmaterialuse;                  --领料用途TYPE=1(修理),=2 (综合)               
       INSERT INTO CMATERIALTYPE SELECT * FROM LEI_CMATERIALTYPE;                      ---领料类别           
       INSERT INTO CSUBJECT_other SELECT * FROM LEI_CSUBJECT_other;                     --综合类关系表           
       INSERT INTO CSALETYPE_A SELECT * FROM LEI_CSALETYPE_A;    --终端类型A
       INSERT INTO CSALETYPE_B SELECT * FROM LEI_CSALETYPE_B;  --终端类型B
       2.UPDATE
       语法: 
       UPDATE table_name
        SET
      {
      column_name1=express1
      [ column_name2 = express2 ... ]
      |
      (column_name1 [,column_name2...]) 
      =(selectSubquery)
      }
      [ WHERE condition ]



update table_name 
set
column_name1=express1  [ column_name2=express2 ... ]
|
(column_name1[.column_name2...])=(selectSubquery)
[WHERE condition ]






        --更新serviceurl至正式表
update cserviceconfig t1 set t1.serviceurl=(
select t2.serviceurl from MID_GJ_cserviceconfig t2 where t2.servicecode=t1.servicecode
) where exists(
select 1 from MID_GJ_cserviceconfig t3 where t3.servicecode=t1.servicecode
);

       3.DELETE --删除表中的数据 但表还在
      电信的语句的工作应用  
        delete from CSUBJECT_REPAIR;;
       delete from cnettype;
       delete from cspectype;
       delete from CSUBJECT_SALE;
      delete from cmaterialuse;
      delete from CMATERIALTYPE;
      delete from CSUBJECT_other;
     delete from CSALETYPE_A;
     delete from CSALETYPE_B;
       4.TRUNCATE --删除表中所有的数据,但表还在
    
       5.CALL
     电信的语句的工作应用 
     重新编译失效目标数据库用户下失效的对象
     CALL  PROC_RECOMPILE_OBJECTS
       6.LOCKTABLE

       7.MERGE
DDL
create table 
alter table
drop table

DCL
       DCL(Data Control Language)是数据库控制语言。是用来设置或更改 数据库用户 或角色权限的语句,包括(grant,deny, revoke 等)语句
2.什么是数据完整性?它分几种 类型
存储 在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失 数据 完整性。
数据完整性分为四类: 实体完整性 (Entity Integrity)、 域完整性 (Domain Integrity)、 参照完整性 (Referential Integrity)、 用户自定义完整性 (User-definedIntegrity)。

二、判断题:
1.下边删除视图的语句是否正确
Drop  view from Pub_v_Division  X 
  Drop  view Pub_v_Division V
2.DROP TABLE t1语句与DELETE FROM t1 的作用是相同 X
不相同
3.如果更新了一个已经创建视图的表,那么视图必须进行同样的更新才行 X
       视图依附在表上,表变视图自然会变
4.下边的CREATE语句是否正确 X
Create View Credit_debts as (Select all from debts Where Account_id=4)

5.在使用HAVING字句时,要同时使用GROUP BY字句  V
三、选择题
1.下列SQL语句不正确的是
A.SELECT 
au_name,title 
FROM authours,titles,titlers.au.id=titleauthor.au_id 
AND
titles.tiltle_id=titleauthor
2.请写出下语句的错误所在,并给出正确写法
INSERT INTO TABLE COLLECTION SELECT FROM TABLE_2
3.下面的语句有什么 错误,请给出正确写法
UPDATE TABLE("HONUS WAGNER CARD",25000,"FOUND IT")
4.下面这个存储过程实现什么功能 
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE sp_exec_35to41
@database varchar(60),@bz varchar(5)
AS 
begin
declare 
@sqlstring varchar(2000)
alter table Acc_t_AcctItem disable trigger all
delete from Acct_t_Acctltem
set @sqlstring='insert into Acct_t_AcctItem SELECT
AcctCode,AcctName,BalanceDir,Memoric,AuxDept,AuxEnterprise,AuxPerson,
AuxProject,EndFlag,AcctTypeID,Status,Breviary,TaxTypeID,AcctLvIID,SuperID,
null,EndFlag,EndFlag,EndFlag,EndFlag
from '+@database+'.dbo.Acct_t_Acctltem'
exec(@sqlstring)
alter table Acct_t_Acctltem enable trigger all
return
end
GO
SET QUOTED_IDENTIFIFER OFF
GO
SET ANSI_NULLS ON
GO


5.编写存储过程
因为system模式(账号)不能创建触发器,所以用scott/999来测试


查询存储过程的内容
SELECT  text
     FROM  user_source
    WHERE  NAME  =  'Procedure Name'
ORDER  BY  line; --其中Procedure Name为存储过程名字,需要全部用大写英文。






######################################
HHHHHHHHHHHHHHHHHHHHHH
connect scott/999
create procedure pro_20170301 is
begin
--01.创建tb_部门表并插入数据
create table tb_部门(
DeptID varchar2 (4), 
DeptName varchar2(12)
);
insert into tb_部门  (DeptID,DeptName) values ('01','需求组');
insert into tb_部门  (DeptID,DeptName) values ('02','开发组');
insert into tb_部门  (DeptID,DeptName) values ('03','测试组');
--02.创建tb_职员表并插入数据
create table tb_职员
(
PersonID varchar2(3),
PersonName varchar(8),
DeptID varchar2(4)
);
insert into tb_职员(PersonID,PersonName,DeptID) values ('101','小张','01');
insert into tb_职员(PersonID,PersonName,DeptID) values ('102','小李','02');
insert into tb_职员(PersonID,PersonName,DeptID) values ('103','小王','03');
insert into tb_职员(PersonID,PersonName,DeptID) values ('104','老林','04');
--03.创建tb_考勤表
create table tb_考勤
(
Sno number(10), 
PersonID varchar2(3),
Cio number check(Cio in (1,0)),
Cdate date,
Ctime date
);
--创建序列 s_Sequence
CREATE SEQUENCE s_SequenceINCREMENT BY 1   -- 每次加几个  START WITH 1     -- 从1开始计数  NOMAXVALUE       -- 不设置最大值  NOCYCLE    
-- 一直累加,不循环
 
   
--创建触发器 --20170222 2311 做到这里,sys (sysdba)不能创建触发器,要用其他用户测试,删除前面的表,序列,再做一次。
CREATE TRIGGER s_increase BEFORE
insert ON tb_考勤 FOR EACH ROW
begin
select s_SEQUENCE.nextval into:New.Sno from dual;
end s_increase;
commit;
end  pro_20170301 ;
/
TTTTTTTTTTTT
######################################################

create procedure pro_test is
begin
--01.创建tb_部门表并插入数据
create table tb_部门(
DeptID varchar2 (4), 
DeptName varchar2(12)
);
--ok
insert into tb_部门  (DeptID,DeptName) values ('01','需求组');
insert into tb_部门  (DeptID,DeptName) values ('02','开发组');
insert into tb_部门  (DeptID,DeptName) values ('03','测试组');
commit;
end  pro_test ;
/

  相关解决方案