Oracle SQL學習筆記

2021-08-30 10:04:00 字數 2925 閱讀 2778

select level, childid, parentid from treetable start with parentid=0 connect by parentid=prior childid

select level, t.type_id, t.type_parentid from gwd_type_of_doc t start with t.type_parentid=0 connect by t.type_parentid=prior t.type_id order siblings by sortno asc

create or replace trigger "databasename"."triggername"

before insert on "tablename"

for each row

when (new.keyid is null)

begin

select seqencename.nextval into :new.keyid from dual;

end;

待續...

-- 表

create table test (names varchar2(12),

dates date,

num    int,

dou    double);

-- 檢視

create or replace view vi_test as

select * from test;

-- 同義詞

create or replace synonym aa

for dbusrcard001.aa;

-- 儲存過程

create or replace produce dd(v_id in employee.empoy_id%type)

asbegin

enddd;

-- 函式

create or replace function ee(v_id in employee%rowtype) return varchar(15)

isvar_test varchar2(15);

begin

return var_test;

exception when others then

end-- 三種觸發器的定義

create or replace trigger ff

alter delete

on test

for each row

declare

begin

delete from test;

if sql%rowcount < 0 or sql%rowcount is null then

rais_replaction_err(-20004,"錯誤")

end if

endcreate or replace trigger gg

alter insert

on test

for each row

declare

begin

if :old.names = :new.names then

raise_replaction_err(-2003,"編碼重複");

end if

endcreate or replace trigger hh

for update

on test

for each row

declare

begin

if updating then

if :old.names <> :new.names then

reaise_replaction_err(-2002,"關鍵字不能修改")

end if

end if

end-- 定義游標

declare

cursor aa is

select names,num from test;

begin

for bb in aa

loop

if bb.names = "oracle" then

end if

end loop;

end-- 速度優化,前一語句不後一語句的速度快幾十倍

select names,dates

from test,b

where test.names = b.names(+) and

b.names is null and

b.dates > date('2003-01-01','yyyy-mm-dd')

select names,dates

from test

where names not in ( select names

from b

where dates > to_date('2003-01-01','yyyy-mm-dd'))

-- 查詢重覆記錄

select names,num

from test

where rowid != (select max(rowid)

from test b

where b.names = test.names and

b.num = test.num)

-- 查詢表test中時間最新的前10條記錄

select * from (select * from test order by dates desc) where rownum < 11

-- 序列號的產生

create sequence row_id

minvalue 1

maxvalue 9999999999999999999999

start with 1

increment by 1

insert into test values(row_id.nextval,....)

oracle sql程式設計學習筆記

上週學習oracle sql 程式設計的前兩章,今天做一下總結。一 多表插入和merge 1.以前學的是mysql,沒有遇到多表插入,以及merge合併更新和插入語句的情況,所以看起來還是比較新穎的。多表插入 insert all first when cond1 into tab 1 when c...

學習筆記 oracle SQL優化

資料庫設計 設計的原則 1 熟悉需求 2 符合開發規範 命名規範 明確實體與資料表的關係 不能即沒有主鍵也沒有外來鍵 3 審核資料庫設計 4 基本表的特徵 1 原子性 字段不能再分解 2 原始性 是對原始資料的記錄,不是拼 接出來的資訊 3 演繹行 有基本表和關係表中的 資料,可以派生出任何想要的資...

ORACLE SQL效能優化(學習筆記)

記錄小的表應該在from的最後 多表查詢時 寫條件時from最後的哪個表應該先寫 where條件時要先寫表之間的連線 select 字句避免用 儘量減少訪問資料庫的次數 刪除全表時用truncate替代delete 不可恢復 盡量多使用 mit 使用表的別名 alias 使用exists替代in 並...