主頁 >  其他 > Oracle資料庫小知識點整理

Oracle資料庫小知識點整理

2020-12-10 09:49:13 其他

-- 資料庫存盤資料

 

-- 市面上主流的資料庫有哪些

 

-- 甲骨文  oracle   mysql

--  IBM  db2  金融

--  微軟  sqlserver

 

--這些是關系型資料庫,

 

--NOSQL  不僅僅是sql,典型 mongodb.

 

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

--資料庫的語言有哪些分類

-- **************************************

/***

1.資料定義語言(DDL),create,alter,drop

2.資料操縱語言(DML),select,update,insert,delete

3.資料事務語言, commit,savepoint,rollback

事務特性:原子性,一致性,持久性,隔離型,

 

...........后面補充.............

 

在關系型資料庫中資料是以table

(二維資料結構,行和列的形式)

來組織資料

 

table 就是表來組織資料,這個table的設計的規范是什么?

 

--三范式  *****************

 

--第一范式:資料庫表中的欄位應該最小單位,

是不能夠分割(本地化)

--第二范式:資料庫表中的一個欄位

不能由另外一個欄位通過計算得出,

 

age 

birthday

 

工資

養老保險費用

 

***/

 

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

-- 創建表  oracle  列名和列的型別來定義的

--1.資料型別:

--number 數值型別  number(長度),number(10)

--number(長度,小數點位數)   number(7,2)

--2.char型別   char(長度),定長  char(6) 固定長度為6位

--3.varchar2型別  varchar2(20)

--4.date型別  日期型別

--5.int型別,表示一個正整數

-- 大文本型別 blob ,clob

-- 路徑

 

-- 首先我們來創建一張表   命名規范 t_

create   table   t_students

(

      sn  number(7)   primary  key ,--學號 -- 主鍵(唯一不能重復),主鍵約束

      sname  varchar2(20) , --學生姓名

      spwd   char(6), -- 學生密碼

      sbirthday  date,--出生年月

      smoney      number(7,2),     --賬戶金額

      job      varchar2(20), --學生職位

      saddress  varchar2(20),--學生籍貫

      sphone  char(11)   --學生手機號碼

 

)

 

--查詢表

select   *   from  t_students

 

 

-- 插入資料

insert  into   t_students  values(1, '趙蓉','12345',

to_date('1992-12-03','yyyy-MM-dd'),500.65,'學生會委員',

'鹽城','13913321089');

commit;

 

 

insert  into   t_students  values(2, '秦日霞','123456',

to_date('1992-11-03','yyyy-MM-dd'),1500.65,'學生會委員',

'鹽城','13913321085');

commit;

 

 

-- 修改表

 

-- 表增加一個欄位

alter table  t_students  add  ssex  char(4);

 

--表欄位型別修改

alter  table t_students  modify  saddress  varchar2(15)

 

--洗掉表的欄位

alter  table t_students   drop  column ssex ;

 

-- 洗掉整個表

drop  table t_students;

 

select  length(s.spwd) 

 from  t_students  s   where  s.sname='趙蓉'

 

 

 

-- 創建表

 

create  table  t_employees

(

    eid   number(6) primary key, -- 員工編號  主鍵

    ename  varchar2(20),  --員工姓名

    epwd  char(5) , -- 員工密碼

    ebirthday  date, --出生年月

    esalary   number(7,2), --工資

    ejob  varchar2(20), --職位

    esex  char(4) --性別

 

)

 

-- oracle序列機制,自增長機制    sequence

create  sequence  seq_employees

start  with 100 --開始編號

increment  by  2  --步長

nocache  --沒有快取,立即生成

 

--查看表結構

desc  t_employees

 

select  *  from  t_employees  for  update

 

 

select  *  from  t_employees  where

 

 

 

--資料操作語言(select ,insert,update,delete)DML

--select 操作 ,不需要commit  70%

--insert,update,delete  都需要commit  30%

 

--查詢

select   *   from  t_employees

 

--插入

-- 插入資料

insert  into  t_employees  values(seq_employees.nextval,

'胡瓜','1234',to_date('1992-12-30','yyyy-MM-dd'),10000.88,

'職工','男');

 

insert  into  t_employees  values(seq_employees.nextval,

'李欣','11111',to_date('1992/08/30','yyyy/MM/dd'),12000.88,'組長','男');

commit;

 

--更新資料

update  t_employees e set e.epwd='12345' ;

commit;

 

update t_employees  e  set  e.epwd='00000'  where e.ename='李欣';

commit;

 

--洗掉資料

delete  from   t_employees

 

delete  from  t_employees  e  where e.eid=100;

commit;

 

 

 

 

--約束

 

--1.主鍵約束,唯一不能重復,資料唯一性  primary key

--2.非空約束 這個欄位的取值不能為空   not null

--3.默認約束  這個欄位取值如果不給值,取默認值  default

--4.檢查約束  這個欄位取值是一定范圍內  check(欄位取值范圍)

--5.外鍵約束  一個欄位取值從屬于另外一個的值

 

drop  table  t_stus

 

create  table  t_stus

(

    sid  number(3)  primary key,

    sname  varchar2(20)   not null

   

 

)

 

insert  into  t_stus   values(seq_stus.nextval,null);

commit;

 

insert  into  t_stus   values(seq_stus.nextval,'李欣',to_date('1976-12-30','yyyy-MM-dd'));

commit;

 

insert  into  t_stus   values(seq_stus.nextval,'李欣1',default);

commit;

 

insert  into  t_stus   values(seq_stus.nextval,'李欣1',default,'男');

commit;

 

 

select   *  from   t_stus

 

--default  是默認,sysdate是oracle默認時間的關鍵字

alter  table  t_stus  add  birthday  date  default sysdate;

 

alter  table  t_stus  add   sex  char(4)

 check(sex  in('男','女'));

 

 

 -- 創建一張表,樹狀選單,自身關聯表 一對多

 create  table  t_menu

 (

     fid   number(4)  primary  key, --父id

     fmenuname  varchar2(20)  not null, --父選單名稱

     cmenuuname  varchar2(20) not null,-- 子選單名稱

     cid       number(4)   references t_menu(fid)  --子id  外鍵約束

 

 

 )

 

 select  *  from   t_menu

 

 

 

 

 

 

-- oracle序列機制   自增長機制

create  sequence   seq_stus

start  with  1

increment  by 1

nocache;

 

--查詢序列的當前值  dual是個系統表

select   seq_stus.currval  from  dual;

 

drop  sequence  seq_stus

 

 

 

 

insert  into  t_stus  values(seq_stus.nextval,'李欣');

commit;

 

select   *  from   t_stus

 

delete  from  t_stus

 

--mysql自增長    auto_increment 從起始編號為1,每次增加1.

--sqlserver自增長  identity(10,1)

 

 

 

 

-- oracle內置函式

 

--to_date(引數1,引數2),把一個字串型別的日期轉換成date型別,

--引數2,按照什么日期格式

 

--length() 獲取結果的長度

 

--to_char()轉換成字串型別

select   to_char(sysdate,'yyyy')

-to_char(e.ebirthday,'yyyy')  age

  from   t_employees  e

 

-- 拼接字串concat()

-- 輸出一段描述"胡瓜的職位是什么"

select concat(concat(e.ename,'職位是:'),e.ejob) 描述

 from  t_employees  e  where e.ename='胡瓜';

 

 

-- ||連接

select  e.ename||',職位是'||e.ejob  from   t_employees e

 

--nvl()函式,取值為null,給默認值

select *   from   t_employees e  for  update

 

--增加獎金欄位

alter  table  t_employees  add  ecomm  number(5,2)

 

-- 算出每個員工的收入

select  e.ename,e.esalary+e.ecomm    from   t_employees  e

select  e.ename,e.esalary+nvl(e.ecomm,0)    from   t_employees  e

 

 

--substr()截取

alter  table  t_employees  add  ephone  char(11) 

--號段

select  substr(e.ephone,0,3) from

 t_employees  e  where  e.ename='胡瓜'

 

 --to_number()轉換成數值的函式

 

 

--聚合函式 count(),max(),min(),sum(),avg()

select   count(*)  from  t_employees

select   max(e.esalary)  from  t_employees  e

 select   min(e.esalary)  from  t_employees  e

 select   avg(e.esalary)  from  t_employees e

--事務?????

--手動事務,自動事務,可以設定

 

 

-- 3查詢技術  70%

 

-- 3.1 條件查詢   where關鍵字

 

-- 查詢姓名是李欣的所有資訊

select   *  from  t_employees  e  where e.ename='李欣'

 

--查詢姓名是李欣,密碼是12345的這個用戶是不是合法用戶

select  count(*) from  t_employees  e  where e.ename='李欣'  

and e.epwd='1111'

 

select  *  from  t_employees  e  where  e.esex='男'

or  e.ename='李欣'

 

--3.2  比較查詢 >,<,>=,<=,!= <>

select  * from  t_employees e  where e.esalary!=5000

 

select  * from  t_employees e  where e.esalary<>5000

 

 

--3.3  模糊查詢

 

--查詢姓李的人員的資訊

select   * from  t_employees  e  where  e.ename  like '李%'

 

--查詢姓李的人員的,但是是兩個字的人員資訊

select   * from  t_employees  e  where  e.ename  like '李__'

 

--3.4  排序

 

--asc  desc

 

select   *  from  t_employees  e  order  by e.esalary asc

select   *  from  t_employees  e  order  by e.esalary desc

 

--3.5 分組

 

--group by  統計就是和聚合函式在一起使用,

 

--統計這個單位的男女 性別數量  分組條件是明確

select   e.esex,count(e.esex)

 from   t_employees  e  group  by e.esex

 

 --

 select  *  from    t_employees  for  update

 -- 統計每個年齡員工的數量 select  count(*),   分組條件是計算的

 select  count(*),

 to_char(sysdate,'yyyy')-to_char(e.ebirthday,'yyyy') age

 from   t_employees  e  group by

 to_char(sysdate,'yyyy')-to_char(e.ebirthday,'yyyy')

 

 --統計每個職位的數量

 select  e.ejob,count(*)

 from   t_employees  e  group  by  e.ejob

 

 --統計學歷,統計籍貫

 

 --統計每個年齡數量大于1  分組后帶有限制條件

  select  count(*),

 to_char(sysdate,'yyyy')-to_char(e.ebirthday,'yyyy') age

 from   t_employees  e  group by

 to_char(sysdate,'yyyy')-to_char(e.ebirthday,'yyyy')

 having count(*)>1

 

 --統計每個年齡數量,數量按升序(先分組,后排序)分組帶排序

   select  count(*),

 to_char(sysdate,'yyyy')-to_char(e.ebirthday,'yyyy') age

 from   t_employees  e  group by

 to_char(sysdate,'yyyy')-to_char(e.ebirthday,'yyyy')

  order  by count(*)

 

 

-- 子查詢  一個查詢的結果作為另外一個查詢的條件

 -- 找出工資最高的人的姓名

 select   *  from   t_employees

 

 select  *  from  t_employees  e where e.esalary=

 (select  max(e.esalary)  from   t_employees e)

 

 

--3.6 in ,not in ,between and  ...any  all關鍵字

 

-- =只能等于一個值

select   * from  t_employees  e  where e.esalary=10000.88

-- in可以是多個值

select   * from  t_employees  e  where e.esalary

in(10000.88,5000.00)

 

select   * from  t_employees  e  where e.esalary

not  in(10000.88,5000.00)

 

select  * from  t_employees e  where  e.esalary   between  4000

and  20000;

 

select  * from   t_employees e  where   e.esalary >=4000

and e.esalary <=20000

 

--any  >是比最小的大的資訊,<是比最大的小資訊

select  e.esalary,e.ename  from t_employees e  where e.esalary<any

(select  e.esalary    from t_employees  e where e.ejob='職工')

 

--all  >是比最大的大的資訊,<是比最小的小資訊

select  e.esalary,e.ename  from t_employees e  where e.esalary < all

(select  e.esalary    from t_employees  e where e.ejob='職工')

 

select   *  from  t_employees  for  update

 

 

-- 查詢1991年到1999年出生的員工的資訊

 

select   *  from  t_employees

 

select   *  from  t_employees  e 

where  to_number(to_char(e.ebirthday,'yyyy'))

  between 1991 and  1999

 

 

 

 

--****

 

 

insert  into  t_stus   values(seq_stus.nextval,

'李二',default,'男')

 

 

select  *  from   t_employees  for  update

 

 

--- oracle高級查詢技術

 

-- 1.子查詢

 

-- 邏輯,就是從一個條件出發去找關聯的條件,

 

-- 一個查詢的結果作為另一個查詢的條件

 

-- 找出員工工資最高人的資訊

select  *   from   t_employees  e  where e.esalary  in

(select  max(e.esalary)   from  t_employees  e)

 

--找出和李欣職位不同的員工的資訊

 

select  *   from  t_employees  e  where e.ejob!=

(select  e.ejob  from  t_employees  e  where e.ename='李欣')

 

 

--找出比員工平均工資高的員工的資訊

select  *   from  t_employees  e  where e.esalary>

(select  avg(e.esalary)  from   t_employees  e)

 

--找出收入最高的員工的資訊

 

select  *  from   t_employees  e where e.esalary+nvl(e.ecomm,0)=

(select   max(e.esalary+nvl(e.ecomm,0))  from   t_employees  e )

 

 

--oracle分頁查詢 局限性 ,一條sql陳述句對應一張表,造成SQL冗余

 

--oracle特殊的列,偽列  rownum ,它始終在第一行,不能移動

 

select  rownum, e.*  from  t_employees  e

 

--查詢前三條的資料

select rownum, e.*    from  t_employees  e  where rownum<=3

 

select rownum, e.*    from  t_employees  e  where rownum<=2

 

-- 查詢第2條到第4條之間的資料,查詢出是空的

select rownum, e.*    from  t_employees  e  where rownum>=2

and rownum<=4;

 

select rownum, e.*    from  t_employees  e  where rownum

between 2  and  4

 

--rownum始終在第一行,導致你查詢出來的是空的,

 

-- 查詢第2條到第4條之間的資料

--通過臨時結果集過渡查詢

select  *  from  

(select rownum  rm,e.*  from  t_employees  e  where rownum<=4)  tmp

where  tmp.rm>=2

 

select rownum, e.*    from  t_employees  e

 

--分頁查詢

 

-- 最大的編號:<=第幾頁*每頁條數

--起始編號:>(第幾頁-1)*每頁條數

 

select  *  from  t_employees  e

 

--每頁的條數是2條

--第一頁資料  第一頁,2條  out:結果集

select  *   from  

(select   rownum  rm,e.* from  t_employees  e  where  rownum<=1*2)

tmp  where tmp.rm>(1-1)*2

 

 

--第二頁資料

select  *  from  

(select  rownum  rm,e.*   from  t_employees  e  where  rownum<=2*2)

tmp  where tmp.rm>(2-1)*2

--第三頁資料

 

select  *  from  

(select  rownum  rm,e.*   from  t_employees  e  where  rownum<=3*2)

tmp  where tmp.rm>(3-1)*2

 

 

-- 在實際的專案中的一個

--局限性 ,一條sql陳述句對應一張表,造成SQL冗余 ,

--比如;100張表需要100個sql嗎?

 

 

 

--2.集合查詢

 

--集合查詢

-- 多個結果集的查詢

-- 工資大于3000的和職位是組長的兩個查詢結果的合并,過濾重復

-- 合并不過濾重復,查詢的兩個結果合并

select  e.ename,e.esalary   from 

t_employees  e  where e.ejob='組長'

union all

select e.ename,e.esalary     from  t_employees  e 

where e.esalary>3000

 

--合并過濾重復

select  e.ename,e.esalary   from 

t_employees  e  where e.ejob='組長'

union

select e.ename,e.esalary     from  t_employees  e 

where e.esalary>3000

 

--交集,兩個查詢結果集都有的

select  e.ename,e.esalary   from 

t_employees  e  where e.ejob='組長'

intersect

select e.ename,e.esalary     from  t_employees  e 

where e.esalary>3000

 

--差集

select  e.ename,e.esalary   from 

t_employees  e  where e.ejob='組長'

minus

select e.ename,e.esalary     from  t_employees  e 

where e.esalary>3000

 

--3.decode()函式查詢  分支查詢

 

select  *   from 

t_employees

 

--科長工資加1.2倍,組長工資加1.1倍,其它職位保持原有,

--請輸出加薪后的所有的員工的

--資訊

select  e.ename,e.ejob,e.esalary,

decode(e.ejob,'科長',e.esalary*1.2,

'組長',e.esalary*1.1,

esalary)  加薪后的工資

from  t_employees  e

 

-- 等同于case..when

select  e.ename,e.ejob,e.esalary,

case e.ejob when '科長' then e.esalary*1.2

            when '組長' then e.esalary*1.1

            else  e.esalary  end

              

加薪后的工資       

from  t_employees  e

 

--4.多表查詢(2表查詢,第三范式)

 

--之前講的都是單表查詢,進入到多表(>1)查詢

 

--第三范式

-- 表中的列只能參照一個主鍵欄位

 

-- 員工表 員工id,員工姓名,部門名稱,部門id, 拆分形成兩個物體表

 

--物體表之間的關系,主要有三種:

--1.一對一關系  員工表和角色表

--2.一對多關系   部門表和員工表  商品分類表和商品表

--3.多對多關系    學生和課程表(中間關系表,第三方表,成績表)

          

--物體表之間的關系圖,ER圖

 

--這個關系的定義是根據現實的業務來決定的,

select   *  from  t_employees

 

--建立一個部門表  部門和員工表之間的關系是1對多

create  table  t_depts

(

    did  int   primary  key,

    dname  varchar2(20) not null,

    daddress  varchar2(50),

    dphone   char(11)  not null

 

)

 

create  sequence  seq_depts

start with  10

increment  by 2

nocache;

 

 

insert  into  t_depts 

values(seq_depts.nextval,'質量部','南京江北新區','13913321089');

insert  into  t_depts 

values(seq_depts.nextval,'技術部','南京江寧區','13913321086');

insert  into  t_depts 

values(seq_depts.nextval,'人力資源部','南京鼓樓區','13913321085');

commit;

 

 

select  *   from   t_depts  for  update

 

select  *  from  t_employees  for  update

 

-- 員工和部門之間是有關系的

 

alter  table t_employees  add  deptid   int;

 

 

--外鍵約束????????????

alter  table  t_employees  add  constraints  fk_emp_depts

 

 

-- 表的設計,軟體核心來自于資料

 

-- 查詢這兩張表的資料  笛卡爾積 表1*表2

select  *  from  t_employees,t_depts

 

--等值連接

select   *  from    t_employees  e,t_depts  d

where e.deptid=d.did

 

 

--內連接查詢inner  join  

select   *  from    t_employees  e  inner  join  t_depts  d

on e.deptid=d.did

 

-- 查詢員工李欣的部門名稱

select  d.dname,e.ename from  t_employees   e  inner  join 

 t_depts  d

on   e.deptid=d.did  where  e.ename='李欣'

 

--子查詢 的效率比內連接查詢要低

select  d.dname  from  t_depts  d where d.did=

(select  e.deptid   from  t_employees   e  where e.ename='李欣')

 

--左連接

select  d.dname,e.ename from  t_employees   e  left  join 

 t_depts  d

on   e.deptid=d.did 

 

 

--右連接

select  d.dname,e.ename from  t_employees   e  right  join 

 t_depts  d

on   e.deptid=d.did 

 

 

--全連接

 

select  d.dname,e.ename from  t_employees   e  full  join 

 t_depts  d

on   e.deptid=d.did

 

 

--

select   *  from  t_depts

 

--  統計技術部人員的工資的總和

 

select   sum(e.esalary) 工資總和  from  t_depts  d  inner  join  t_employees e  on d.did

=e.deptid  where d.dname='技術部'

 

--  統計每個部門的人員的數量

select   count(e.ename) 數量, d.dname from  t_depts  d 

left  join  t_employees e  on d.did=e.deptid 

  group  by  d.dname

=e.deptid

 

--統計每個部門的人員的數量大于1的資訊  group  by 限制條件  having

 

select   count(e.ename) 數量, d.dname from  t_depts  d 

left  join  t_employees e  on d.did=e.deptid 

group  by  d.dname

having count(e.ename)>1

  

 --統計每個部門的人員的數量按降序排列

select   count(e.ename) 數量, d.dname from  t_depts  d 

left  join  t_employees e  on d.did=e.deptid 

group  by  d.dname   order by   count(e.ename)  desc

 

 

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

 

 

---pl-sql塊

--塊:一組SQL陳述句在一起運行,解決復雜的業務邏輯,

-- 是不能夠被編程語言所呼叫  java,python,c#

 

--塊的基本結構

/**

 declare

 

            ---定義的變數

 begin

  

 

             -- 一組sql陳述句

 

 end;

 

 

 

**/

 

 

 

/**

變數v_

變數賦值:=

 

 

**/

 

-- 計算兩個數值型別的變數的和并輸出

declare

   v_num1 number:=100;

   v_num2 number:=10;

   v_sum number;

begin

 

    

   v_sum:=v_num1+v_num2;

  

   dbms_output.put_line('計算這兩個數的和為'||v_sum);

  

end;

 

 

-- 例外處理  計算兩個數值型別的變數的商并輸出

declare

   v_num1 number:=100;

   v_num2 number:=0;

   v_sum number;

begin

 

    

   v_sum:=v_num1/v_num2;

  

   dbms_output.put_line('計算這兩個數的和為'||v_sum);

  

--例外處理塊

exception   --捕獲例外

    when  others  then

        dbms_output.put_line('v_num2這個數作為除數不能為零');

  

end;

 

-- 流程控制陳述句

-- 一個數判斷是奇數還是偶數,并輸出資訊

 

declare

v_num  number:=22;

 

begin

 

  -- oracle不支持%取模,取模函式mod()

  if   mod(v_num,2)=0  then

  

       dbms_output.put_line('v_num這個數是偶數');

 

  else

       dbms_output.put_line('v_num這個數是奇數');

  end  if;

 

end;

 

 

--優化

declare

v_num  number:=22;

v_str  varchar2(100);

begin

 

  -- oracle不支持%取模,取模函式mod()

  if   mod(v_num,2)=0  then

   v_str:='v_num這個數是偶數';

     

 

  else

     v_str:='v_num這個數是奇數';

      

  end  if;

 dbms_output.put_line(v_str);

end;

 

-- 查詢李欣這個員工的性別,如果是男的,獎金加1000,

--如果是女的,獎金加500,

-- 輸出他現在的收入輸出

/**

1.賦值:=  直接給變數賦值

2.從sql陳述句查詢的結果進行賦值,2.1查詢出來的是一個值,into

2.2 如果是多個值,不能用into,要用游標遍歷

 

**/

 

 

declare

v_esex  t_employees.esex%type;  --這個變數的型別參照表中的欄位型別

v_usaraly  t_employees.esalary%type;

v_sum  number(10,2);

begin

 

  --1.查詢李欣這個員工的性別

  select  e.esex   into   v_esex

   from  t_employees  e  where e.ename='李欣';

  

   --2.判斷是男還是女

  

   if   v_esex='男'   then

    

       v_usaraly:=1000;

  

   else

    

      v_usaraly:=500;

  

   end  if;

  

   --執行更新

   update   t_employees  e  set  e.esalary=e.esalary+v_usaraly

   where e.ename='李欣';

  

   commit;

  

  

   -- 查詢出現在的收入

  select  e.esalary+nvl(e.ecomm,0)  into  v_sum   from  t_employees  e where e.ename='李欣';

 

 

  dbms_output.put_line('李欣這個員工的性別是:'||v_esex||',他現在的收入為:'||v_sum);

  --select  e.ename from  t_depts  d  inner join  t_employees  e

  -- on d.did=e.deptid  where d.dname='質量部'

 

end;

 

 

-- 查詢李欣的部門名稱,如果是質量部,加1000,如果是技術部加2000,

--如果是人力資源部加500,其它部門加100

 

declare

v_dname  t_depts.dname%type;

v_ecomm   t_employees.ecomm%type;

 

begin

 

 -- 李欣的部門名稱

 select  d.dname   into   v_dname  from  t_employees e   inner  join  t_depts d

 on e.deptid=d.did  where e.ename='李欣';

 

 if v_dname='質量部' then

  

 v_ecomm:=500;

  

 elsif  v_dname='技術部' then

 

   v_ecomm:=600;

 elsif v_dname='人力資源部'  then

 

   v_ecomm:=200;

 else

      v_ecomm:=100;

 

 end   if;

 

 

    update   t_employees  e  set  e.ecomm=e.ecomm+v_ecomm

   where e.ename='李欣';

  

   commit;

 

end;

 

 

-- 回圈結構

 

--1.100之和并判斷是奇數還是偶數

--  for  loop

declare

 

v_sum  number:=0;

 

begin

 

for v_i  in 0..100  loop

 

    v_sum:=v_sum+v_i;

   

end  loop;

 

  dbms_output.put_line('和為'||v_sum);

 

end;

 

--while loop

 

 

declare

v_i  number:=0;

v_sum  number:=0;

 

begin

 

   while v_i<=100  loop

    

      v_sum:=v_sum+v_i;

     

      v_i:=v_i+2; --改變回圈變數的值

   end  loop;

 

dbms_output.put_line('和為'||v_sum);

 

end;

 

 

--回圈結構使用

 

create  table   t_users

(

 

   id  int  primary key,

   tname  varchar2(20),

   tsex   char(6)

 

)

 

create  sequence  seq_users

start with  1

increment  by 1

nocache;

 

select  * from  t_users

 

--for回圈批量資料

declare

begin

 

for  v_i  in 1..10000  loop

 

   if mod(v_i,2)=0  then

    

      insert  into  t_users  values(seq_users.nextval,'李'||v_i,'男');

     

   else

       insert  into  t_users  values(seq_users.nextval,'王'||v_i,'女');

  

   end  if;

 

end  loop;

 

commit;

end;

 

--while回圈批量資料

declare

v_i  number:=1;

begin

 

while  v_i<=1000  loop

   insert  into  t_users  values(seq_users.nextval,'李'||v_i,'男');

 

v_i:=v_i+1;

 

 

end loop;

 

commit;

 

end;

 

---into是只能附一個值

-- 如果是多個值,就是游標,就是結果集,分為;cursor(顯示游標),隱式游標

 

-- 查詢員工表的中的資料,并輸出每個人的姓名和性別

-- while..loop

declare

   --定義一個顯示游標

   cursor  v_datas is select  *  from  t_employees;

   -- 定義一行

   v_linedatas  t_employees%rowtype;

 

begin

 

   

   --打開這個游標

   open  v_datas;

  

   --遍歷游標

   fetch  v_datas  into v_linedatas; --遍歷第一行

  

     while  v_datas%found  loop -- 如果有資料進入回圈體

       

        dbms_output.put_line(v_linedatas.ename||',性別是:'||v_linedatas.esex);

      

         fetch  v_datas  into v_linedatas;--移動到下一行

     end  loop;

  

  

   -- 關閉游標

   close  v_datas;

end;

 

-- for..loop

 

declare

   --定義一個顯示游標

   cursor  v_datas is select  *  from  t_employees;

 

begin

 

   for v_linedatas in v_datas loop

  

    dbms_output.put_line(v_linedatas.ename||',性別是:'||v_linedatas.esex);

   end  loop;

  

   -- 關閉游標

end;

 

-- 隱式游標

 

-- 查詢質量部員工的性別,是男加1000,是女加5000

 

declare

v_sex  t_employees.esex%type;

v_comm  t_employees.ecomm%type;

 

begin

     

   --質量部的員工的資訊

  for  v_datas  in ( select  e.esex ,e.ename  from  t_employees  e   right  join  t_depts  d

   on  e.deptid=d.did  where d.dname='質量部')  loop

  

     dbms_output.put_line(v_datas.esex||v_datas.ename);

    

     if v_datas.esex='男'  then

      

       v_comm:=200;

     else

       v_comm:=50;

     end  if;

    

     --執行更新

     update  t_employees e  set e.ecomm=e.ecomm+v_comm

     where e.ename=v_datas.ename;

     commit;

  

   end  loop;

 

end;

 

 

select   *  from   t_employees

 

 

---存盤程序

 

-- 存盤(是以一個名字來存盤)+程序(程序化的陳述句塊)

 

-- pl-sql塊是不能夠被編程語言直接呼叫,只能運行在資料庫端

-- 以一個名字命名,這個名字被編程語言call,這樣形成互動

 

--預編譯,編譯一次,下次呼叫的話不需要再次編譯,性能好,

--能夠處理復雜的業務邏輯,

--可以有傳入和輸出引數,缺點:占用存盤空間

--sql(dml語言,呼叫一次編譯一次),性能沒有存盤程序好

 

--基本結構

create  or  replace  procedure   存盤程序的名字

(

 

      --傳入和輸出引數

 

)

as

 

 

 

begin

 

 

 

 

end;

 

---檢查登錄

create  or  replace  procedure   p_checklogin

(

 

      v_uname  in   varchar2, --傳入引數不需要長度

      v_pwd   in   varchar2,

      v_msg  out   varchar2

)

as

v_count  int;

 

 

begin

 

   --檢查登錄

   select count(*) into  v_count  from  t_employees  e  where e.ename=v_uname

  

   and   trim(e.epwd)=v_pwd;

  

   

   --進行判斷

   if  v_count>0 then

    

 

 

 

    v_msg:='登錄成功';

   else

    

      v_msg:='登錄失敗';

     

   end  if;

  

   --記錄

   insert  into  t_userlog  values(seq_userlog.nextval,v_uname,default,v_msg);

   commit;

  

  

end;

 

-- 變更存盤程序

 

create table  t_userlog

(

    ulid   int   primary key,

    uname varchar2(20), -- 登錄的人

    logintime  date  default  sysdate, --登錄的時間

    loginresult  varchar2(20)   --登錄的結果

 

)

 

create  sequence  seq_userlog

start  with 1

increment  by 1

nocache;

 

 

select  *  from  t_userlog

 

-- 直接回傳一個結果集(不在存盤程序內部遍歷)

--**部門的員工的數量和員工的姓名

create  or  replace  procedure  p_queryempDatas

(

 

    v_dname  in  varchar2,  --部門名稱

    v_count  out  int,  --部門員工數量

    v_namedatas   out  sys_refcursor  --部門員工姓名

)

as

 

begin

 

  --1.通過部門名稱得到部門的員工的數量

  select count(e.ename)  into  v_count   from  t_employees  e

   right  join  t_depts d

  on  e.deptid=d.did  where d.dname=v_dname;

 

 

  --2.員工姓名(不在存盤程序內部遍歷)

  open  v_namedatas   for select e.ename    from  t_employees  e 

  right  join  t_depts d

  on  e.deptid=d.did  where d.dname=v_dname;

 

 

end;

 

----**部門的員工的數量和屬于這個部門的員工的性別,

--如果是男,工資加250;

--女加100;

 

 

create   or  replace   procedure  p_querydeptupdatesalary

(

   v_dname  in   varchar2,

   v_count  out  int

)

as

v_salary  t_employees.esalary%type;

begin

 

    --1.通過部門名稱得到部門的員工的數量

  --select count(e.ename)  into  v_count   from  t_employees  e

   --right  join  t_depts d

  --on  e.deptid=d.did  where d.dname=v_dname;

 

  --呼叫函式,減少冗余代碼

  v_count:=f_querydeptempnum(v_dname);

 

  --2.這個部門的所有員工的資訊

 

  for  v_linedatas  in (select  *     from  t_employees  e 

  right  join  t_depts d

  on  e.deptid=d.did  where d.dname=v_dname)  loop

 

  if v_linedatas.esex='男' then

   

     v_salary:=250;

   

  else

   

      v_salary:=150;

 

  end  if;

 

 

  --執行更新

  update  t_employees  e  set  e.esalary=e.esalary+v_salary

  where  e.ename=v_linedatas.ename;

 

  commit;

 

 

  end  loop;

 

 

end;

 

 

 

select  *  from  t_employees

 

-- 自定義函式  特殊的存盤程序

-- 自定義函式  1.關鍵字function  2.只能回傳一個值

create   or  replace  function  f_querydeptempnum

(

   v_dname  in  varchar2

)

return int --切記這個地方不能加;

as

 

v_count  int;

begin

 

    select  count(e.ename)  into  v_count  from  t_employees e

    right  join  t_depts  d  on  e.deptid=d.did

    where  d.dname=v_dname;

   

   

    return v_count;

 

end;

 

-- 查詢一個表t_employees的條數  如果系統中的表很多,這樣會造成冗余

create   or  replace  function  f_queryempcount

return  int

as

 

v_count  int;

begin

 

    select  count(*)   into  v_count from  t_employees ;

    return  v_count;

 

end;

 

--動態sql

 

-- 一個值

create   or  replace  function  f_querytablecount

(

 

   v_tableName   in  varchar2

)

return  int

as

 

v_sql varchar2(1000);

 

v_count  int;

begin

 

   v_sql:='select   count(*)  from  ' ||v_tableName;

  

  

   -- 執行這個動態sql,是一個值

   execute immediate  v_sql  into v_count;

  

   return v_count;

 

end;

 

---多個值

create   or  replace  function  f_querytabledatas

(

 

   v_tableName   in  varchar2

)

return  sys_refcursor

as

 

v_sql varchar2(1000);

 

v_datas  sys_refcursor;

begin

 

   v_sql:='select   *  from  ' ||v_tableName;

  

  

    -- 執行這個動態sql,是一個結果集

    open v_datas  for v_sql;

   

    return v_datas;

   

end;

 

 

--sql陳述句分頁  固定2條

 

select   *  from  t_employees

 

-- sql分頁,系統大了,會造成SQL冗余

select   * from (select  rownum  rm, 

e.* from  t_employees  e  where  rownum<=4)  tmp

where tmp.rm>2

 

 

--存盤程序分頁 一個存盤程序可以對系統中的表都可以分頁

-- tablename  in  表名

--pagenum   in   每頁幾條

--currentnum  in  第幾頁

--datas  out  每頁的結果集

--count  out  總條數

--pagesize  out  總頁數

create   or   replace    procedure   p_pagemodel

(

 

    v_tablename  in   varchar2,

    v_pagenum   in    int,

    v_currentnum  in  int,

    v_datas  out  sys_refcursor,

    v_count   out   int,

    v_pagesize  out  int

 

)

as

v_endindex  int:= v_currentnum*v_pagenum;

 

v_startindex  int:=(v_currentnum-1)*v_pagenum;

 

v_sql  varchar2(1000);

begin

 

   --1.構建總的條數動態sql

   v_sql:='select   count(*)   from     '||v_tablename;

  

   --2.執行動態sql

   execute  immediate  v_sql  into v_count;

  

   --3.獲取總頁數

   if   mod(v_count,v_pagenum)=0  then

    

     v_pagesize:=v_count/v_pagenum;

    

   else

      --除不盡

     v_pagesize:=floor(v_count/v_pagenum)+1;

    

   end  if;

  

   --獲取分頁結果集

   v_sql:='select   *   from  '||'(select  rownum  rm, e.* from  '||v_tablename||

    '   e  where  rownum<='||v_endindex||')   tmp' ||' where tmp.rm>'||v_startindex;

   

   dbms_output.put_line(v_sql);

  

   --執行動態sql,回傳的是一個結果集

   open v_datas  for v_sql;

   

end;

 

-- 面試的時候,什么是事務

--jdbc 事務  自動事務

--hiernate事務

--mybatis事務

 

--spring事務

 

--python事務  手動事務 

 

--  rollback回滾事務  commit提交事務  savepoint 設定事務保存點

--資料庫事務

--事務就是一個作業單元,所謂的作業單元,就是不可分割的一個或多個SQL

-- (insert ,update,delete)

 

--秦日霞借錢1000給李欣,并記錄日志,

select  *  from  t_employees

 

 

--秦日霞借錢1000給李欣

--記錄日志

create  or   replace  procedure   p_operatorsalary

(

 

   v_rname  in  varchar2,

   v_tname  in  varchar2,

   v_money  in  number,

   v_msg   out  varchar2

 

)

as

begin

 

    -- 1.先把借錢人的錢扣掉

    update  t_employees  e  set

    e.esalary=e.esalary-v_money  where e.ename=v_rname;

   

    --2.加上給借錢人

     update  t_employees  e  set

    e.esalary=e.esalary+v_money  where e.ename=v_tname;

   

    --設定一個事務保存點  給個名字

   

   

    savepoint  a;

   

    --3.記錄日志

    insert  into  t_userlog 

    values(seq_userlog.nextval,v_tname,'1997-12-30','借錢');

   

    commit;

  

exception

 

when  others  then

  rollback to a;  --回滾到事務保存點a,提交

  commit;

  

end;

 

 

select   *   from  t_userlog

 

 

 

 

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

 

--索引,job(定時任務),視圖,觸發器

 

-- 索引

-- 怎么來提高查詢的性能?

 

-- 1.索引   2. SQL優化

 

-- 索引就是來提高查詢的性能,

-- 打個比方來說:書的目錄 聚集索引 ;

--書的頁碼:聚集索引

 

-- 70W條的資料以上我們才考慮建立索引

 

-- 建立一張表

create  table  t_stuinfo

(

 

    suid  number(7)  primary  key,

    sname  varchar2(100),

    sbirthday  date  default  sysdate,

    ssex  char(4)

 

)

 

 

 

--加載80W條資料

 

declare

begin

   for v_i  in 1..1200000 loop

    

       if mod(v_i,2)=0  then

        

      

         insert  into  t_stuinfo  

         values(v_i,'李'||v_i,default,'男');

      

        

       else

     

  

         insert  into  t_stuinfo  

           values(v_i,'投訓'||v_i,default,'女');

   

       end  if;

   end  loop;

  

   commit;

 

end;

 

delete  from  t_stuinfo

 

select  count(*)  from  t_stuinfo

 

 

select  *  from  t_stuinfo

 

-- 白盒測驗 查詢  投訓67001 查這個人的資訊

create  or  replace  procedure  p_queryinfo

(

    v_name  in  varchar2

 

)

as

v_begintime  varchar2(1000);

v_endtime   varchar2(1000);

v_birthday t_stuinfo.sbirthday%type;

begin

 

       v_begintime:=to_char(systimestamp,'yyyy-MM-dd hh24:mi:ss.ff');

 

        select  s.sbirthday   into  v_birthday

        from   t_stuinfo s  where s.sname=v_name;

       

       

       v_endtime:=to_char(systimestamp,'yyyy-MM-dd hh24:mi:ss.ff');

     

     

      dbms_output.put_line('開始時間:'||v_begintime);

      dbms_output.put_line('接受時間:'||v_endtime);

   

end;

 

--

/**

開始時間:2018-03-23 09:29:31.490000000

接受時間:2018-03-23 09:29:31.537000000    --47000000

 

開始時間:2018-03-23 09:32:05.235000000

接受時間:2018-03-23 09:32:05.250000000    --15000000

 

--

開始時間:2018-03-23 09:32:52.942000000

接受時間:2018-03-23 09:32:52.958000000 16000000

 

 

開始時間:2018-03-23 09:33:26.529000000

接受時間:2018-03-23 09:33:26.576000000  47

**/

 

-- 建立索引

create  index    snameindex   on   t_stuinfo(sname);

 

drop  index  snameindex;

 

 

call   p_queryinfo('李966002');

 

-- job定時任務  資料庫定時任務

 

--自動化定時任務  對于表的歷史資料的一個定時清理

 

-- 1-10

 

-- t_stuinfo ,每隔1分鐘自動插入一條資料

delete  from   t_stuinfo;

commit;

 

create  sequence   seq_stuinfo

start  with 1

increment   by  1

nocache;

 

--建立一個存盤程序

create  or  replace  procedure  p_timetaskadddata

as

begin

 

  insert  into  t_stuinfo  

         values(seq_stuinfo.nextval,'李欣',default,'男');

    

  commit;

 

end;

 

 

--建立一個任務

variable  job2018  number;

 

-- 命令列視窗   提交這個定時任務

SQL> variable  job2018   number;

SQL> begin

  2  dbms_job.submit(:job2018,'p_timetaskadddata;',

  sysdate,'sysdate+1/1440');

  3  end;

  4  /

 

 

select   *   from   t_stuinfo

 

 

SQL> begin

  2  dbms_job.remove(:job2018);

  3  end;

  4  /

 

**PL/SQL procedure successfully completed

job2018

---------**

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/232441.html

標籤:其他

上一篇:[20191113]oracle共享連接模式埠2.txt

下一篇:oracle 修改密碼

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more