--创建stuInfo 表
create Table stuInfo(
stuName Varchar2(20) Not null,
stuId number(30)
)
--向 stuInfo 添加一个列
alter Table stuInfo add(
stuNo number(20)
)
--将 stuInfo 删除一个列
alter Table stuInfo drop(
stuNo
)
--删除表
Drop Table stuInfo;
-----------------------------------------------------------------------
select * from stuinfo
--插入stuInfo 表数据
insert into stuInfo values('晓昊','001')
insert into stuInfo values('晓昊','078')
insert into stuInfo values('晓东','036')
insert into stuInfo values('晓昊','056')
--选择无重复的行
select distinct s.stuname from stuInfo s --distinct
--使用别名
select s.stuname as "员 工 编 号" from stuInfo s order by s.stuid desc
--复制表
create Table stuInfo2 as select * from stuInfo --复制表,然后查询,其数据会全部过来
create Table stuInfo3 as select * from stuInfo where 1=3 --当他不成立的时候,只会创建表的结构,没有数据
--统计效率
select count(*) from stuInfo s group by s.stuname,s.stuid having(count(s.stuname||s.stuid)<2)
select count(1) from stuInfo s --两者的结果集一样,前者的效率比后者低
--查询rowID
select s.*,s.rowid from stuInfo s
--去除不重复的数据 重复大于1个的 ^_^
select s.stuname,s.stuid from stuInfo s group by s.stuname,s.stuid having(count(s.stuname||s.stuname)>1)
--查询当前用户所有表数量大于100 万表的信息
select * from user_all_tables a where a.num_rows>10000000
--建立一个还原点
savepoint a;
--还原到建立的那个还原点
rollback to savepoint a;
------------------------------------------------------------------------
--创建序列
create sequence mysequence
start with 10 --从10开始
increment by 5 --间隔为5
maxvalue 1000 --最大值
nocycle --不循环
cache 30;--缓存30个序列
insert into empt values(mysequence.nextval,sys_guid())
select * from empt
select mysequence.currval from dual;--当前结尾的位置
--删除序列
drop sequence mysequence;
select sys_guid() from dual;
-------------------------------------------------------------------------
select * from scott.emp;
--创建一个同义词 相当于加了一层保护壳
create or replace synonym myhack for scott.emp
select * from myhack
--删除同义词
drop synonym myhack
--创建索引
create index newindex on empt(id) --位图索引
create index newindex on empt(id) reverse --反向索引
--------------------------------------------------------------------------
DECLARE --声明部分
v_name VARCHAR2(20); --变量
v_rate NUMBER(7,2);
c_rate_incr Constant NUMBER(7,2):=1.10; -- 常量 赋初始化值的方式: (:=)
e_comm_is_null EXCEPTION;
BEGIN --执行部分
SELECT ename,sal*c_rate_incr INTO v_name,v_rate FROM emp WHERE empno='7788';
IF v_name IS NULL THEN
RAISE e_comm_is_null;--触发异常 raise关键字+ 异常处理名
END IF;
v_name:='SCOTT';
DBMS_OUTPUT.put_line('姓名:'||v_name||'工资:'||v_rate);
EXCEPTION --声明异常处理
WHEN NO_DATA_FOUND THEN --如果出现NO_DATA_FUOUND
DBMS_OUTPUT.PUT_LINE('没有数据'); --那么显示“没有数据”
WHEN e_comm_is_null THEN
DBMS_OUTPUT.PUT_LINE('名字为空');
WHEN OTHERS THEN --其他异常处理。
DBMS_OUTPUT.PUT_LINE('其他异常,请联系管理员');
END;
select * from emp where empno='7788'for update ;
DECLARE
v_empno emp.empno%TYPE :=7788; --单列
v_emprow emp%ROWTYPE;--小南瓜
BEGIN
SELECT * INTO v_emprow FROM emp WHERE emp.empno=v_empno;
DBMS_OUTPUT.PUT_LINE('姓名:'||v_emprow.ename||'工资:'||v_emprow.sal);
END;
--【判断控制语句】
IF<布尔表达式> THEN
执行方法
END IF;
---------IF ELSE--------------------
IF<布尔表达式> THEN
执行方法1
ELSE
执行方法2
END IF;
-- IF 后面跟的一定是布尔表达式
-- 有IF 一定有THEN,THEN 后面跟的是执行方法
-- 一定要有END结束
-- ELSIF 【没有E】
-----------嵌套ELSIF (注意没有E )-------------------------
IF<布尔表达式> THEN
执行方法1
ELSIF <布尔表达式> THEN
执行方法2
ELSIF <布尔表达式> THEN
执行方法3
ELSE
执行方法4
END;
------------【CASE】------------
CASE 条件表达式
WHEN 条件表达式1 THEN
执行方法
WHEN 条件表达式2 THEN
执行方法
END CASE;
--【循环控制语句】
LOOP
要执行的语句
EXIT WHEN<条件> --满足此条件退出。
END LOOP;
----------WHILE 循环----------------
WHILE <布尔表达式> LOOP --布尔表达式控制循环退出
要执行的语句 --一般在循环中需要改变布尔表达式的值以便于退出循环
END LOOP;
----------FOR 循环----------------
FOR 循环计数器 IN 范围 LOOP
要执行的语句
END LOOP;
--------------------------------游标---------------------------------------
--游标
DECLARE
v_name emp.ename%type; --定义一个列,保证类型一致
v_sal emp.sal%type;
CURSOR EMP_cursor IS --声明一个游标
SELECT ename,sal FROM emp;
BEGIN
OPEN EMP_cursor;--打开游标
LOOP
FETCH EMP_cursor INTO v_name,v_sal;--提取游标(关键字:FETCH)并将游标中的数据放入变量中
EXIT WHEN EMP_cursor%NOTFOUND;--显示游标属性,通过此属性判断是否退出循环
DBMS_OUTPUT.PUT_LINE('第'||EMP_cursor%ROWCOUNT||'个雇员'||v_name||v_sal);
END LOOP;
CLOSE EMP_cursor;--关闭游标
END;
----------------------------存储过程------------------------------------
--存储过程 (只声明类型,不声明长度)
CREATE OR REPLACE PROCEDURE add_emp(
eno NUMBER,
e_name VARCHAR2,
ejob VARCHAR2 DEFAULT 'CLERK'
)
IS
BEGIN
INSERT INTO emp(empno,ename,job) VALUES (eno,e_name,ejob);
END;
select * from emp
EXECUTE add_emp(111,'test','222');
BEGIN
add_emp(1121,'test','1131');
END;
create Table stuInfo(
stuName Varchar2(20) Not null,
stuId number(30)
)
--向 stuInfo 添加一个列
alter Table stuInfo add(
stuNo number(20)
)
--将 stuInfo 删除一个列
alter Table stuInfo drop(
stuNo
)
--删除表
Drop Table stuInfo;
-----------------------------------------------------------------------
select * from stuinfo
--插入stuInfo 表数据
insert into stuInfo values('晓昊','001')
insert into stuInfo values('晓昊','078')
insert into stuInfo values('晓东','036')
insert into stuInfo values('晓昊','056')
--选择无重复的行
select distinct s.stuname from stuInfo s --distinct
--使用别名
select s.stuname as "员 工 编 号" from stuInfo s order by s.stuid desc
--复制表
create Table stuInfo2 as select * from stuInfo --复制表,然后查询,其数据会全部过来
create Table stuInfo3 as select * from stuInfo where 1=3 --当他不成立的时候,只会创建表的结构,没有数据
--统计效率
select count(*) from stuInfo s group by s.stuname,s.stuid having(count(s.stuname||s.stuid)<2)
select count(1) from stuInfo s --两者的结果集一样,前者的效率比后者低
--查询rowID
select s.*,s.rowid from stuInfo s
--去除不重复的数据 重复大于1个的 ^_^
select s.stuname,s.stuid from stuInfo s group by s.stuname,s.stuid having(count(s.stuname||s.stuname)>1)
--查询当前用户所有表数量大于100 万表的信息
select * from user_all_tables a where a.num_rows>10000000
--建立一个还原点
savepoint a;
--还原到建立的那个还原点
rollback to savepoint a;
------------------------------------------------------------------------
--创建序列
create sequence mysequence
start with 10 --从10开始
increment by 5 --间隔为5
maxvalue 1000 --最大值
nocycle --不循环
cache 30;--缓存30个序列
insert into empt values(mysequence.nextval,sys_guid())
select * from empt
select mysequence.currval from dual;--当前结尾的位置
--删除序列
drop sequence mysequence;
select sys_guid() from dual;
-------------------------------------------------------------------------
select * from scott.emp;
--创建一个同义词 相当于加了一层保护壳
create or replace synonym myhack for scott.emp
select * from myhack
--删除同义词
drop synonym myhack
--创建索引
create index newindex on empt(id) --位图索引
create index newindex on empt(id) reverse --反向索引
--------------------------------------------------------------------------
DECLARE --声明部分
v_name VARCHAR2(20); --变量
v_rate NUMBER(7,2);
c_rate_incr Constant NUMBER(7,2):=1.10; -- 常量 赋初始化值的方式: (:=)
e_comm_is_null EXCEPTION;
BEGIN --执行部分
SELECT ename,sal*c_rate_incr INTO v_name,v_rate FROM emp WHERE empno='7788';
IF v_name IS NULL THEN
RAISE e_comm_is_null;--触发异常 raise关键字+ 异常处理名
END IF;
v_name:='SCOTT';
DBMS_OUTPUT.put_line('姓名:'||v_name||'工资:'||v_rate);
EXCEPTION --声明异常处理
WHEN NO_DATA_FOUND THEN --如果出现NO_DATA_FUOUND
DBMS_OUTPUT.PUT_LINE('没有数据'); --那么显示“没有数据”
WHEN e_comm_is_null THEN
DBMS_OUTPUT.PUT_LINE('名字为空');
WHEN OTHERS THEN --其他异常处理。
DBMS_OUTPUT.PUT_LINE('其他异常,请联系管理员');
END;
select * from emp where empno='7788'for update ;
DECLARE
v_empno emp.empno%TYPE :=7788; --单列
v_emprow emp%ROWTYPE;--小南瓜
BEGIN
SELECT * INTO v_emprow FROM emp WHERE emp.empno=v_empno;
DBMS_OUTPUT.PUT_LINE('姓名:'||v_emprow.ename||'工资:'||v_emprow.sal);
END;
--【判断控制语句】
IF<布尔表达式> THEN
执行方法
END IF;
---------IF ELSE--------------------
IF<布尔表达式> THEN
执行方法1
ELSE
执行方法2
END IF;
-- IF 后面跟的一定是布尔表达式
-- 有IF 一定有THEN,THEN 后面跟的是执行方法
-- 一定要有END结束
-- ELSIF 【没有E】
-----------嵌套ELSIF (注意没有E )-------------------------
IF<布尔表达式> THEN
执行方法1
ELSIF <布尔表达式> THEN
执行方法2
ELSIF <布尔表达式> THEN
执行方法3
ELSE
执行方法4
END;
------------【CASE】------------
CASE 条件表达式
WHEN 条件表达式1 THEN
执行方法
WHEN 条件表达式2 THEN
执行方法
END CASE;
--【循环控制语句】
LOOP
要执行的语句
EXIT WHEN<条件> --满足此条件退出。
END LOOP;
----------WHILE 循环----------------
WHILE <布尔表达式> LOOP --布尔表达式控制循环退出
要执行的语句 --一般在循环中需要改变布尔表达式的值以便于退出循环
END LOOP;
----------FOR 循环----------------
FOR 循环计数器 IN 范围 LOOP
要执行的语句
END LOOP;
--------------------------------游标---------------------------------------
--游标
DECLARE
v_name emp.ename%type; --定义一个列,保证类型一致
v_sal emp.sal%type;
CURSOR EMP_cursor IS --声明一个游标
SELECT ename,sal FROM emp;
BEGIN
OPEN EMP_cursor;--打开游标
LOOP
FETCH EMP_cursor INTO v_name,v_sal;--提取游标(关键字:FETCH)并将游标中的数据放入变量中
EXIT WHEN EMP_cursor%NOTFOUND;--显示游标属性,通过此属性判断是否退出循环
DBMS_OUTPUT.PUT_LINE('第'||EMP_cursor%ROWCOUNT||'个雇员'||v_name||v_sal);
END LOOP;
CLOSE EMP_cursor;--关闭游标
END;
----------------------------存储过程------------------------------------
--存储过程 (只声明类型,不声明长度)
CREATE OR REPLACE PROCEDURE add_emp(
eno NUMBER,
e_name VARCHAR2,
ejob VARCHAR2 DEFAULT 'CLERK'
)
IS
BEGIN
INSERT INTO emp(empno,ename,job) VALUES (eno,e_name,ejob);
END;
select * from emp
EXECUTE add_emp(111,'test','222');
BEGIN
add_emp(1121,'test','1131');
END;