?? script_62.txt
字號:
---------- chap02_create.txt ----------
/*
* 范例名稱:建立一個表
* 文件名稱:chap02_create.txt
*/
drop table test_1;
CREATE TABLE test_1 (
first_name CHAR(15),
last_name CHAR(20)
)
;
---------- chap02_insert.txt ----------
/*
* 范例名稱:插入記錄
* 文件名稱:chap02_insert.txt
*/
INSERT INTO test_1 VALUES ('張', '飛');
INSERT INTO test_1 VALUES ('關', '羽');
---------- chap02_delete.txt ----------
/*
* 范例名稱:刪除表
* 文件名稱:chap02_delete.txt
*/
delete from test_1;
select * from test_1;
---------- chap02_命名.txt ----------
/*
* 范例名稱:表和列的命名準則
* 文件名稱:chap02_命名.txt
*/
drop table sm_access;
create table access
(EmpID char(10) ,
access char(8));
ERROR 位于第 1 行:
ORA-00903: 無效表名
create table sm_access
(EmpID char(10) ,
access char(8));
ERROR 位于第 3 行:
ORA-00904: 無效列名
create table sm_access
(EmpID char(10) ,
sm_access char(8));
---------- CreateTable_sm_emp_sex.txt ----------
/*
* 范例名稱:建立sm_emp_sex表
* 文件名稱:CreateTable_sm_emp_sex.txt
*/
drop table sm_emp_sex;
create table sm_emp_sex
(EmpID char(10) ,
Name varchar2(10),
salary number(8,2),
TelNo char(8),
sex char(2));
insert into SM_EMP_sex values
('000000001','張飛',100,'62613546','男');
---------- chap02_char_vchar.txt ----------
/*
* 范例名稱:建立更復雜的表
* 文件名稱:chap02_char_vchar.txt
*/
CREATE TABLE SM_EMP_sex2 (
name VARCHAR2(20),
sex CHAR(1)
)
;
INSERT INTO SM_EMP_sex2 VALUES ('Tom', 'M');
INSERT INTO SM_EMP_sex2 VALUES ('Jane', 'F');
--INSERT INTO SM_EMP_sex2 VALUES ('Jane', '女');會怎樣?
SELECT * FROM SM_EMP_sex2;
DROP TABLE SM_EMP_sex2;
---------- chap02_char_number.txt ----------
/*
* 范例名稱:復雜表操作
* 文件名稱:chap02_char_number.txt
*/
create table sm_emp_salary(
name varchar3(10),
salary number(4,2));
--大家先預計一下結果
INSERT INTO sm_emp_salary VALUES ('Tom1', 1);
INSERT INTO sm_emp_salary VALUES ('Tom2', 2.5);
INSERT INTO sm_emp_salary VALUES ('Tom3', 50.75);
INSERT INTO sm_emp_salary VALUES ('Tom4', 99.99);
--大家再試試,總結一下
--INSERT INTO sm_emp_salary VALUES
('Tom4', 99.999);
--INSERT INTO sm_emp_salary VALUES
('Tom4', 9.999);
--INSERT INTO sm_emp_salary VALUES
('Tom4', 9.994);
--INSERT INTO sm_emp_salary VALUES ('Tom4', 100);
--INSERT INTO sm_emp_salary values('Tom1',99.994);結果如何?
--INSERT INTO sm_emp_salary values('Tom1',99.995);結果如何?
--INSERT INTO sm_emp_salary values('Tom1',98.995);結果如何?
SELECT * FROM sm_emp_salary;
--總結:
--小數部分四舍五入,整數不許超長
DROP TABLE sm_emp_salary;
---------- chap02_char_date.txt ----------
/*
* 范例名稱:日期的表操作
* 文件名稱:chap02_char_date.txt
*/
CREATE TABLE sm_emp_date (
name VARCHAR2(25),
birthday date
)
;
INSERT INTO sm_emp_date VALUES
('Tom1', '05-6月 -02');
drop table plsql101_purchase;
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
product_price NUMBER(4,2),
purchase_date DATE
)
;
INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, '5-11月-00');
--以下不再重復演示
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 2.5, '29-1月-01');
INSERT INTO plsql101_purchase VALUES
('Product Name 3', 50.75, '10-12月-02');
INSERT INTO plsql101_purchase VALUES
('Product Name 4', 99.99, '31-8月-03');
SELECT * FROM plsql101_purchase;
---------- CreateTable_sm_emp_NULL.txt ----------
/*
* 范例名稱:Null字段的表的建立和操作,insert語句
* 文件名稱:CreateTable_sm_emp_NULL.txt
*/
--先建立表,再在講解 insert語句后,測試。
create table sm_emp_null
(EmpID char(10) NOT NULL,
Name varchar2(10) NOT NULL,
salary number(8,2) NOT NULL,
TelNo char(8) NULL);
--測試表的null字段,insert 語句
insert into sm_emp_null
(empid,name,salary,telno)
values('000000008','Tom',100,'62652092');
--字段列表值列表完全匹配
insert into sm_emp_null
(EmpID,Name,salary)
values('000000002','Tom',101);
--insert ok 因為有INSERT INTO TABLE (FIELD LIST)子句,NULL許可的字段可以不寫值。
--自動插入null.
insert into sm_emp_null(EmpID,Name)
values('000000002','Tom');
ERROR 位于第 1 行:
ORA-01400: 無法將 NULL 插入
("SCOTT"."SM_EMP_NULL"."SALARY")
--not ok
--ERROR 位于第 1 行:
--ORA-01400: 無法將 NULL 插入 ("SYSTEM"."SM_EMP_NULL"."SALARY")
insert into sm_emp_null values
('000000001','Tom',100,Null);
insert into sm_emp_null values
('100000001','Tom',100,'65432189');
--insert ok。值列表包含所有字段的值時,
--可以省略字段列表
insert into sm_emp_null values
('000000001','Tom',100);
--not ok 因為沒有INSERT INTO TABLE
(FIELD LIST)子句。即使是null,也不能省!
--ERROR 位于第 1 行:
--ORA-00947: 沒有足夠的值
---------- chap02_plsql101_null.txt ----------
/*
* 范例名稱:Null的表操作
* 文件名稱:chap02_plsql101_null.txt
*/
--如果已建立表,先drop
DROP TABLE plsql101_purchase;
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25) NOT NULL,
product_price NUMBER(4,2) NOT NULL,
purchase_date DATE
)
;
--purchase_date何時采購到可以不知道
---------- chap02_plsql101_null_insert.txt ----------
/*
* 范例名稱:Null的表操作
* 文件名稱:chap02_plsql101_null_insert.txt
*/
INSERT INTO plsql101_purchase VALUES ('Product Name 1', 1, NULL);
--必須首先執行chap02_plsql101_null.txt ,建立表plsql101_purchase的相應結構。
SELECT * FROM plsql101_purchase;
--not null的字段insert null,會如何?
INSERT INTO plsql101_purchase VALUES
(NULL, 2.5, '29-1月-01');
INSERT INTO plsql101_purchase VALUES
('Product Name 3', null, '10-12月-02');
INSERT INTO plsql101_purchase VALUES
(NULL, NULL, '31-8月-03');
SELECT * FROM plsql101_purchase;
--帶有字段列表
INSERT INTO plsql101_purchase (product_name, product_price)
VALUES ('Product Name 2', 2.5);
INSERT INTO plsql101_purchase (product_name, product_price)
VALUES ('Product Name 3', 50.75);
--字段列表中字段順序可以改變,只要與值列表一致。
INSERT INTO plsql101_purchase (product_price, product_name)
VALUES (99.99, 'Product Name 4');
SELECT * FROM plsql101_purchase;
---------- default.txt ----------
/*
* 范例名稱:字段的default設定和插入數據
* 文件名稱:default.txt
*/
--先建立表,再在講解 insert語句后,測試。
--預計雇員戶口所在地地址的大部分是在北京,可以把北京這個值作為這個字段的缺省值。
--將數字型列的默認值指定為零
create table sm_emp_default
(EmpID char(10) ,
Name varchar2(10) ,
salary number(8,2) default 0,
TelNo char(8) ,
city varchar2(50) default '北京');
insert into sm_emp_default (empid,name)
values('0000000001','Tom');
--兩個default 值,一個null
insert into sm_emp_default (empid,name,salary)
values('0000000002','Tom2',100);
--沒有給字段city提供數據,而這個字段有一個缺省值’北京’。
--在這種情況下,當新記錄建立時會插入值’北京’。
insert into sm_emp_default
(empid,name,salary,telno)
values('0000000003','Tom3',199,'62652091');
insert into sm_emp_default
(empid,name,salary,telno,city)
values('0000000004','Tom4',199,'62652091','上海');
小結insert 與null default:參見小結_insert.ppt
---------- drop.txt ----------
/*
* 范例名稱:刪除表
* 文件名稱:drop.txt
*/
drop table sm_access;
drop table test_1;
select * from tab;
desc tab;
select * from tab where tname='SM_EMP_NULL';
--SM_ACCESS不存在
select * from tab where tname='SM_ACCESS’;
---------- chap02_plsql101_EnglishDate_Err.txt ----------
/*
* 范例名稱:日期的問題
* 文件名稱:chap02_plsql101_EnglishDate_Err.txt
*/
desc sm_emp_date;
--以下兩種方法插入日期類型err!
INSERT INTO sm_emp_date VALUES
('Tom2', '05-6-02');
INSERT INTO sm_emp_date VALUES
('Tom3', '05日-6月-02年');
INSERT INTO sm_emp_date VALUES
('Tom3', '05-6月-02');
DROP TABLE plsql101_purchase;
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
product_price NUMBER(4,2),
sales_tax NUMBER(4,2),
purchase_date DATE,
salesperson VARCHAR2(3)
)
;
INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, .08, '5-NOV-00', 'AB');
--ERROR 位于第 2 行:
--ORA-01843: 無效的月份
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 1, .08, '1日-8月-01', 'AB');
--ERROR 位于第 2 行:
--ORA-01861: 文字與格式字符串不匹配
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 1, .08, '1-8月-01年', 'AB');
--ERROR 位于第 2 行:
--ORA-01830: 日期格式圖片在轉換整個輸入字符串之前結束
INSERT INTO plsql101_purchase VALUES
('Product Name 2', 1, .08, '1-8-01', 'AB');
--ERROR 位于第 2 行:
--ORA-01843: 無效的月份
INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, .08, '1-8月-01', 'AB');
alter session set nls_language=american;
alter session set
nls_language='simplified chinese';
---------- select.txt ----------
/*
* 范例名稱:select記錄
* 文件名稱:select.txt
*/
--改變字段的順序,就可以改變選出的結果的順序
select empid ,name from sm_emp_default;
select name ,salary from sm_emp_default;
select * from sm_emp_default;
---------- math.txt ----------
/*
* 范例名稱:利用表中數據進行計算
* 文件名稱:math.txt
*/
drop table shangpin;
create table shangpin
(name varchar(20),
price number(8,2),
shuliang number(3));
insert into shangpin values ('電視',100,3);
insert into shangpin values ('豆腐',1,30);
--總價格 =價格*數量
select name ,price*shuliang from shangpin;
--注意有幾條結果
--總價格的10%
select name ,price*shuliang*0.1 from shangpin;
--練習.txt:一個更有商業含意的例子
--商品信息表
drop table sm_itemlist;
create table sm_itemlist
(
itemID char(5) ,--商品編號
itemname varchar(20) , --商品名稱
tax number(6,2) , --營業稅(按照銷售價的百分比計算)
purchase_price number(8,2) , --購入價格
sale_price number(8,2) , --銷售價格
amount number(4) , --庫存數量
unit varchar(6) --商品單位
);
insert into sm_itemlist values('00001','TCL彩電',0.03,800,1000,20,'臺');
insert into sm_itemlist values('00002','NEC彩電',0.03,900,1200,10,'臺');
insert into sm_itemlist values('00003','聯想電腦',0.05,9000,12000,10,'臺');
insert into sm_itemlist values('00004','海爾電腦',0.05,8000,10000,10,'臺');
--全部商品打8折,求出打折后各商品的價格
--求出各庫存商品占用的資金
--求出各庫存商品完全售出要交的稅
--求出各庫存商品完全售出的凈利潤
--求出各庫存商品的利潤率 = 利潤 / 投資
---------- chap02_plsql101_math_null.txt ----------
/*
* 范例名稱:利用表中數據進行計算
* 文件名稱:chap02_plsql101_math_null.txt
*/
--null insert!對比前面的結果!
insert into sm_itemlist
values('00005','海爾電腦null',null,8000,10000,10,'臺');
--全部商品打8折,求出打折后各商品的價格
select itemname , sale_price * 0.8 from sm_itemlist;
--見練習.txt
---------- chap02_plsql101_string.txt ----------
/*
* 范例名稱:利用表中數據進行計算--文本表達式
* 文件名稱:chap02_plsql101_string.txt
*/
--must after chap02_plsql101_math.txt
SELECT name || price || '元'
FROM shangpin;
SELECT name || price || '元 /(盒,臺)'
FROM shangpin;
--結果不太好,
--這正是sm_itemlist表中有unit(商品單位)的好處。
--設計時要考慮。
insert into sm_itemlist values('00005','豆腐',0.01,1,1.2,100,'盒');
select itemname || sale_price
|| '元 / ' || unit from sm_itemlist;
---------- sm_emp_promote.txt ----------
/*
* 范例名稱:插入多條記錄
* 文件名稱:sm_emp_promote.txt
*/
drop table sm_emp_promote;
create table sm_emp_promote
(PromEmpID char(10) ,
Name varchar2(10),
salary number(8,2)
);
--HOW???
--data prepare
--select * from sm_emp;
--insert into sm_emp(EmpID, name,salary,telno) values('000000003','劉備',1000,'67832324');
--insert into SM_EMP values('000000002','關羽',1000,'67832324');
insert into sm_emp_promote
(PromEmpID,Name,salary)
select EmpID,Name,salary
from sm_emp where Name in ('張飛','關羽','劉備');
select * from sm_emp_promote;
---------- chap02_plsql101_bieming.txt ----------
/*
* 范例名稱:利用別名
* 文件名稱:chap02_plsql101_bieming.txt
*/
SELECT name || price || '元' 單價
FROM shangpin;
SELECT name 商品, price || '元' 單價
FROM shangpin;
---------- sm_bieming.txt ----------
/*
* 范例名稱:利用別名
* 文件名稱:sm_bieming.txt
*/
SELECT empid 代號, name "姓 名" FROM sm_emp;
--為sm_itemlist商品表,指定單價別名
select itemname || sale_price || '元 / ' 單價 || unit from sm_itemlist;
--Error! 別名必須放在所選擇項的最后,必須對應查詢結果集中的一列。
--(itemname || sale_price || '元 / ')不為查詢結果集中的一列,需拼上unit才是一列。
select itemname || sale_price || '元 / ' || unit 單價 from sm_itemlist;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -