微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐