<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            oracle數據庫基礎知識

            時間:2024-07-26 03:00:02 Oracle認證 我要投稿

            oracle數據庫基礎知識

              20世紀約70年代 一間名為Ampex的軟件公司,正為中央情報局設計一套名叫Oracle的數據庫,埃里森是程序員之一。下面是小編整理的關于oracle數據庫基礎知識,歡迎大家參考!

            oracle數據庫基礎知識

              【1】oracle數據庫基礎知識

              第一篇 基本操作

              --解鎖用戶 alter user 用戶 account unlock;

              --鎖定用戶 alter user 用戶 account lock;

              alter user scott account unlock;

              --創建一個用戶yc 密碼為a create user 用戶名 identified by 密碼;

              create user yc identified by a;

              --登錄不成功,會缺少create session 權限,賦予權限的語法 grant 權限名 to 用戶;

              grant create session to yc;

              --修改密碼 alter user 用戶名 identified by 新密碼;

              alter user yc identified by b;

              --刪除用戶

              drop user yc ;

              --查詢表空間

              select *from dba_tablespaces;

              --查詢用戶信息

              select *from dba_users;

              --創建表空間

              create tablespace ycspace

              datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'

              size 2m

              autoextend on next 2m maxsize 5m

              offline ;

              --創建臨時表空間

              create temporary yctempspace

              tempfile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'

              size 2m

              autoextend on next 2m maxsize 5m

              offline ;

              --查詢數據文件

              select *from dba_data_files;

              --修改表空間

              --1、修改表空間的狀態

              --默認情況下是online,只有在非離線情況下才可以進行修改

              alter tablespace ycspace offline ; --離線狀態,不允許任何對象對該表空間的使用,使用情況:應用需要更新或維護的時候;數據庫備份的時候

              alter tablespace ycspace read write;--讀寫狀態

              alter tablespace ycspace online;

              alter tablespace ycspace read only; --只讀,可以查詢信息,可以刪除表空間的對象,但是不能創建對象和修改對象 。使用情況:數據存檔的時候

              --2、修改表空間的大小

              --增加文件的大小

              alter database datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' resize 10m;

              --增加數據文件

              alter tablespace ycspace add datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\add.dbf' size 2m;

              --刪除表空間的數據文件

              alter tablespace 表空間的名字 drop datafile 數據文件名;

              --刪除表空間

              drop tablespace ycspace;

              --刪除表空間且表空間中的內容和數據文件

              drop tablespace ycspace including contents and datafiles;

              --指定表空間 的 創建用戶的語法

              create user yc1 identified by a default tablespace ycspace temporary tablespace temp;

              --刪除用戶

              drop user yc1;

              --權限

              --賦予創建會話的權限

              grant create session to yc1;

              --創建一個表

              create table studentInfo(

              sid int,

              sname varchar2(10)

              );

              --賦予yc1用戶創建表的權限

              grant create table to yc1;

              --賦予yc1使用表空間的權限

              grant unlimited tablespace to yc1;

              --系統權限

              --對象權限

              --插入

              insert into studentInfo values (2,'abcd');

              --查詢

              select *from studentInfo;

              --修改

              update studentInfo set sid=1;

              --刪除

              delete studentInfo ;

              drop table studentInfo; --系統權限刪除表

              --賦權的語法

              --系統權限

              grant 權限名(系統權限或對象權限,角色,all) to 用戶(角色,public) with admin option;

              --對象權限

              grant 權限名(系統權限或對象權限,角色,all) on 用戶(角色,public) with grant option;

              --收權語法

              --系統權限

              revoke 權限名(系統權限或對象權限,角色,all) from 用戶(角色,public) with admin option;

              --對象權限

              revoke 權限名(系統權限或對象權限,角色,all) from 用戶(角色,public) with grant option;

              --賦予創建用戶的權限并且把這個權限傳遞下去,即yc1可以給別人賦權

              grant create user to yc1 with admin option;

              --收回權限,只能收回scottd ,不能收回由scott賦權的yc1的權限

              revoke create user from scott;

              --查看用戶所具有的權限

              select *from user_sys_privs;

              --對象權限詳解

              select * from emp;

              --使用yc1來查詢scott里面的emp表

              select * from scott.emp;

              --賦予yc1查詢emp表和插入的權限

              grant select on emp to yc1;

              grant insert on emp to yc1;

              grant update(empno,ename) on emp to yc1;

              grant delete on emp to yc1;

              --對scott的emp表添加數據

              insert into scott.emp(empno,ename) value(111,'acv');

              update scott.emp set ename='yc'where empno=111;

              --賦予查詢、賦予刪除、添加、修改

              grant select on 表名 to 用戶

              --grant select,delete,update,insert on 表名 to 用戶

              grant select,delete,update,insert on emp to yc1;

              grant all on dept to yc1; --all代表所有的對象權限

              select *from scott.emp;

              select *from scott.dept;

              insert into scott.dept values(50,'企事業文化部','bumen');

              --查看角色

              --dba:數據庫管理員,系統最高權限,可以創建數據結構(表空間等)

              --resource:可以創建實體(表、視圖),不可以創建數據庫的結構

              --connect:連接的權限,可以登錄數據庫,但是不可以創建實體和不可以創建數據庫結構

              select *from role_sys_privs;

              grant connect to yc1;

              --將可以連接的角色賦予給yc1,則yc1就是應該可以連接數據庫的人,類似于 create session 。

              create table StuInfos(sid int);

              select *from StuInfos;

              create table stuInfo(

              sid int primary key , --主鍵 primary key 非空且唯一 (主鍵約束)

              sname varchar2(10) not null, --姓名不能為空,(非空約束)

              sex char(2) check(sex in('男','女')), --(檢查約束),check,

              age number(3,1) constraint ck_stuInfo_age check(age>10 and age<100) , --也可以用varchar ;age between 10 and 100 ,在10和100之間,是一個閉區間

              tel number(15) unique not null, --唯一約束,

              address varchar2(200) default '什么鬼'

              )

              insert into stuInfo values(3,'大大','男',18,4321543,default);

              insert into stuInfo values(1,'張三','男',10);

              select *from stuInfo;

              drop table stuInfo;

              create table classInfo(

              cid int primary key, --班級id

              cname varchar2(20) not null unique --班級名

              )

              create table stuInfo(

              sid int primary key,

              sname varchar2(20),

              cid int constraint fofk_stuInfo_cid references classInfo(cid) on delete cascade

              )

              insert into classInfo values(1,'1班');

              insert into classInfo values(2,'2班');

              insert into classInfo values(3,'3班');

              insert into classInfo values(4,'4班');

              select *from classInfo;

              select *from stuInfo;

              insert into stuInfo values(1001,'張三',2);

              insert into stuInfo values(1002,'張四',4);

              update classInfo set cid=1 where cid=8;

              drop table stuInfo;--要先刪除這個

              drop table classInfo; --再刪除這個

              delete classInfo where cid=4 ;--同時刪除這兩個表中的4

              --刪除用戶的時候

              drop user yc1 [cascade] --刪除用戶的同時把它創建的對象都一起刪除

              --修改表

              --1、添加表中字段

              --alter table 表名 add 字段名 類型

              alter table classInfo add status varchar2(10) default '未畢業'

              --2、修改已有字段的數據類型

              --alter table 表名 modify 字段名 類型

              alter table classInfo modify status number(1)

              --3、修改字段名

              --alter table 表名 rename column 舊字段名 to 新的字段名

              alter table classInfo rename column cname to 班級名;

              --4、刪除字段

              --alter table 表名 drop column 字段名

              alter table classInfo drop column status ;

              --5、修改表名

              --rename 舊表名 to 新表名

              rename classInfo to 班級信息;

              --刪除表

              --1、截斷表效率高,每刪除一次會產生一次日志 2、截斷會釋放空間,而delete不會釋放空間

              --刪除表結構和數據

              drop table 表名;

              --刪除表中所有數據

              truncate table classInfo;

              delete classInfo;

              create table classInfo(

              cid int primary key, --班級id

              cname varchar2(20) not null unique , --班級名

              stasuts varchar2(100)

              );

              select *from classInfo;

              --數據的操作

              --增加數據語法

              --insert into 表名[(列名,....)] values (對應的數據的值);

              insert into classInfo values(1,'一班','未畢業');--需要按照表結構的順序插入

              insert into classInfo values(4,'六班','未畢業');

              insert into classInfo(cname,cid) values('二班',2); --需要按照括號中的順序插入,但是 not null primary key 必須插入的。

              insert into classInfo(cname,cid) values('三班',3);

              --刪除的語法

              --delete 表名 [where 條件]

              delete classInfo where cid>=2;

              --修改記錄的語法

              --update 表名 set [字段='值' ] [where 條件]

              update classInfo set cname='三班'; --會修改所有該字段

              update classInfo set cname='四班' where cid=1;

              update classInfo set cname='五班', stasuts ='未畢業' where cid=3;

              --alter table classInfo drop constraint SYS_C0011213;

              --添加多個時可以使用序列

              --用序列來做自動增長

              create sequence seq_classInfo_cid start with 1001 increment by 1;

              insert into classInfo values(seq_classInfo_cid.Nextval,'七班','未畢業');

              insert into classInfo values(seq_classInfo_cid.Nextval,'八班','未畢業');

              insert into classInfo values(seq_classInfo_cid.Nextval,'九班','未畢業');

              insert into classInfo values(seq_classInfo_cid.Nextval,'十班','未畢業');

              create table classInfo2(

              cid int primary key, --班級id

              cname varchar2(20) not null unique , --班級名

              stasuts varchar2(100)

              );

              select *from classInfo2;

              drop table classInfo2;

              insert into classInfo2 select *from classInfo;

              insert into classInfo(cname,cid) select cname,cid from classInfo;

              alter table classInfo2 drop constraint SYS_C0011213;

              select seq_classInfo_cid.nextval from dual;

              select seq_classInfo_cid.Currval from dual;

              --直接創建一個新表,并拿到另一個表其中的數據

              create table newTable as select cname,cid from classInfo;

              create table newTable1 as select *from classInfo;

              select *from newTable;

              select *from newTable1;

              insert into newTable1 values(1008,'dg','');

              第二篇:高級操作

              直接在使用scott登陸,進行查詢操作

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

              --簡單查詢

              select *from emp;

              select empno as id,ename as name from emp;

              select empno 編號,ename 姓名 from emp;

              --去除重復

              select job from emp;

              select distinct job from emp;

              select job,deptno from emp;

              select distinct job,deptno from emp;

              --字符串的連接

              select '員工編號是' ||empno || '姓名是' ||ename ||'工作是'||job from emp;

              --乘法

              select ename,sal *12 from emp;

              --加減乘除都類似

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

              --限定查詢

              --獎金大于1500的

              select *from emp where sal>1500;

              --有獎金的

              select *from emp where comm is not null;

              --沒有獎金的

              select *from emp where comm is null;

              --有獎金且大于1500的

              select *from emp where sal>1500 and comm is not null;

              --工資大于1500或者有獎金的

              select *from emp where sal>1500 or comm is not null;

              --工資不大于1500且沒獎金的

              select *from emp where sal<=1500 and comm is null;

              select *from emp where not (sal >1500 or comm is not null);

              --工資大于1500但是小于3000的

              select *from emp where sal>1500 and sal<3000;

              select *from emp where sal between 1500 and 3000; --between是閉區間,是包含1500和3000的

              --時間區間

              select *from emp where hiredate between to_date('1981-01-01','yyyy-MM-dd') and to_date('1981-12-31','yyyy-MM-dd');

              --查詢雇員名字

              select *from emp where ename='SMITH';

              --查詢員工編號

              select *from emp where empno=7369 or empno=7499 or empno=7521;

              select *from emp where empno in(7369,7499,7521);

              select *from emp where empno not in(7369,7499,7521); --排除這3個,其他的都可以查

              --模糊查詢

              select *from emp where ename like '_M%'; --第2個字母為M的

              select *from emp where ename like '%M%';

              select *from emp where ename like '%%'; --全查詢

              --不等號的用法

              select * from emp where empno !=7369;

              select *from emp where empno<> 7369;

              --對結果集排序

              --查詢工資從低到高

              select *from emp order by sal asc;

              select *from emp order by sal desc,hiredate desc; --asc 當導游列相同時就按第二個來排序

              --字符函數

              select *from dual;--偽表

              select 2*3 from dual;

              select sysdate from dual;

              --變成大寫

              select upper('smith') from dual;

              --變成小寫

              select lower('SMITH') from dual;

              --首字母大寫

              select initcap('smith') from dual;

              --連接字符串

              select concat('jr','smith') from dual; --只能在oracle中使用

              select 'jr' ||'smith' from dual; --推薦使用

              --截取字符串

              select substr('hello',1,3) from dual; --索引從1開始

              --獲取字符串長度

              select length('hello') from dual;

              --字符串替換

              select replace('hello','l','x') from dual; --把l替換為x

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

              --通用函數

              --數值函數

              --四舍五入

              select round(12.234) from dual;--取整的四舍五入 12

              select round (12.657,2) from dual; --保留2位小數

              select trunc(12.48) from dual;--取整

              select trunc(12.48675,2) from dual; --保留2位小數

              --取余

              select mod(10,3) from dual;--10/3取余 =1

              --日期函數

              --日期-數字=日期 日期+數字=日期 日期-日期=數字

              --查詢員工進入公司的周數

              select ename,round((sysdate -hiredate)/7) weeks from emp;

              --查詢所有員工進入公司的月數

              select ename,round(months_between(sysdate,hiredate)) months from emp;

              --求三個月后的日期

              select add_months(sysdate,6) from dual;

              select next_day(sysdate,'星期一') from dual; --下星期

              select last_day(sysdate) from dual; --本月最后一天

              select last_day(to_date('1997-1-23','yyyy-MM-dd')) from dual;

              --轉換函數

              select ename ,

              to_char(hiredate,'yyyy') 年,

              to_char(hiredate,'mm')月,

              to_char(hiredate,'dd') 日

              from emp;

              select to_char(10000000,'$999,999,999') from emp;

              select to_number('20')+to_number('80') from dual; --數字相加

              --查詢員工年薪

              select ename,(sal*12+nvl(comm,0)) yearsal from emp; --空和任何數計算都是空

              --Decode函數,類似if else if (常用)

              select decode(1,1,'one',2,'two','no name') from dual;

              --查詢所有職位的中文名

              select ename, decode(job,

              'CLERK',

              '業務員',

              'SALESMAN',

              '銷售',

              'MANAGER',

              '經理',

              'ANALYST',

              '分析員',

              'PRESIDENT',

              '總裁',

              '無業')

              from emp;

              select ename,

              case

              when job = 'CLERK' then

              '業務員'

              when job = 'SALESMAN' then

              '銷售'

              when job = 'MANAGER' then

              '經理'

              when job = 'ANALYST' then

              '分析員'

              when job = 'PRESIDENT' then

              '總裁'

              else

              '無業'

              end

              from emp;

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

              --多表查詢

              select *from dept;

              select *from emp,dept order by emp.deptno;

              select *from emp e,dept d where e.deptno=d.deptno;

              select e.*,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;

              --查詢出雇員的編號,姓名,部門編號,和名稱,地址

              select e.empno,e.ename,e.deptno,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno;

              --查詢出每個員工的上級領導

              select e.empno,e.ename,e1.empno,e1.ename from emp e,emp e1 where e.mgr=e1.empno;

              select e.empno,e.ename,d.dname

              from emp e,dept d ,salgrade s, emp e1

              where e.deptno=d.deptno

              and e.sal between s.losal

              and s.hisal

              and e.mgr=e1.empno;

              select e.empno,e.ename,e1.empno,e1.ename from emp e,emp e1 where e.mgr=e1.empno(+) ;

              --外連接

              select *from emp order by deptno;

              --查詢出每個部門的員工

              /*

              分析:部門表是全量表,員工表示非全量表,

              在做連接條件時,全量表在非全量表的哪端,那么連接時全量表的連接條件就在等號哪斷

              */

              --左連接

              select * from dept d,emp e where d.deptno=e.deptno(+) order by e.deptno;

              --右連接

              select * from emp e,dept d where e.deptno(+)=d.deptno order by e.deptno;

              -----------------------------作業

              --查詢與smith相同部門的員工姓名和雇傭日期

              select *from emp t

              where t.deptno= (select e.deptno from emp e where e.ename='SMITH')

              and t.ename<> 'SMITH';

              --查詢工資比公司平均工資高的員工的員工號,姓名和工資

              select t.empno,t.ename,t.sal

              from emp t

              where t.sal>(select avg(sal) from emp);

              --查詢各部門中工資比本部門平均工資高的員工號,姓名和工資

              select t.empno,t.ename,t.sal

              from emp t, (select avg(e.sal) avgsal,e.deptno from emp e group by e.deptno) a

              where t.sal>a.avgsal and t.deptno=a.deptno;

              --查詢姓名中包含字母u的員工在相同部門的員工的員工號和姓名

              select t.empno,t.ename from emp t

              where t.deptno in( select e.deptno from emp e where e.ename like '%U%')

              and t.empno not in ( select e.empno from emp e where e.ename like '%U%') ;

              --查詢管理者是king的員工姓名和工資

              select t.ename,t.sal from emp t

              where t.mgr in

              (select e.empno from emp e where e.ename='KING');

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

              ---sql1999語法

              select *from emp join dept using(deptno) where deptno=20;

              select *from emp natural join dept;

              select *from emp e join dept d on e.deptno=d.deptno;

              select *from dept;

              select *from dept d left join emp e on d.deptno=e.deptno;

              select *from dept d,emp e where d.deptno=e.deptno(+);

              ---分組

              select count(empno) from emp group by deptno;

              select deptno,job,count(*) from emp group by deptno,job order by deptno;

              select *from EMP for UPDATE;

              --group by 后面有的字段,select后才可以有,group by后面沒有的字段,select后面絕對不能有

              select d.dname, d.loc, count(e.empno) from emp e, dept d where e.deptno = d.deptno group by d.dname, d.loc ;

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

              --子查詢

              select *from emp t where t.sal>(select *from emp e where e.empno=7654);

              select rownum ,t.* from emp t where rownum <6 ;

              --pagesize 5

              select *from(select rownum rw,a.* from (select *from emp ) a where rownum <16) b where b.rw>10;

              select *from (select *from emp) where rownum>0;

              --索引

              create index person_index on person(p_name);

              --視圖

              create view view2 as select *from emp t where t.deptno=20;

              select *from view2;

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

              --pl/sql

              --plsql是對sql語言的過程化擴展

              -----

              declare

              begin

              dbms_output.put_line('hello world');

              end;

              -------

              declare

              age number(3);

              marry boolean := true; --boolean不能直接輸出

              pname varchar2(10) := 're jeknc';

              begin

              age := 20;

              dbms_output.put_line(age);

              if marry then

              dbms_output.put_line('true');

              else

              dbms_output.put_line('false');

              end if ;

              dbms_output.put_line(pname);

              end;

              --常量和變量

              --引用變量,引用表中的字段的類型

              Myname emp.ename%type; --使用into來賦值

              declare

              pname emp.ename%type;

              begin

              select t.ename into pname from emp t where t.empno=7369;

              dbms_output.put_line(pname);

              end;

              --記錄型變量

              Emprec emp%rowtype; --使用into來賦值

              declare

              Emprec emp%rowtype;

              begin

              select t.* into Emprec from emp t where t.empno=7369;

              dbms_output.put_line(Emprec.empno || ' '||Emprec.ename||' '||Emprec.job);

              end;

              --if分支

              語法1:

              IF 條件 THEN 語句1;

              語句2;

              END IF;

              語法2:

              IF 條件 THEN 語句序列1;

              ELSE 語句序列 2;

              END IF;

              語法3:

              IF 條件 THEN 語句;

              ELSIF 條件 THEN 語句;

              ELSE 語句;

              END IF;

              --1

              declare

              pname number:=#

              begin

              if pname = 1 then

              dbms_output.put_line('我是1');

              else

              dbms_output.put_line('我不是1');

              end if;

              end;

              --2

              declare

              pname number := #

              begin

              if pname = 1 then

              dbms_output.put_line('我是1');

              elsif pname = 2 then

              dbms_output.put_line('我是2');

              else

              dbms_output.put_line('我不是12');

              end if;

              end;

              --loop循環語句

              語法2:

              Loop

              EXIT [when 條件];

              ……

              End loop

              --1

              declare

              pnum number(4):=0;

              begin

              while pnum < 10 loop

              dbms_output.put_line(pnum);

              pnum := pnum + 1;

              end loop;

              end;

              --2 (最常用的循環)

              declare

              pnum number(4):=0;

              begin

              loop

              exit when pnum=10;

              pnum:=pnum+1;

              dbms_output.put_line(pnum);

              end loop;

              end;

              --3

              declare

              pnum number(4);

              begin

              for pnum in 1 .. 10 loop

              dbms_output.put_line(pnum);

              end loop;

              end;

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

              --游標

              語法:

              CURSOR 游標名 [ (參數名 數據類型,參數名 數據類型,...)] IS SELECT 語句;

              例如:cursor c1 is select ename from emp;

              declare

              cursor c1 is

              select * from emp;

              emprec emp%rowtype;

              begin

              open c1;

              loop

              fetch c1

              into emprec;

              exit when c1%notfound;

              dbms_output.put_line(emprec.empno || ' ' || emprec.ename);

              end loop;

              close c1; --要記得關閉游標

              end;

              --------例外

              --異常,用來增強程序的健壯性和容錯性

              -- no_data_found (沒有找到數據)

              --too_many_rows (select …into語句匹配多個行)

              --zero_divide ( 被零除)

              --value_error (算術或轉換錯誤)

              --timeout_on_resource (在等待資源時發生超時)

              --寫出被0除的例外程序

              declare

              pnum number(4) := 10;

              begin

              pnum := pnum / 0;

              exception

              when zero_divide then

              dbms_output.put_line('被0除了');

              when value_error then

              dbms_output.put_line('算術或轉換錯誤');

              when others then

              dbms_output.put_line('其他異常');

              end;

              --自定義異常

              --No_data exception;

              --要拋出raise no_data;

              declare

              cursor c1 is

              select * from emp t where t.deptno = 20;

              no_data exception;

              emprec emp%rowtype;

              begin

              open c1;

              loop

              fetch c1

              into emprec;

              if c1%notfound then

              raise no_data;

              else

              dbms_output.put_line(emprec.empno || ' ' || emprec.ename);

              end if;

              end loop;

              close c1;

              exception

              when no_data then

              dbms_output.put_line('無員工');

              when others then

              dbms_output.put_line('其他異常');

              end;

              --存儲過程

              語法:

              create [or replace] PROCEDURE 過程名[(參數名 in/out 數據類型)]

              AS

              begin

              PLSQL子程序體;

              End;

              或者

              create [or replace] PROCEDURE 過程名[(參數名 in/out 數據類型)]

              is

              begin

              PLSQL子程序體;

              End 過程名;

              -----創建一個存儲過程helloworld

              create or replace procedure helloworld is

              begin

              dbms_output.put_line('hello world');

              end helloworld;

              ------創建一個漲工資的

              create or replace procedure addsal(eno in emp.empno%type) is

              emprec emp%rowtype;

              begin

              select * into emprec from emp t where t.empno = eno;

              update emp t set t.sal = t.sal + 100 where t.empno = eno;

              dbms_output.put_line('漲工資前是' || emprec.sal || ',漲工資后是' ||

              (emprec.sal + 100));

              end addsal;

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

              --java代碼調用存儲過程和函數

              --存儲過程

              --

              create or replace procedure acc_yealsal(eno in emp.empno%type,yearsal out number) is

              pcomm emp.comm%type;

              psal emp.sal%type;

              begin

              select t.sal,t.comm into psal,pcomm from emp t where t.empno=eno;

              yearsal :=psal*12 +nvl(pcomm,0);

              end;

              ----存儲函數

              create or replace function 函數名(Name in type, Name in type, .. .)

              return 數據類型 is

              結果變量 數據類型;

              begin

              return(結果變量);

              end函數名;

              --存儲函數計算年薪

              create or replace function accf_yearsal(eno in emp.empno%type)

              return number is

              Result number;

              psal emp.sal%type;

              pcomm emp.comm%type;

              begin

              select t.sal, t.comm into psal, pcomm from emp t where t.empno = eno;

              Result := psal * 12 + nvl(pcomm, 0);

              return(Result);

              end accf_yearsal;

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

              ---觸發器

              --觸發語句:增刪改:

              語法:

              CREATE [or REPLACE] TRIGGER 觸發器名

              {BEFORE | AFTER}

              {DELETE | INSERT | UPDATE [OF 列名]}

              ON 表名

              [FOR EACH ROW [WHEN(條件) ] ]

              begin

              PLSQL 塊

              End 觸發器名

              ---插入一個新員工則觸發

              create or replace trigger insert_person

              after insert on emp

              begin

              dbms_output.put_line('插入新員工');

              end;

              select *from emp;

              insert into emp values(1001,'李四','管理',7902,sysdate,100,100,20);

              --raise_application_error(-20001, '不能在非法時間插入員工')

              --==============================================================================

              SQL> @ E:\powerDesigner\A_腳本\user.sql --導入腳本文件

              select *from H_USER ;

              insert into h_user valuer(sequserid.nextval,'a','a',sysdate,'北京',1);

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

              --數據庫建模

              --一對多:多的一端是2,箭頭指向的是表1,即少的一端

              --在實體類中一的一端的實體類有多的一端的實體類的集合屬性

              --使用powerDesiger進行數據庫建模,然后將數據導入,導入到plsql中進行使用

              --------------------連接遠程數據庫

              --方法1,修改localhost的地址

              ORCL =

              (DESCRIPTION =

              (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

              (CONNECT_DATA =

              (SERVER = DEDICATED)

              (SERVICE_NAME = orcl.lan)

              )

              )

              --方法2

              --或者直接在登陸界面在database中輸入遠程數據庫的ip地址和端口號進行遠程登陸

            【oracle數據庫基礎知識】相關文章:

            Oracle數據庫基礎知識:SELECT語句01-23

            oracle數據庫基本語句02-08

            Oracle數據庫認證層次08-29

            Oracle數據庫SELECT語句10-25

            Oracle數據庫語句大全12-21

            Oracle 數據庫查詢小技巧10-17

            oracle數據庫培訓課程大綱08-07

            Oracle數據庫基本知識09-13

            ORACLE數據庫操作基本語句09-15

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院