第3章 包
/**建立包規範**/
create package emp_pkg is
procedure update_sal(name varchar2,newsal number);
function income(name varchar2) return number;
end;
/**建立包體**/
create package body emp_pkg is
procedure update_sal(name varchar2,newsal number)
isbegin
update emp set sal=newsal where lower(ename)=lower(name);
end;
function income(name varchar2) return number
issalary number(7,2);
begin
select sal*12+nvl(comm,0) into salary from emp where lower(ename)=lower(name);
return salary;
end;
end;
select * from emp where lower(ename)='scott';
/***呼叫儲存和函式******/
call emp_pkg.update_sal('scott',1500);
sql> var income number
sql> call emp_pkg.income('scott') into :income;
呼叫完成。
sql> print income;
income
----------
36000
/************建立觸發器**************/
下面的觸發器在更新表tb_emp之前觸發,目的是不允許在周二修改表:
觸發器已建立
sql> insert into dept(deptno,dname) values (90,'luowj');
insert into dept(deptno,dname) values (90,'luowj')
*第 1 行出現錯誤:
ora-20600: 不能在周二修改dept
ora-06512: 在 "scott.update_dept", line 3
ora-04088: 觸發器 'scott.update_dept' 執行過程中出錯
sql> show errors;
沒有錯誤。
/************%type用法和作用***************/
declare
v_ename varchar2(5);
v_sal number(6,2);
c_tax_rate constant number(3,2):=0.03;
v_tax_sal number(6,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line('雇員名:'||v_ename);
dbms_output.put_line('雇員工資:'||v_sal);
dbms_output.put_line('所得稅:'||v_tax_sal);
end;
select * from emp where empno='7788';
/**varchar2把所有字元都佔兩位元組處理(一般情況下)**/
select * from emp where empno='7744';如是填no值的時候是7844,就會報字串緩衝區太小,原因ename列
最大長度為10位元組,只能儲存5個字元
下面是用%type屬性 解決如上的問題
/* 當使用%type屬性定義變數時,它會按照資料庫列或其他變數來確定新變數的型別和長度*/
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
c_tax_rate constant number(3,2):=0.03;
v_tax_sal v_sal%type;
begin
select ename,sal into v_ename,v_sal from emp where empno=&eno;
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line('雇員名:'||v_ename);
dbms_output.put_line('雇員工資:'||v_sal);
dbms_output.put_line('所得稅:'||v_tax_sal);
end;
PLSQL入門與精通(第33章 包的本質)
我們一直在列舉說明pl sql的包的用途。但是包的本質是什麼的?個人理解,pl sql包的本質就是 全區域性 換句話來講全域性使用的東西,需要在包來定義。一般來說,在無名塊 或者過程和函式的本地定義部中定義的內容只能在本pl sql塊中使用。從這個意義上來說,這是乙個本地 區域性 的定義部。所謂本地...
第3章 函式
變數本質上是佔位符 def 函式名 引數1,引數2,引數n 函式體 語句塊 這裡的引數沒有型別,只有物件才有型別。python中為物件編寫介面,而不是為資料型別編寫。result add 3,4 add x,y 被執行之前,在計算機內是不存在的,直到 執行到這裡的時候,在計算機中就建立起來了乙個物件...
第3章 模板
這章主要將一些jinja2的頁面模板,個人覺得這種輪子或者黑盒的使用不必太過仔細,必要的時候再記就行了。3.4 鏈結 這種引入了url rof 函式,其作用是傳入檢視函式的名字,以及一些引數,生產對應的url鏈結 1 例如 url rof index external true http local...