网上商城购物系统(2)

来源:互联网 发布:qt5串口编程详解 编辑:程序博客网 时间:2024/04/30 09:24

详细内容请看☟☟☟

网上商城购物系统(1)

这是前面的完整的语句

-----------------------------创建表-----------------------------------------------------------------------------------------------tb_province表(省份数据字典)CREATE TABLE tb_province  (    provinceID   NUMBER NOT NULL PRIMARY KEY,    provinceName VARCHAR2(30) NOT NULL  );--自动增量CREATE sequence province_seq increment BY 1 start with 1001 minvalue 1001 maxvalue 1999;CREATE OR REPLACE TRIGGER province_tri before  INSERT ON tb_province FOR EACH row BEGIN  SELECT province_seq.Nextval INTO:new.provinceID FROM sys.dual;END;INSERT INTO tb_province  (provinceName  )VALUES  ('123'  );INSERT INTO tb_province  (provinceName  )VALUES  ('123345'  );-----------------------------------------------------------tb_city表(城市数据字典)CREATE TABLE tb_city  (    cityID     NUMBER NOT NULL PRIMARY KEY , --自动增量    provinceID NUMBER NOT NULL ,    cityName   VARCHAR2(30) NOT NULL,    FOREIGN KEY(provinceID) REFERENCES tb_province(provinceID)  );CREATE sequence city_seq increment BY 1 start with 2001 minvalue 2001 maxvalue 2999;CREATE OR REPLACE TRIGGER city_tri before  INSERT ON tb_city FOR EACH row BEGIN  SELECT city_seq.Nextval INTO:new.cityID FROM sys.dual;END;-------------------------------------------------------------tb_user表(用户信息表)CREATE TABLE tb_user  (    userID     NUMBER NOT NULL PRIMARY KEY ,--自动增量    name       VARCHAR2(20) NOT NULL UNIQUE,    password   VARCHAR2(30) NOT NULL,    email      VARCHAR2(30),    provinceID NUMBER,    cityID     NUMBER ,    telephone  CHAR(11),    sex        CHAR(3) DEFAULT '男',    age        NUMBER,    birthday   DATE,    money      NUMBER DEFAULT 0,    photo      VARCHAR2(500),    dsp        VARCHAR2(200),    qq         VARCHAR2(15),    msn        VARCHAR2(50),    loveBook   VARCHAR2(200),    loveMusic  VARCHAR2(200),    loveMovie  VARCHAR2(200),    loveSport  VARCHAR2(200),    loveGame   VARCHAR2(200),    FOREIGN KEY(cityID) REFERENCES tb_city(cityID)  );CREATE sequence user_seq increment BY 1 start with 3001 minvalue 3001 maxvalue 3999;CREATE OR REPLACE TRIGGER user_tri before  INSERT ON tb_user FOR EACH row BEGIN  SELECT user_seq.Nextval INTO:new.userID FROM sys.dual;END;-----------------------------------------------------tb_productType表(商品类型表)CREATE TABLE tb_productType  (    productTypeID   NUMBER NOT NULL PRIMARY KEY ,--自动增加(1)    productTypeName VARCHAR2(30) NOT NULL  );CREATE sequence productType_seq increment BY 1 start with 4001 minvalue 4001 maxvalue 4999;CREATE OR REPLACE TRIGGER productType_tri before  INSERT ON tb_productType FOR EACH row BEGIN  SELECT productType_seq.Nextval INTO:new.productTypeID FROM sys.dual;END;----------------------------------------------------------tb_product表(商品信息表)CREATE TABLE tb_product  (    productID   NUMBER NOT NULL PRIMARY KEY ,--自动增加(1)    userID      NUMBER NOT NULL ,    productName VARCHAR2(50) NOT NULL,    typeID      NUMBER NOT NULL ,    price       NUMBER NOT NULL,    photo       VARCHAR2(50),    information VARCHAR2(200),    FOREIGN KEY(userID) REFERENCES tb_user(userID),    FOREIGN KEY(TypeID) REFERENCES tb_productType(productTypeID)  );CREATE sequence product_seq increment BY 1 start with 5001 minvalue 5001 maxvalue 5999;CREATE OR REPLACE TRIGGER product_tri before  INSERT ON tb_product FOR EACH row BEGIN  SELECT product_seq.Nextval INTO:new.productID FROM sys.dual;END;-----------------------------------------------------tb_productSize表(商品型号表)CREATE TABLE tb_productSize  (    productSizeID NUMBER NOT NULL PRIMARY KEY ,--自动递增(1)    productSize   VARCHAR2(20) NOT NULL,    productID     NUMBER NOT NULL ,    FOREIGN KEY(productID) REFERENCES tb_product(productID)  );CREATE sequence productSize_seq increment BY 1 start with 6001 minvalue 6001 maxvalue 6999;CREATE OR REPLACE TRIGGER productSize_tri before  INSERT ON tb_productSize FOR EACH row BEGIN  SELECT productSize_seq.Nextval INTO:new.productSizeID FROM sys.dual;END;--tb_productColor表(商品颜色表)CREATE TABLE tb_productColor  (    productColorID NUMBER NOT NULL PRIMARY KEY,--自动增量(1)    productColor   VARCHAR2(20) NOT NULL,    stockpile      NUMBER NOT NULL,    productSizeID  NUMBER NOT NULL ,    FOREIGN KEY(productSizeID) REFERENCES tb_productSize(productSizeID)  );CREATE sequence productColor_seq increment BY 1 start with 7001 minvalue 7001 maxvalue 7999;CREATE OR REPLACE TRIGGER productColor_tri before  INSERT ON tb_productColor FOR EACH row BEGIN  SELECT productColor_seq.Nextval INTO:new.productColorID FROM sys.dual;END;--------------------------------------------------------------tb_order表(订单表)CREATE TABLE tb_order  (    orderID         NUMBER NOT NULL PRIMARY KEY ,--自动增加    toID            NUMBER NOT NULL ,    colorID         NUMBER NOT NULL ,    productID       NUMBER NOT NULL ,    address         VARCHAR2(100) NOT NULL,    telephone       CHAR(11) NOT NULL,    orderState      NUMBER NOT NULL,    COUNT           NUMBER NOT NULL,    price           NUMBER NOT NULL,    orderDate       DATE NOT NULL,    consignmentDate DATE NOT NULL,    FOREIGN KEY(toid) REFERENCES tb_user(userID),    FOREIGN KEY(colorid) REFERENCES TB_PRODUCTCOLOR(productColorID) ,    FOREIGN KEY(productID) REFERENCES TB_PRODUCT(productID)  );CREATE sequence order_seq increment BY 1 start with 8001 minvalue 8001 maxvalue 8999;CREATE OR REPLACE TRIGGER order_tri before  INSERT ON tb_order FOR EACH row BEGIN  SELECT order_seq.Nextval INTO:new.orderID FROM sys.dual;END;---------------------------------------------------tb_userAccount表(用户资金流水表)CREATE TABLE tb_userAccount  (    userAccountID NUMBER NOT NULL PRIMARY KEY ,--自动递增(1)    userID        NUMBER NOT NULL ,    orderID       NUMBER NOT NULL ,    type          NUMBER NOT NULL,    TIME          DATE NOT NULL,    FOREIGN KEY(userID) REFERENCES tb_user(userID),    FOREIGN KEY(orderID) REFERENCES tb_order(orderID)  );CREATE sequence userAccount_seq increment BY 1 start with 9001 minvalue 9001 maxvalue 9999;CREATE OR REPLACE TRIGGER userAccount_tri before  INSERT ON tb_userAccount FOR EACH row BEGIN  SELECT userAccount_seq.Nextval INTO:new.userAccountID FROM sys.dual;END;-------------------------------------------------------------tb_review表(评论表)CREATE TABLE tb_review  (    reviewID NUMBER NOT NULL PRIMARY KEY ,--自动递增(1)    review   VARCHAR2(200) NOT NULL,    isReply  NUMBER DEFAULT 0 NOT NULL CHECK(isReply=0  OR isReply                                        =1),    isDel NUMBER DEFAULT 0 NOT NULL CHECK(isDel     =0  OR isDel                                          =1),    senderID  NUMBER NOT NULL ,    productID NUMBER NOT NULL,    addTime   DATE NOT NULL,    replyID   NUMBER ,    FOREIGN KEY(senderID) REFERENCES tb_user(userID),    FOREIGN KEY(productID ) REFERENCES tb_product(productID)  );CREATE sequence review_seq increment BY 1 start with 33001 minvalue 33001 maxvalue 33999;CREATE OR REPLACE TRIGGER review_tri before  INSERT ON tb_review FOR EACH row BEGIN  SELECT review_seq.Nextval INTO:new.reviewID FROM sys.dual;END;--------------------------插入数据-----------------------------------------------/*基础数据(商品类型+省份+城市)添加*//*tb_productType表添加商品类型*/INSERTINTO tb_productType  (    productTypeName  )  VALUES  (    '小米6手机'  );INSERT INTO tb_productType  (productTypeName  ) VALUES  ('小米1手机'  );INSERT INTO tb_productType  (productTypeName  ) VALUES  ('小米2手机'  );INSERT INTO tb_productType  (productTypeName  ) VALUES  ('小米3手机'  );INSERT INTO tb_productType  (productTypeName  ) VALUES  ('小米4手机'  );INSERT INTO tb_productType  (productTypeName  ) VALUES  ('小米5手机'  );/*tb_province表添加省份名称*/INSERT INTO tb_province  (provinceName  ) VALUES  ('山东'  );INSERT INTO tb_province  (provinceName  ) VALUES  ('山西'  );INSERT INTO tb_province  (provinceName  ) VALUES  ('辽宁'  );INSERT INTO tb_province  (provinceName  ) VALUES  ('四川'  );INSERT INTO tb_province  (provinceName  ) VALUES  ('河南'  );/*tb_city表给山东省添加城市名称*/INSERTINTO tb_city  (    provinceID,    cityName  )  VALUES  (    1006,    '济南'  );INSERT INTO tb_city  (provinceID,cityName  ) VALUES  (1006,'青岛'  );INSERT INTO tb_city  (provinceID,cityName  ) VALUES  (1006,'潍坊'  );/*用户数据(注册+信息完善)添加*//*tb_user表添加用户信息*/INSERTINTO tb_user VALUES  (    NULL,    '丁兆元',    '123',    '123@123.com',    1006,2013,    '12345678',    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL  );INSERTINTO tb_user VALUES  (    NULL,    '李一',    '123',    '12332@12333.com',    1006,2014,    '123',    '男',    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL  );INSERTINTO tb_user VALUES  (    NULL,    '李二',    '123',    '1332@2333.com',    1008,    NULL,    '1232323',    '男',    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL,    NULL  );/*商品信息(商品信息+型号+颜色)添加*//*tb_product表添加商品信息*/INSERTINTO tb_product VALUES  (    NULL,    3001,    '小米6手机',    4007,2399,    '网上',    '双摄'  );INSERT INTO tb_product VALUES  (NULL,3001,'小米5手机',4012,1999,'网上商城','窄边框'  );INSERT INTO tb_product VALUES  (NULL,3002,'小米6手机',4007,2399,'小米商城','双摄'  );/*tb_productSize表添加商品型号*/INSERT INTO tb_productSize VALUES  (1,'miui6',5001  );INSERT INTO tb_productSize VALUES  (2,'miui5',5002  );INSERT INTO tb_productSize VALUES  (3,'miui6',5003  );/*tb_productColor表添加商品型号*/INSERTINTO tb_productColor VALUES  (    1,    '白',    300,6001  );INSERT INTO tb_productColor VALUES  (2,'黑',600,6002  );INSERT INTO tb_productColor VALUES  (2,'蓝',11,6003  );--tb_order 订单表--tb_useraccount 用户资金流水表(只允许新增记录,不允许修改、删除)--tb_review 评论表-------------------------------操作-------------------------------------------/*删除用户****/SELECT *FROM tb_user;DECLARE  t_username VARCHAR2(20);BEGIN  t_username:='&请输入要删除的用户名';  DELETE FROM tb_user WHERE name=t_username;END;/*商品信息查询*//*单表查询*//*查询tb_product表中商品id为的商品信息*/DECLARE  pid tb_product.productid%type;  pro tb_product%rowtype;BEGIN  pid:=&请输入商品id;  SELECT * INTO pro FROM tb_product WHERE productid=pid;  dbms_output.put_line('商品id:'||pro.productid||'  卖家id:'|| pro.userid||'  商品名:'||pro.productname ||'  商品类型id:'||pro.typeid||'  商品价格:'|| pro.price||'  商品图片路径:'||pro.photo ||'  商品简介:'||pro.information );EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;/*查询tb_productSize表中商品id为的型号信息*/DECLARE  pid tb_productSize.productid%type;  pro tb_productSize%rowtype;BEGIN  pid:=&请输入商品id;  SELECT * INTO pro FROM tb_productSize WHERE productid=pid;  dbms_output.put_line('商品型号id:'||pro.productSizeID ||'  商品型号:'||pro.productSize||'  商品id:'||pro.productID );EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;/*查询tb_productColor表中商品型号id为、、的颜色与库存信息*/DECLARE  pid tb_productColor.productsizeid%type;  pro tb_productColor%rowtype;BEGIN  pid:=&请输入商品型号id;  SELECT * INTO pro FROM tb_productColor WHERE productsizeid=pid;  dbms_output.put_line('商品颜色id:'||pro.productColorID ||'  商品颜色:'||pro.productColor||'  商品库存:'|| pro.stockpile||'  商品型号id:'||pro.productSizeID );EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;/*多表查询*//*用户在商城以商品类型 查询一件商品的名称*/DECLARE  name  VARCHAR2(30);  pname VARCHAR2(50);  CURSOR cur1(typename VARCHAR2)  IS    SELECT productname    FROM tb_product    WHERE typeid IN      ( SELECT productTypeID FROM tb_productType WHERE productTypeName=typename      );BEGIN  name:='&商品类型';  OPEN cur1(name);  LOOP    FETCH cur1 INTO pname;    EXIT  WHEN cur1%notfound;    dbms_output.put_line('商品名称:'||pname);  END LOOP;  CLOSE cur1;END;/*用户在商城以商品名称查询一件商品的所有信息*//*本来dzy用户没有创建视图的权限,在system用户下对他授权 grant create view to dzy;*/CREATE VIEW t_mation ASSELECT productcolorid,  productcolor,  stockpile,  c.productsizeid,  productsize,  s.productid,  userid,  productname,  typeid,  price,  photo,  informationFROM tb_productcolor cJOIN tb_productsize sON c.productsizeid=s.productsizeidJOIN tb_product pON p.productid=s.productid;DECLARE  m t_mation%rowtype;  pname VARCHAR2(50);  CURSOR cur_t (product_name IN VARCHAR2)  IS    SELECT * FROM t_mation WHERE productname=product_name ;BEGIN  pname:='&商品名称';  OPEN cur_t(pname);  LOOP    FETCH cur_t INTO m;    EXIT  WHEN cur_t%notfound;    dbms_output.put_line( '商品id:'||m.productid|| '  商品名字:'||m.productname|| '  商品颜色id:'||m.productcolorid|| '  商品颜色:'||m.productcolor|| '  商品库存:'||m.stockpile|| '  商品型号id:'||m.productsizeid|| '  商品型号:'||m.productsize|| '  商品卖家id:'||m.userid|| '  商品类型id:'||m.typeid|| '  商品价格:'||m.price|| '  商品图片路径:'||m.photo|| '  商品简介:'||m.information );  END LOOP;  CLOSE cur_t;EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;/*用户信息查询*//*用户在商城可以查询已知用户(或卖家)的基本信息*/DECLARE  pid tb_user.userID%type;  us tb_user%rowtype;BEGIN  pid:=&请输入用户id;  SELECT * INTO us FROM tb_user WHERE userID=pid;  dbms_output.put_line( '用户id:'||us.userid|| '  用户名:'||us.name|| '  邮箱:'||us.email|| '  所在省份id:'||us.provinceid|| '  所在城市id:'||us.cityid|| '  手机号:'||us.telephone|| '  性别:'||us.sex|| '  年龄:'||us.age|| '  生日:'||us.birthday );EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;--------------------------------------------------------------------------------/*用户下订单并确认付款(应用事务)*/-------------------------------------------------/*用户***想要购买卖家***的产品颜色-大小-产品名*/DECLARE  o_userid NUMBER;  /*定义变量,用于存储流水表的用户(买家)ID*/  o_productcolorid NUMBER;  /*定义变量,用于存储本次订单的颜色ID*/  o_productid NUMBER;  /*定义变量,用于存储本次订单的物品ID*/  o_count     NUMBER;  o_stockpile NUMBER;  o_price     NUMBER;  /*定义变量,用于存储本次订单的物品单价*/  o_money NUMBER;  o_phone CHAR(11);  n       NUMBER;  --o_toid number;              /*定义变量,用于存储本次订单的买家ID*/BEGIN  o_userid:='&买家id' ;  /*用户****下订单*/  o_productcolorid:='&颜色id' ;  o_productid     :='&商品id';  o_count         :='&数量';  SELECT price INTO o_price FROM tb_product WHERE productID=o_productid ;  SELECT TELEPHONE INTO O_PHONE FROM TB_USER WHERE USERID=O_USERID;  INSERT  INTO tb_order VALUES    (      1,      o_userid,      o_productcolorid,      o_productid,      '默认地址',      o_phone,      0,      o_count,      (o_count*o_price),      sysdate,      (sysdate+3)    );  /*用户****将订单信息填入到tb_order表中*/  /*orderState订单状态为用户选择填入下订单 0表示"确认订单"*/  SELECT stockpile  INTO o_stockpile  FROM tb_productColor  WHERE productColorID=o_productcolorid;  IF o_stockpile      >o_count THEN    BEGIN      UPDATE tb_productColor      SET stockpile=stockpile-o_count        /*下订单后减少商品库存*/      WHERE productColorID=o_productcolorid;    END;  ELSE    raise_application_error(-20002, '库存不足');  END IF;  SELECT money INTO o_money FROM tb_user WHERE userID=o_userid;  IF o_money>o_count*o_price THEN    BEGIN      UPDATE tb_user      SET money=money-o_count*o_price        /*确认付款后减少用户余额*/      WHERE userID=o_userid;    END;  ELSE    raise_application_error(-20002, '账户余额不足');  END IF;  SELECT order_seq.currval INTO n FROM dual;  UPDATE tb_order  SET orderState=1    /*将用户付款的订单状态改为已付款  1代表"已付款"*/  WHERE orderID=n;  INSERT INTO tb_useraccount VALUES    (1,o_userid,n,o_productcolorid,sysdate    );  /*用户账户上的钱转账完成后建立用户资金流水表一条买家购买商品支出记录*/  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;/*卖家对订单信息进行修改*/--------------------------------------------------------/*假设买家***想修改商品的颜色,则需要应用事务,对相应颜色的库存进行修改*//*修改信息是各项信息均为可选择项,如不想修改某项信息,则选择以前的选项,但是会将数据重复的修改一次,即用相同的数据来覆盖之前的数据*//*除此之外卖家发货后可将订单状态改为发货*/DECLARE  d_orderid          NUMBER;  d_address          VARCHAR2(100);  d_telephone        CHAR(11);  d_orderState       NUMBER;  d_colorid          NUMBER;  d_price            NUMBER;  d_count            NUMBER;  d_price_befo       NUMBER;  old_productColorID NUMBER;BEGIN  d_orderid :=&订单id;  /*修改tb_order表中的送货地址*/  d_address :='&地址';  UPDATE tb_order SET address=d_address WHERE orderID=d_orderid;  dbms_output.put_line('送货地址已修改');  /*修改tb_order表中的联系方式*/  d_telephone:='&联系方式';  UPDATE tb_order SET telephone=d_telephone WHERE orderID=d_orderid;  dbms_output.put_line('联系方式已修改');  /*修改tb_order表中的状态*/  d_orderState:=&修改状态;  UPDATE tb_order SET orderstate=d_orderState WHERE orderID=d_orderid; --若卖家因故不能发货,但已付款则卖家可修改订单状态为'延后'  dbms_output.put_line('订单状态已修改');  /*修改tb_order表中的商品颜色*/  SELECT colorid  INTO old_productColorID  FROM tb_order  WHERE orderID=d_orderid;  d_colorid   :=&颜色id;  UPDATE tb_order SET colorID=d_colorid WHERE orderID=d_orderid;  SELECT COUNT INTO d_count FROM tb_order WHERE orderID=d_orderid;  UPDATE tb_productColor    /*修改颜色后要将之前选择的颜色库存加一再讲修改后的颜色库存减一*/  SET stockpile       =stockpile-d_count  WHERE productColorID=d_orderid;  UPDATE tb_productColor  SET stockpile       =stockpile+d_count  WHERE productColorID=old_productColorID;  dbms_output.put_line('商品颜色已修改');  /*修改tb_order表中的商品总价*/  SELECT price INTO d_price_befo FROM tb_order WHERE orderID=d_orderid;  d_price:=&总价;  UPDATE tb_order SET price=d_price WHERE orderID=d_orderid; --若和买家商议后买家同意降价,但商品信息上还是不修改的,就可以在订单总价上修改,付款后卖家修改总价,差价打回买家账户余额内  /*将与之前的差价加回买家账户余额内*/  UPDATE tb_user  SET money   =money+d_price_befo-d_price  WHERE userid=    (SELECT toid FROM tb_order WHERE orderid=d_orderid    ) ;  /*修改tb_user表中买家的账户余额*/  dbms_output.put_line('商品总价已修改');  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;/*订单完成进行转账*/--------------------------------------------------------DECLARE  /*定义变量,用于存储流水表的用户ID*/  d_userid   NUMBER;  d_sellerid NUMBER;  d_price    NUMBER;  d_orderid  NUMBER;BEGIN  d_orderid:='&订单号';  /*买家收到商品后,修改tb_order表中的状态(4=完成)*/  UPDATE tb_order  SET orderState=4  WHERE orderID =d_orderid;  dbms_output.put_line('订单状态:完成');  /*订单状态为'完成'后建立用户资金流水表一条卖家出售商品收入记录*/  SELECT userid  INTO d_sellerid  FROM tb_product  WHERE productid=    (SELECT productid FROM tb_order WHERE orderID=d_orderid    );  INSERT INTO tb_userAccount VALUES    (1,d_sellerid ,d_orderid,1,sysdate    );  dbms_output.put_line('用户资金流水表插入一条卖家出售商品收入记录');  /*交易成功后卖家账户余额增加*/  SELECT price  INTO d_price  FROM tb_order  WHERE orderID=d_orderid;  UPDATE tb_user SET money=money+d_price WHERE userid=d_sellerid;  dbms_output.put_line('卖家账户余额增加');  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;/*货物丢件进行退款*/-------------------------------------------------------------/*前提条件:订单为发货状态,但物流出现丢件情况,由物流赔偿卖家,卖家确认丢件情况发生后,可进行退款操作*/DECLARE  /*定义变量,用于存储流水表的用户ID*/  d_sellerid NUMBER;  d_orderid  NUMBER;  d_userid   NUMBER;  d_price    NUMBER;BEGIN  d_orderid:='&订单号';  /*卖家确认商品丢件后,修改tb_order表中的状态(5=撤销)*/  UPDATE tb_order  SET orderState=5  WHERE orderID =d_orderid;  dbms_output.put_line('订单状态:撤销');  /*订单状态为'撤销'后建立用户资金流水表一条买家商品退款收入记录*/  SELECT toid  INTO d_userid  FROM tb_order  WHERE orderID =d_orderid;  INSERT INTO tb_userAccount VALUES    (1,d_userid ,d_orderid,1,sysdate    );  dbms_output.put_line('用户资金流水表插入一条买家商品退款收入记录');  /*撤销成功后买家账户余额恢复*/  SELECT price  INTO d_price  FROM tb_order  WHERE orderID=d_orderid;  UPDATE tb_user SET money=money+d_price WHERE userid=d_userid;  dbms_output.put_line('买家账户余额恢复');  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;--视图/*多表查询*/----------------------------------------------------------------/*用户在商城以商品类型查询一件商品的名称*/CREATE VIEW TNAME_PNAME_VIEW ASSELECT *FROM TB_PRODUCT,  TB_PRODUCTTYPEWHERE tb_product.typeid=TB_PRODUCTTYPE.PRODUCTTYPEID;DECLARE  name  VARCHAR2(30);  pname VARCHAR2(50);  CURSOR cur1(typename VARCHAR2)  IS    SELECT productname FROM TNAME_PNAME_VIEW WHERE productTypeName=typename;BEGIN  name:='&商品类型';  OPEN cur1(name);  LOOP    FETCH cur1 INTO pname;    EXIT  WHEN cur1%notfound;    dbms_output.put_line('商品名称:'||pname);  END LOOP;  CLOSE cur1;END;--/*用户在商城以商品名称查询一件商品的所有信息*/CREATE VIEW t_mation ASSELECT productcolorid,  productcolor,  stockpile,  c.productsizeid,  productsize,  s.productid,  userid,  productname,  typeid,  price,  photo,  informationFROM tb_productcolor cJOIN tb_productsize sON c.productsizeid=s.productsizeidJOIN tb_product pON p.productid=s.productid;DECLARE  m t_mation%rowtype;  pname VARCHAR2(50);  CURSOR cur_t (product_name IN VARCHAR2)  IS    SELECT * FROM t_mation WHERE productname=product_name ;BEGIN  pname:='&商品名称';  OPEN cur_t(pname);  LOOP    FETCH cur_t INTO m;    EXIT  WHEN cur_t%notfound;    dbms_output.put_line( '商品id:'||m.productid|| '  商品名字:'||m.productname|| '  商品颜色id:'||m.productcolorid|| '  商品颜色:'||m.productcolor|| '  商品库存:'||m.stockpile|| '  商品型号id:'||m.productsizeid|| '  商品型号:'||m.productsize|| '  商品卖家id:'||m.userid|| '  商品类型id:'||m.typeid|| '  商品价格:'||m.price|| '  商品图片路径:'||m.photo|| '  商品简介:'||m.information );  END LOOP;  CLOSE cur_t;EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;--/*用户信息查询*/--/*用户在商城可以查询已知用户(或卖家)的基本信息*/DECLARE  pid tb_user.userID%type;  us tb_user%rowtype;BEGIN  pid:=&请输入用户id;  SELECT * INTO us FROM tb_user WHERE userID=pid;  dbms_output.put_line( '用户id:'||us.userid|| '  用户名:'||us.name|| '  邮箱:'||us.email|| '  所在省份id:'||us.provinceid|| '  所在城市id:'||us.cityid|| '  手机号:'||us.telephone|| '  性别:'||us.sex|| '  年龄:'||us.age|| '  生日:'||us.birthday );EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('没有发现您要找的数据!');WHEN OTHERS THEN  dbms_output.put_line('其他异常!');END;/*用户登录(应用存储过程)*/CREATE OR REPLACE PROCEDURE login(    p_name     IN VARCHAR2,    p_password IN VARCHAR2)AS  t_password VARCHAR2(30);BEGIN  SELECT password INTO t_password FROM tb_user WHERE name=p_name;  IF t_password=p_password THEN    dbms_output.put_line('欢迎登陆!');  ELSE    dbms_output.put_line('密码错误!');  END IF;EXCEPTIONWHEN no_data_found THEN  dbms_output.put_line('该用户尚未注册!');WHEN OTHERS THEN  dbms_output.put_line('未知错误!');END login;BEGIN  login('丁兆元','123');END;/*create procedure proc_land@resultName int = 0, --定义为表示用户名错误@resultPassWord int =0, --定义为表示密码错误@userName nvarchar(10) = '***',@PassWord nvarchar(30) = 'jhc123'asselect @resultName = COUNT(1) from tb_user where name=@userName         --只要表中有输入的用户名则为表示用户名存在select @resultPassWord = COUNT(1) from tb_user where name=@userName and [password]=@PassWord --若存在的这个用户的信息里的密码等与输入的密码则为表示密码核对无误beginif @resultName = 1 and @resultPassWord = 1print '用户登录成功!'else if @resultName = 0print '用户名错误!'else if @resultPassWord = 0print '密码错误!'end*/