⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 script_68.txt

📁 orale培训教材包括了所有的sql说明和实例
💻 TXT
📖 第 1 页 / 共 2 页
字号:
---------- not_null.txt ----------
desc sm_emp_null;
create table sm_emp_null
(EmpID char(10) NOT NULL,
Name   varchar2(10) NOT NULL,
salary number(8,2) NOT NULL,
TelNo  char(8));


insert into sm_emp_null values
('000000001','Tom',100,Null);
insert into sm_emp_null values
('000000002',null,100,Null);





---------- unique.txt ----------
/*
 * 范例名称:UNIQUE
 * 文件名称:unique.txt
 */
--什么含义呢?相同编号的人员不许输入。
drop table sm_emp_unique;

create table sm_emp_unique(
empid char(10) unique,
name varchar2(20));

insert into sm_emp_unique values
('0000000001','Tomcat');
insert into sm_emp_unique values
('0000000001','java');


--什么含义呢?认为相同姓名,雇佣日期的雇员是同一个人,不再输入
--雇员,id,姓,名,雇佣日期
DROP TABLE plsql101_person;
create table plsql101_person(
person_code varchar2(3),
first_name varchar2(15),
last_name varchar2(20),
hire_date date);

ALTER TABLE plsql101_person 
ADD CONSTRAINT person_unique UNIQUE (
     first_name,
     last_name,
     hire_date
     )
;

--如下数据是否可以插入-------
1   a   b  09/09/09
2   a   c  09/09/09


INSERT INTO plsql101_person VALUES (
     '01', '张', '飞', '01-6月-03');

--第二条如何呢?
INSERT INTO plsql101_person VALUES (
     '02', '张', '飞', '01-6月-03');



---------- check.txt ----------
/*
 * 范例名称:CHECK
 * 文件名称:check.txt
 */

--工资必须<10000,
CREATE TABLE sm_emp_check(
empid  VARCHAR2(3),
name   VARCHAR2(10),
salary NUMBER(8,2)  CHECK (salary<10000 ));--ok


INSERT INTO sm_emp_check VALUES('001', 'JACK', 100);
INSERT INTO sm_emp_check VALUES('002', 'JACK2', 101);
INSERT INTO sm_emp_check VALUES('003', 'JACK3', 10000);
INSERT INTO sm_emp_check VALUES('003', 'JACK3', null);






--练习结果:
drop table sm_emp_check;
CREATE TABLE sm_emp_check(
empid  VARCHAR2(3),
name   VARCHAR2(10),
salary NUMBER(8,2)  
CHECK (salary >100 and salary<10000 
and salary is not null ));

--方法2
drop table sm_emp_check2;
CREATE TABLE sm_emp_check2(
empid  VARCHAR2(3),
name   VARCHAR2(10),
salary NUMBER(8,2)  
CHECK (salary >100 and salary<10000 
) not null );


INSERT INTO sm_emp_check VALUES('001', 'JACK', 100);
INSERT INTO sm_emp_check VALUES('002', 'JACK2', 101);
INSERT INTO sm_emp_check VALUES('003', 'JACK3', 10000);
INSERT INTO sm_emp_check VALUES('003', 'JACK3', null);

--采购日期必须在2000-06-30以后
ALTER TABLE plsql101_purchase 
ADD ( CONSTRAINT reasonable_date 
CHECK(purchase_date IS NOT NULL
AND TO_CHAR(purchase_date, 'YYYY-MM-DD') >= '2000-06-30'
     )
    )
;

INSERT INTO plsql101_purchase VALUES (
     'Small Widget', 'GA', '28-2月-00', 10);



---------- constraint_all.txt ----------
/*
 * 范例名称:CONSTRAINT综合练习
 * 文件名称:constraint_all.txt
 */

 --清除plsql101_product的约束
 alter table plsql101_product drop constraint positive_quantity;
 alter table plsql101_product drop constraint valid_price;
 alter table plsql101_product drop constraint reasonable_date




 名称  产品库存表  :plsql101_product                               
 ------------------------------------------------
 PRODUCT_NAME                           产品名称
 PRODUCT_PRICE                          产品单价
 QUANTITY_ON_HAND                       库存数
 LAST_STOCK_DATE                        最后进货日期

要求用约束实现:
Product单价必须在 0---99之间
Product库存必须>0
最后进货日必须在2001/12/31以后


--要求产品单价在0--99,且必须确定。
ALTER TABLE plsql101_product ADD ( 
     CONSTRAINT valid_price CHECK(
          product_price IS NOT NULL 
          AND
          product_price BETWEEN 0 AND 99
          )
     )
;
--防止 null输入。可以在constraint语句中使用and实现复杂条件。

--要求产品库存〉0,且必须有确定值。
ALTER TABLE plsql101_product ADD ( 
     CONSTRAINT positive_quantity CHECK(
          quantity_on_hand IS NOT NULL
          AND
          quantity_on_hand >0
          )
     )
;

--要求产品最后进货日在2001/12/31以后  reasonable_date前面已经用了,改名为reasonable_date2
ALTER TABLE plsql101_product ADD ( 
     CONSTRAINT reasonable_date2 CHECK(
TO_CHAR(last_stock_date, 'YYYY-MM-DD') > '2001-12-31'
          )
     )
;

--err :最后进货日在2001/12/11以后
ALTER TABLE plsql101_product drop constraint reasonable_date2;
ALTER TABLE plsql101_product ADD ( 
     CONSTRAINT reasonable_date2 CHECK(
          TO_CHAR(last_stock_date, 'DD-MM-YYYY') > '11-12-2000'
          )
     )
;

INSERT INTO plsql101_product VALUES (
     'Small Widget', NULL, 1, '28-2月-02');
--price是null


--price>99
INSERT INTO plsql101_product VALUES (
     'Small Widget', 99.5, 1, '28-2月-02');

INSERT INTO plsql101_product VALUES (
     'Small Widget', 1.95, -5, '28-2月-02');
--QUANTITY_ON_HAND<0

INSERT INTO plsql101_product VALUES (
     'Small Widget', 1.95, 1, '30-10月-2001');
--LAST_STOCK_DATE<'31-10月-2001'

--测试null是否可以输入last_stock_date。
INSERT INTO plsql101_product VALUES (
     'Anodized Framifier', 49, 5, NULL)
;
--OK.已创建 1 行
--LAST_STOCK_DATE没有检查null

练习:
参考constraint_all.txt,销售交易单.DOC 

建立超市管理系统,商品销售表:包括交易号,交易金额,售出时间,经手人
--要求商品售出时间必须在6点--20点之间。
--要求商品销售总价必须>0
--要求必须注明经手人的雇员号。
输入数据测试




----------------------------------------------------------------------- 

---------- disable_enable.txt ----------
/*
 * 范例名称:启用和禁止已有的约束条件
 * 文件名称:disable_enable.txt
 */

--如已建立reasonable_date constraint则不执行!
ALTER TABLE plsql101_product ADD ( 
     CONSTRAINT reasonable_date3 CHECK(
          TO_CHAR(last_stock_date, 'YYYY-MM-DD') >= '2001-12-31'
          )
     )
;


INSERT INTO plsql101_product VALUES (
     'Red Snaphoo', 1.95, 10, '30-12月-01')
;

ALTER TABLE plsql101_product DISABLE 
CONSTRAINT reasonable_date3;

INSERT INTO plsql101_product VALUES (
     'Red Snaphoo', 1.95, 10, '30-12月-01')
;

ALTER TABLE plsql101_product 
ENABLE CONSTRAINT reasonable_date3;
--ERROR 位于第 1 行:
--ORA-02293: 无法验证 (SCOTT.REASONABLE_DATE) - 违反检查约束条件
--已经在table 有错误数据。rollbak可以吗?

UPDATE plsql101_product 
SET    last_stock_date = '31-12月-02' 
WHERE  last_stock_date = '30-12月-01';

ALTER TABLE plsql101_product ENABLE CONSTRAINT reasonable_date3;



---------- alter_null.txt ----------
/*
 * 范例名称:更改和删除已有的约束条件
 * 文件名称:alter_null.txt
 */

ALTER TABLE plsql101_person MODIFY (first_name  NULL);

/*
--雇员,id,姓,名,雇佣日期
create table plsql101_person(
person_code varchar2(3),
first_name varchar2(15),
last_name varchar2(20),
hire_date date);
*/
--是什么实际含义?必须要求姓,名都知道!不许李某
ALTER TABLE plsql101_person MODIFY (first_name NOT NULL);

ALTER TABLE plsql101_person MODIFY (last_name not NULL);



---------- drop_constraint.txt ----------
/*
 * 范例名称:更改和删除已有的约束条件
 * 文件名称:drop_constraint.txt
 */
 
INSERT INTO plsql101_product VALUES (
     'Blue Snaphoo', 1.95, 10, '30-12月-01')
;

ALTER TABLE plsql101_product DROP 
CONSTRAINT reasonable_date3;

INSERT INTO plsql101_product VALUES (
     'Blue Snaphoo', 1.95, 10, '30-12月-01')
; 

---------- primary_key.txt ----------
/*
 * 范例名称:表的主键
 * 文件名称:primary_key.txt
 */
--when create table:在建立表时定义主键
drop table plsql101_product2;
CREATE TABLE plsql101_product2 (
     product_name     VARCHAR2(25) PRIMARY KEY,
     product_price    NUMBER(4,2),
     quantity_on_hand NUMBER(5,0),
     last_stock_date  DATE
     )
;
insert into plsql101_product2 values
('beer',10,10,TO_DATE('2002/02/02','YYYY/MM/DD'));

CREATE TABLE plsql101_product3 (
     product_name     VARCHAR2(25),
     product_price    NUMBER(4,2),
     quantity_on_hand NUMBER(5,0),

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -