下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。@H_419_1@
内存溢出小编现在分享给大家,也给大家做个参考。@H_419_1@
--创建Department(deptID,deptname)和UserInfo(userID,username,sex,loginDate,deptID)--其中deptID,userID是自动增长的,并且是主键。deptID是外键。并且插入测试数据--创建序列CREATE SEQUENCE seq_Dep START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 30;--建表DepartmentCREATE table Department( deptID VARCHAR2(10) PRIMARY KEY,deptname VARCHAR2(20));--插入测试数据INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'人事部');INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'技术部');INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'后勤部');INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'经理部');INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'销售部');INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'服务部');INSERT INTO Department VALUES ('D'||seq_Dep.NEXTVAL,'公关部');COMMIT;--创建序列CREATE SEQUENCE seq_User START WITH 1 INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 30;--建表UserInfoCREATE table UserInfo( userID VARCHAR2(10) PRIMARY KEY,username VARCHAR2(20),sex VARCHAR2(2),loginDate DATE,deptID VARCHAR2(10) REFERENCES Department (deptID));--插入测试数据INSERT INTO UserInfo VALUES ('U'||seq_User.NEXTVAL,'Eric SchmIDt','男','12-9月-07','D1');INSERT INTO UserInfo VALUES ('U'||seq_User.NEXTVAL,'Larry Page','12-10月-07','D3');INSERT INTO UserInfo VALUES ('U'||seq_User.NEXTVAL,'Sergey Brin','12-11月-07','D5');INSERT INTO UserInfo VALUES ('U'||seq_User.NEXTVAL,'W. M. Coughran,Jr.','1-12月-07','D4');INSERT INTO UserInfo VALUES ('U'||seq_User.NEXTVAL,'DavID C. Drummond','女','12-12月-01','D2');INSERT INTO UserInfo VALUES ('U'||seq_User.NEXTVAL,'Alan Eustace','Jeff Huber','George Reyes','Elliot Schrage','Tim Armstrong','Nikesh Arora','Sukhinder','Vinton G. Cerf','Dave Girouard','Singh CassIDy','D2');COMMIT;--3. 在deptID建立索引CREATE INDEX deptID_index on UserInfo(deptID);--4. 给Department和UserInfo创建同义词,名称分别是dept,sy_userCREATE OR REPLACE SYNONYM dept FOR Department;CREATE OR REPLACE SYNONYM sy_user FOR UserInfo;/*5. 通过同义词dept,user来创建视图,视图要求能查询出“部门名称,部门编号,用户名,性别,注册时间”*/CREATE OR REPLACE VIEW vIEw_dept_user("部门名称","部门编号","用户名","性别","注册时间")AS SELECT d.deptname,d.deptID,u.username,u.sex,u.loginDate FROM dept d,sy_user u WHERE d.deptID=u.deptID;--14. 使用Instead Of触发器,往第5题创建的视图中插入数据。SET SERVEROUTPUT ON;INSERT INTO vIEw_dept_user ('部门名称','部门编号','用户名','性别','注册时间') VALUES('仓储部','D6','Dejan Perkovic','1-1月-08');/*CREATE OR REPLACE VIEW vIEw_dept_user("部门名称",sy_user u WHERE d.deptID=u.deptID;*/CREATE OR REPLACE TRIGGER dept_user_insertINSTEAD OF INSERT ON vIEw_dept_userFOR EACH ROWDECLARE CURSOR cur_dept IS SELECT * FROM Department WHERE Department.deptID = :NEW.deptID; CURSOR cur_user IS SELECT * FROM sy_user WHERE sy_user.username = :NEW.username; d cur_dept%rowtype; u cur_user%rowtype; dID dept.deptID%TYPE; uID sy_user.userID%TYPE;BEGIN OPEN cur_dept; OPEN cur_user; FETCH cur_user INTO u; FETCH cur_dept INTO d; /* 如果插入的数据中部门ID不存在,则将 seq_Dep.NEXTVAL 产生的序号赋值给变量dID,执行插入语句新增加一个部门。 */ IF cur_dept%NOTFOUND THEN dID := 'D'||seq_Dep.NEXTVAL; INSERT INTO Department(deptID,deptname) VALUES(dID,:NEW.deptname); /* 如果插入数据中的员工不存在,则执行插入语句增加一个新员工 */ IF cur_user%NOTFOUND THEN uID := 'U'||seq_User.NEXTVAL; INSERT INTO UserInfo(userID,deptID) VALUES(uID,:NEW.username,:NEW.sex,:NEW.loginDate,dID); END IF; IF cur_dept%FOUND THEN /* 如果插入的数据中部门ID是已经存在的部门ID,则更新部门名称 */ dID:=:NEW.deptID; UPDATE Department SET Department.deptname WHERE Department.deptID = :NEW.deptID; /* 如果插入数据中的员工不存在,则将seq_User.NEXTVAL 产生的序号赋值给变量uID,执行插入语句增加一个新员工 */ IF cur_user%NOTFOUND THEN uID := 'U'||seq_User.NEXTVAL; INSERT INTO UserInfo VALUES(uID,:NEW.deptID); ELSE /* 如果插入数据中的员工已存在,则根据部门ID、员工姓名 来更新员工的其他字段的值,员工ID为主键,不用更新。 考虑到同名员工存在的可能,但员工的ID不可能相同的特点,需要根据插入数据中的部门ID、员工姓名来查询出 符合要求的员工的ID,用员工ID来进行后续的 *** 作 */ SELECT userID INTO uID FROM UserInfo WHERE UserInfo.username=:NEW.username AND UserInfo.deptID=dID; UPDATE UserInfo SET UserInfo.sex = :NEW.sex,UserInfo.loginDate = :NEW.loginDate,UserInfo.deptID = :NEW.sex WHERE UserInfo.userID=uID AND UserInfo.username=:NEW.username; END IF; END IF; CLOSE ecur; CLOSE dcur;END dept_user_insert;/show errors;出现的错误提示:警告: 创建的触发器带有编译错误。sql> show errors;TRIGGER DEPT_USER_INSERT 出现错误:liNE/Col ERROR-------- -----------------------------------------------------------------3/31 PLS-00049: 错误的赋值变量 'NEW.DEPTID'5/30 PLS-00049: 错误的赋值变量 'NEW.USERname'20/56 PLS-00049: 错误的赋值变量 'NEW.DEPTname'26/75 PLS-00049: 错误的赋值变量 'NEW.USERname'26/89 PLS-00049: 错误的赋值变量 'NEW.SEX'26/98 PLS-00049: 错误的赋值变量 'NEW.LOGINDATE'33/10 PLS-00049: 错误的赋值变量 'NEW.DEPTID'34/4 PL/sql: sql Statement ignored34/46 PL/sql: ORA-00927: 缺少等号34/72 PLS-00049: 错误的赋值变量 'NEW.DEPTID'40/37 PLS-00049: 错误的赋值变量 'NEW.USERname'liNE/Col ERROR-------- -----------------------------------------------------------------40/51 PLS-00049: 错误的赋值变量 'NEW.SEX'40/60 PLS-00049: 错误的赋值变量 'NEW.LOGINDATE'40/75 PLS-00049: 错误的赋值变量 'NEW.DEPTID'47/66 PLS-00049: 错误的赋值变量 'NEW.USERname'49/40 PLS-00049: 错误的赋值变量 'NEW.SEX'49/70 PLS-00049: 错误的赋值变量 'NEW.LOGINDATE'49/103 PLS-00049: 错误的赋值变量 'NEW.SEX'50/53 PLS-00049: 错误的赋值变量 'NEW.USERname'55/5 pls-00103: 出现符号 "DEPT_USER_INSERT"在需要下列之一时: if
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。@H_419_1@
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。@H_419_1@ 总结
以上是内存溢出为你收集整理的SQL Server由于主外键约束导致插入失败的记录方法全部内容,希望文章能够帮你解决SQL Server由于主外键约束导致插入失败的记录方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)