標籤:trim sql語言 備份 mon and 多表串連 unlock sql編程 小數
卸載Oracle
1.以Administrators group身份登陸windows系統。
2.通過Oracle installer 卸載所有orcle產品及組件。
3.停掉Oracle Service服務。
4.刪除%ORACLE_base%檔案和SYSTEM_DRIVE:program files下的oracle檔案。5.刪除SYSTEM_DRIVE:Documents and SettingsAll Users「開始」菜單程式中的oracle項。6.開啟註冊表:到HKEY_CLASSES_ROOT下,刪除以Oracle,ORA,ORCL開頭的鍵;
到HKEY_LOCAL_MACHINESOFTWARE下,刪除ORACLE鍵和Apache Group鍵;
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices下,刪除以Oracle開頭的鍵;
到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices EventlogApplication下,刪除以Oracle開頭的鍵;
到HKEY_CURRENT_USER下,刪除Oracle鍵;
到HKEY_CURRENT_USERSOFTWAREORACLE下,刪除以Oracle 或 Orcl開頭的鍵(如果有的話);關閉註冊表,重啟電腦。
7.開啟系統系統內容變數(我的電腦->右鍵->系統屬性->進階->環境變數),在PATH中刪除所有以%ORACLE_HOME%開始的項。
8.重啟電腦。
Oracle錯誤:動態執行表不可訪問,本會話自動統計被禁止grant select on v_$statname to scott; grant select on v_$sesstat to scott; grant select on v_$session to scott; grant select on v_$mystat to scott;
關閉產生備份檔案選項-備份-檔案-禁止
Win10下安裝Oracle11g 不滿足配置解決方案在裝置檔案的/stage/svu檔案夾上面找到檔案 cvu_prereq.xml檔案,添加Windows 10對應欄位即可(64位選擇64-bit)。
<OPERATING_SYSTEM RELEASE="6.2">
<VERSION VALUE="3"/>
<ARCHITECTURE VALUE="32-bit"/>
<NAME VALUE="Windows 10"/>
<ENV_VAR_LIST>
<ENV_VAR NAME="PATH" MAX_LENGTH="1023" />
</ENV_VAR_LIST>
</OPERATING_SYSTEM>
SQL語言基礎1.資料查詢語言 DQL,select 2.資料操縱語言DML (insert,update,delete) 3.事務控制語言TCL (commit,rollback,savepoint) 4.資料定義語言 (Data Definition Language)DDL(create,alter,drop) 5 資料控制語言DCL(grant,revoke)
執行個體模式SCOTT預設賬戶/密碼:scott/tigeralter user scott account unlock;
複雜查詢 --檢索指定的列select job,ename,empno from emp;--帶有表達是的select子句select sal*(1+0.2),sal from emp; --顯示不重複的記錄select distinct job from emp; --比較篩選 <> =select empno,ename,sal from emp where sal>1000; select empno,ename,JOB from emp;select empno,ename,sal from emp where sal <>all(3000,950,800); --特殊關鍵字篩選--like 模糊查詢select empno,ename,job from emp where JOB like ‘S%‘; --IN --varcharselect empno,ename,job from emp where job in(‘PRESIDENT‘,‘MANAGER‘,‘ANALYST‘);--NOT INselect empno,ename,job from emp where job not in(‘PRESIDENT‘,‘MANAGER‘,‘ANALYST‘) ; --BETWEEN -numer ,interselect empno,ename,sal from emp where sal between 2000 and 3000;--NOT BETWEENselect empno,ename,sal from emp where sal NOT between 2000 and 3000;--IS NULL/ is not nullselect * from emp where comm is NOT null; --邏輯篩選--and ,or,not 關係 於 -或 --非 select empno,ename,sal from emp where sal>=2000 and sal<=3000 ; select empno,ename,sal from emp where sal<2000 or sal>3000 ; --分組查詢select deptno,job from emp group by deptno,job order by deptno ; select deptno as 部門編號,avg(sal) as 平均工資 from emp group by deptno; select deptno as 部門編號,avg(sal) as 平均工資 from emp group by deptno having avg(sal)>2000; --group by 子條件 having --排序查詢Order by; desc:逆序 asc預設select deptno,empno,ename from emp order by deptno,EMPNO; 多表關聯查詢--內串連select e.empno as 員工編號, e.ename as 員工名稱, d.dname as 部門 from emp e inner join dept d on e.deptno=d.deptno; --左外串連insert into emp(empno,ename,job) values(9527,‘EAST‘,‘SALESMAN‘); select e.empno,e.ename,e.job,d.deptno,d.dname from emp e left join dept don e.deptno=d.deptno; --右外串連select e.empno,e.ename,e.job,d.deptno,d.dname from emp e right join dept don e.deptno=d.deptno; --完全串連select e.empno,e.ename,e.job,d.deptno,d.dname from emp e full join dept don e.deptno=d.deptno; --自然串連(共有的屬性,會去除重複列)select empno,ename,job,dname from emp natural join dept where sal>2000; /*自串連(self join)是SQL語句中經常要用的串連方式,使用自串連可以將自身表的一個鏡像當作另一個表來對待,從而能夠得到一些特殊的資料。在emp中的每一個員工都有自己的mgr(經理),並且每一個經理自身也是公司的員工,自身也有自己的經理。*/ select?em2.enname??管理者,em1.enname??下屬員工from?emp?em1?left?join?emp?em2?on?em1.mgr=em2.empno?order?by?em1.mgr; /*交叉串連不帶WHERE 子句,它返回被串連的兩個表所有資料行的笛卡爾積,返回到結果集合中的資料行數等於第一個表中符合查詢條件的資料行數乘以第二個表中符合查詢條件的資料行數*/ select count(*) from dept cross join emp;
Oracle常用系統函數--ASCII(c)函數 CHR(I) 小寫比大寫 大32 小寫a 97 小寫z 122select ascii(‘Z‘) A,ascii(‘y‘) a,ascii(‘D‘) D,ascii(‘#‘) space from dual; select chr(90),chr(122),chr(68),chr(32) s from dual; --CONCAT(s1,s2) 函數 字串拼接select concat(‘Hello‘,‘ World!‘) information from dual; --INiTCAP(S)函數 返回每個單詞的第一個字母大寫,其他小寫 select initcap(‘gOod lUck For yOu!‘) information from dual; --在Oracle 11g中 ,從第三個字元開始查詢字串“1”第2次出現的位置instr(‘s1‘,‘s2‘,‘1‘,‘1‘)select instr(‘o1racle 11g‘,‘1‘,3,2) abc from dual; --2個參數預設值都是1 --lower(s)小寫 upper(‘‘) 大寫 函數 --LTRIM(s1,s2)-刪除字串s1左邊的字串s2,RTRIM(S1,S2)-刪除字串s1右邊的s2, --TRIM(s1,s2)函數select ltrim(‘####East####‘,‘#‘),rtrim(‘East ‘),trim(‘#‘ from ‘####East###‘) from dual; --- create or replace### DROP TABLE "SIMON"."T_LOG"; CREATE TABLE "SIMON"."T_LOG"---除了表對象,其他都可以用functions, procedures, packages, types, synonyms, trigger and views --REPLACE(s1,s2[,s3])函數select replace(‘Bad Luck Bad Girl‘,‘Bad‘,‘Great‘) from dual; --SUBSTR(s,i,[j])函數*** 字串截取函數select substr(‘Message-Pretty-Box‘,9,6) from dual; --CEIL(n)函數 返回大於或等於 數值n的最小整數select ceil(7.8),ceil(7),ceil(-7.3) from dual; --Round(n1,n2)函數 返回該函數舍入小數點右邊n2位的n1的值select round(3.1415926,2) from dual; --日期和時間函數select sysdate as 系統日期 from dual; --在當前的日期下加6個月select ADD_MONTHS(sysdate,6) from dual; --轉化類函數 ***select sysdate as 預設格式日期,to_char(sysdate,‘YYYY-MM-DD‘) as 轉換後日期 from dual; --轉化為10進位select to_number(‘ABC‘,‘XXX‘) as 十進位 from dual; --彙總類函數*****--avg()平均值,count()總記錄數,max() --最大值,min() --最小值 ,sum()求和,variance()方差,STDDEV()標準差;select count(empno) as 員工數,round(avg(sal),2) as 平均工資 from emp; select count(*) from emp; 子查詢--子查詢: sql語句內的另外一條select語句,也曾為內查詢或內select 查詢--任何在 select、insert、update或delete命令中允許運算式的地方都 --在emp表中查詢部門名稱(dname)為“RESEARCH”的員工資訊;select empno,ename,job from emp where deptno=(select deptno from dept where dname =‘RESEARCH‘ ); --多表串連的方式select empno,ename,job from emp join dept on emp.deptno=dept.deptnowhere dept.dname=‘RESEARCH‘; --相對於多表關聯查詢,子查詢的使用更加靈活、功能更強,而且更容易理解--但是多表串連的效率要高於子查詢; --子查詢語句select deptno from deptwhere dname =‘RESEARCH‘--外查詢語句select empno,ename,job from emp; --一般情況下,外查詢語句檢索一行,子查詢語句需要檢索一遍資料,然後判斷外查詢語句的條件是否滿足。--如果條件滿足,將檢索的資料添加的結果集中,不滿足則檢索下一行的資料,所以說子查詢相對於關聯查詢要更慢一些;--(1)子查詢必須用括弧“()”括起來。(2)子查詢不能包括ORDER BY子句。(3)子查詢允許嵌套多層,但不能超過255層。 --(1)單行子查詢 (2)多行子查詢(3)關聯子查詢 --單行子查詢 :查詢emp表中既不是最高工資,也不是最低工資的員工資訊;--子查詢返回的是一行資料select empno,ename,sal from emp where sal >(select min(sal) from emp)and sal <(select max(sal) from emp); --多行子查詢:查詢不是銷售部 的員工資訊 (in,any,all)--子查詢返回的是多行的資料select empno,ename,job from emp where deptno in(select deptno from dept where dname <>‘SALES‘); --查詢工資大於部門編號為10 的任意一個員工即可的其他部門的員工資訊select deptno,ename,sal from emp where sal >any (select sal from emp where deptno =10) and deptno<>10; --查詢工資大於部門編號為30的所有員工的工資資訊select deptno,ename,sal from emp where sal>all (select sal from emp where deptno =30); --關聯子查詢--檢索工資大於(同職位的平均工資)的員工資訊select empno,ename,sal from emp fwhere sal>(select avg(sal) from emp where job = f.job)order by job;
交易處理--事務,當使用事務修改多個資料表時,在處理過程中出現了某種錯誤,如系統死機或斷電,返回結果所有資料都沒有儲存--使用事務可以提高資料的安全性,增強資料的處理效率--訪問Oracle附帶模式HR 切換DBAALTER USER hr ACCOUNT UNLOCK;ALTER USER hr IDENTIFIED BY 1234; --sql>insert into jobs values(‘OFFICE‘,‘辦公文員‘,3000,5000);savepoint sp;insert into jobs values(‘FINANCE‘,‘財務人員‘,4000,8000);select * from jobs;rollbcak to savepoint sp;
PLSQL編程/*基礎資料型別 (Elementary Data Type) 數值 number, 字元類:varchar2 40000位元組、char 2000位元組、long 2GB、nchar,nvarchar2 根據各國的字元集來定 日期類型DATE, 布爾類型:boolean 值:True,false,null代碼美化:工具-PLSQL美化器*/ /*%type (1)不需要查看錶中各個列的資料類型,就可以確保變數能夠儲存檢索資料 (2)已有的列已經修改,不用考慮對已定義的變數的資料類型進行修改 ;%type 會根據實際項目自動調整自身的資料*/ declare Num_sal emp.sal%type; Var_ename emp.job%type; begin select ename,sal into Var_ename,Num_sal from emp where empno=7369; dbms_output.put_line(Var_ename||‘的工資是‘||Num_sal);end;*/ /*record類型*/ declare type emp_type is record ( var_ename varchar2(20), var_sal number ); empinfo emp_type; begin select ename,sal into empinfo from emp where empno=7369; dbms_output.put_line(empinfo.var_ename||‘的工資是‘||empinfo.var_sal);end;*/ /*rowtype*/---PLSQLGRANT debug any procedure, debug connect session TO scott;--修改注釋 快速鍵 declare rowVar_emp emp%rowtype; begin select *into rowVar_emp from emp where empno=7369; dbms_output.put_line(rowVar_emp.ename||‘的工資是‘||rowVar_emp.Sal); end; --控制檔案多工,複製控制檔案先暫停OracleServicesORCL和OracleDBConsoleOrcl服務alter system set control_files= ‘D:\app\Administrator\oradata\orcl\CONTROL01.CTL‘, ‘D:\app\Administrator\flash_recovery_area\orcl\CONTROL02.CTL‘, ‘D:\OracleFiles\ControFiles\CONTROL03.CTL‘scope=spfile; VX:13037231781
Oracle學習筆記