標籤:
1:三範式
a:一張表裡必須要有主鍵,列不可分。
b:如果一張表裡面,兩個欄位作為主鍵,那麼其他欄位不能夠部分依賴這兩個欄位。
2:pl sql:Procedural language(過程語言)
寫一個輸出hello world的小程式。
begin
dbms.output.put_line(‘hello world!‘);
end;
/
set serveroutput on; --設定伺服器端輸出
寫一個聲明變數,然後賦值,最後輸出的小程式。
declare
v_name varchar(20);
begin
v_name := ‘jack‘;
dbms_output.put_line(v_name);
end;
/
exception 捕捉異常,如果執行程式過程中發生錯誤,會把異常跑到
exception代碼塊,others then就是上面的異常沒有捕捉到時,會捕捉
所有的異常。
declare
v_num number;
begin
v_num := 0;
dbms_output.put_line(2/v_num);
exception
when others then
dbms_output.put_line(‘error‘);
end;
/
3:顯示目前使用者
show user;
4:變數的聲明
declare
id number(4) :=1001;
name varchar2(30) :=‘jack‘;
begin
dbms_output.put_line(name);
end;
/
聲明的變數用來放表裡面的資料,但是表結構可能會產生變化,為了
在表結構產生變化時,聲明的變數的類型也會產生變化,可以使用%type
declare
id number(4) :=1001;
name emp.empno%type :=‘jack‘;
begin
dbms_output.put_line(name);
end;
/
5:聲明資料類型table 代表數群組類型
聲明一個資料類型type_table_name
declare
type type_table_name is table of emp.empno%type index by binary_integer;
v_empnos type_table_name;
begin
v_empnos(0):=1001;
v_empnos(1):=1002;
v_empnos(-1):=1003;
dbms_output.put_line(v_empnos(-1));
end;
/
6:聲明資料類型record ,相當於java中的類
declare
type type_record_dept is record
(
deptno dept.deptno%type,
dname dept.dname%type,
loc dept.loc%type
);
v_dept type_record_dept;
begin
v_dept.deptno :=1001;
v_dept.dname :=‘sales‘;
v_dept.loc :=‘shanghai‘;
dbms_output.put_line(v_dept.loc);
end;
/
可以使用%rowtype來聲明record,這樣,即使dept這張表的資料結構發生變化,變數結構
也會隨之發生變化。
declare
v_dept dept%rowtype;
begin
v_dept.deptno :=1001;
v_dept.dname :=‘sales‘;
v_dept.loc :=‘shanghai‘;
dbms_output.put_line(v_dept.loc);
end;
/
7:pl中的select語句
select empno into v_empno from emp where empno=‘1001‘; --pl中的select語句有且僅能查到一條資料
declare
v_empno emp.empno%type;
v_ename emp.ename%type;
begin
select empno,ename into v_empno,v_ename from emp where empno=‘1001‘;
dbms_output.put_line(v_empno || ‘ ‘ || v_ename);
end;
/
使用%rowtype放一條記錄
declare
v_emps emp%rowtype;
begin
select * into v_emps from emp where empno=1001;
dbms_output.put_line(v_emps.empno || ‘ ‘||v_emps.ename ||‘ ‘||v_emps.sal);
end;
/
8:pl sql中的dml語句
向表中插入資料:
declare
v_empno emp.empno%type :=1006;
v_ename emp.ename%type :=‘markson‘;
begin
insert into emp (empno,ename) values(v_empno,v_ename);
commit;
end;
/
更新表中的資料
declare
v_deptno emp.deptno%type;
begin
v_deptno := 10;
update emp set sal=sal/2 where deptno=v_deptno;
dbms_output.put_line(‘影響了‘||sql%rowcount||‘條記錄!‘);
commit;
end;
/
sql%rowcount :sql是一個關鍵字,rowcount表示執行上一條語句產生多少影響。
9:pl sql中ddl語言
在執行語句前面加上 execute immediate,然後create語句放在單引號內,如果單引號內有單引號,
那麼使用雙引號來代替單引號。
begin
execute immediate ‘create table T(id number(4), name varchar(20) not null)‘;
end;
10:pl sql中的分支結構if elsif else
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=1001;
if(v_sal<=1000) then
dbms_output.put_line(‘low‘);
elsif(v_sal<=2000) then
dbms_output.put_line(‘middle‘);
else
dbms_output.put_line(‘high‘);
end if;
end;
/
11:pl sql中的迴圈結構
pl sql中的迴圈必須以loop開始,以end loop結束
相當於java中的do... while 結構
先迴圈再判斷:
declare
i binary_integer :=1;
begin
loop
dbms_output.put_line(i);
i :=i+1;
exit when(i>=11);
end loop;
end;
/
相當於java中的while結構,先判斷,在迴圈:
declare
i binary_integer :=1;
begin
while(i<11) loop
dbms_output.put_line(i);
i :=i+1;
end loop;
end;
/
for迴圈:相當於java中的forhance迴圈,可以正序,也可以倒序:
declare
i binary_integer :=1;
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;
for k in reverse 1..10 loop
dbms_output.put_line(k);
end loop;
end;
/
cursor:遊標
recursion:遞迴
drigger:觸發器
oracle學習總結4