ORACLE 筆記

  • 基礎sql語句

oralce 數據庫 使用連接查詢 如:

select * from usertable,goods

如上述sql 語句中是以goods 表為中心進行擴展,所查出的數據是以goods進行展開.

注意點:oralce 中 sql 語句執行的方式幾乎都是從下往上的順序進行執行,

如表連接時是以最後那個表為作為初始表開始讀取,同理where 條件也是 從後端進行讀取,

能優先過濾大量的信息,

就可以先放置在條件最後.

COMMIT:當你執行DML操作時,使用commit 的話就會直接執行到數據庫中.

在編寫sql 語句時盡量少的使用 Having ,能用where 替換就換.

        注意:orcale 增刪改差語法幾乎和sql server 相同這裡就不過多進行解釋。

  • IF ELSE 語法
--IF ELSE

Declare

--定義臨時變量

     x number(3):=47;

begin

if x<3 then

--dbms_output.put_line為輸出控制台語句

   dbms_output.put_line('X in less then 10');

elsif x=10 then

  dbms_output.put_line('X in less to 10');

 else

   dbms_output.put_line('X in less then 99');

end if;
  • WHILE 循環
declare

--定義臨時變量

        nums int ;

        total int ;

begin

--對變量進行賦值

  nums:=0;

  total:=0;

  while nums<5 loop

    nums:=nums+1;

    total:=total+nums;

    end loop;

   dbms_output.put_line('前五個自然數的和時'||total);

end;

  • FOR 循環
declare

        nums int ;

        total int ;

begin

    for v_value in 1 .. 10 loop

        dbms_output.put_line(v_value);

    end loop;

end;

  • 標號(<<>>)和 GOTO
--标号和GOTO   无条件跳转到指定的标号去的意思

declare

      nums int ;

begin

  for vlaues in 1 .. 10 loop

     if vlaues>5 then

        GOTO show;

     end if;

  end loop;

  <<show>>

   dbms_output.put_line(123);

end;

  • 游標
--游標

declare

   --創建游標 格式:cursor 游標名稱 is select 列明 from 表名;

   cursor demo_cursor is select id,name from lzdemos;

   --保存列名數據

   v_id lzdemos.id%type;

   v_name lzdemos.name%type;

begin

  --打開游標;

  open demo_cursor;

  --使用循環輸出表中數據

  loop

    --提取游標數據 格式:fetch 游標名稱 into 保存變量名稱;

    fetch demo_cursor into v_id,v_name;

    --輸出語句

    dbms_output.put_line('編號id'||v_id||'名稱'||v_name);

    --找到游標最近讀取記錄是否成功 使用%notfound 游標屬性 讀取失敗則結束循環

     exit when demo_cursor%notfound;

    end loop;

    --關閉游標

    close demo_cursor;

end;

  • 異常錯誤處理
--異常錯誤處理 exception

declare

    number1 int :=1;

    --定義自定義報錯

    numtry exception;

begin

  if number1!=1 then

    --如果進行if 就觸發報錯

    raise numtry;

  end if;

  --故意觸發其他類型報錯

  number1:='asd';

exception

  --觸發報錯后設置提示信息

  when numtry then

     dbms_output.put_line('自定義報錯觸發成功!<<123>>');

  when others then

     dbms_output.put_line('其他報錯觸發<<321>>');

end;

  • 儲存過程
--編寫一個只輸出無參的存儲過程

create or replace procedure proce_test

is

begin

   dbms_output.put_line('abc');

end;

--調用

BEGIN

    proce_test();

END;

--成功

--drop  procedure  proce_test 刪除
--有參存儲過程  --成功!

create or replace procedure proc_test(ids in number,names in varchar2)

as

s_num number :=ids;

s_names varchar2(20) :=names;

begin

  --dbms_output.put_line(s_num);

  --對lzdemos 執行修改語句

  update lzdemos set name=s_names where id=s_num;

end;

-- drop procedure proc_test


--調用存儲過程

declare

       s_num number :=4;

       s_names varchar2(20) :='qoq';

begin

   proc_test(s_num,s_names);

     proc_test(4,'lol');

end;

--查詢表

select * from lzdemos

  • 觸發器
--觸發器

--在lzdemos 表上新增數據時觸發的觸發器 (無參)

create or replace trigger insertdemo

after insert on lzdemos

for each row

  declare

 

  begin

    --新增時彈出abc

     dbms_output.put_line('abc');

 end insertdemo;

 --INSERT INTO LZDEMOS VALUES(4,'ABC','123');



--建立一個在lzdemos 中新增數據的話會同時跟新 user 表中的數據的觸發器 (有參)

 CREATE OR REPLACE TRIGGER INSERTDEMOUSER

 BEFORE INSERT ON LZDEMOS

 FOR EACH ROW

   BEGIN

       --dbms_output.put_line(:new.name||' '||:new.id);

     INSERT INTO LZUSER (ids,names,pass) values(:new.id,:new.name,:new.pass);

   END;

-- drop trigger INSERTDEMOUSER

INSERT INTO LZDEMOS (id,name,pass)VALUES(5,'ABC','123');

其中:BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发方式,前触发是在执行触发事件之前触发当前所创建的触发器,后触发是在执行触发事件之后触发当前所创建的触发器。

行觸發器和語句觸發器的區別:行觸發器要求當一個DML語句操作影數據庫中的多行數據時,對于其中的每個數據行,只要它們符合觸發約束條件,均激活一次觸發器。

而語句觸發器:將整個語句操作作為觸發器的觸發事件,當它符合約束條件時。激活一次觸發器。

当省略FOR EACH ROW 选项时,BEFORE 和AFTER 触发器为语句触发器,而INSTEAD OF 触发器则为行触发器。

  • 表於表的連接
--表和表之間的連接查詢

--內連接

select * from lzdemos  inner  join lzuser  on lzdemos.id=lzuser.ids;

--左連接

select * from lzdemos  left outer join lzuser  on lzdemos.id=lzuser.ids;

--右連接

select * from lzdemos  right outer join lzuser  on lzdemos.id=lzuser.ids;

--全連接

select * from lzdemos  full outer join lzuser  on lzdemos.id=lzuser.ids;

--自然連接  在兩張表中尋找那些數據類型和列名都相同的字段,然後自動地將它們連接起來,並返回所有符合條件的結果

select * from lzdemos natural join lzuser


select * from lzuser,lzdemos

十一、聚合函數

--聚合函數的使用 於sql server 一樣

select sum(id) from lzdemos

select avg(id) from lzdemos

select max(id) from lzdemos

select min(id) from lzdemos

select count(id) from lzdemos

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...