pl/sql是什麼?
pl/sql是oracle在标準sql語言上的擴充。不僅允許嵌入sql語言,還可以定義常量和變量,允許使用條件語句和循環語句,允許使用例外處理各種錯誤。
作用:過程,函數,觸發器是用pl/sql編寫的且存在于在oracle中,可以在java程式中調用,pl/sql強大的資料庫過程語言。
1、建立一個表:
SQL> create table mytest(name varchar2(30),passwd varchar2(30));
2、建立過程
SQL> create procedure sp_prol is
begin
--執行部分
insert into mytest('hjadsfhas','sdkhfdsj');
end;
/
也可以使用(replace 表示如果有sp_prol就替換)
SQL> create or replace procedure sp_prol is
2 begin
3 --執行部分
4 insert into mytest('hjadsfhas','sdkhfdsj');
5 end;
6 /
show error ————————檢視錯誤
正确的過程建立
SQL> create or replace procedure sp_prol is
2 begin
3 insert into mytest values('hansjd','2sduf');
4 end;
5 /
Procedure created
3、執行過程
exec 過程名;
①exec 過程名 (參數值1,參數值2,。。。)
②call 過程名(參數值1,參數值2,。。。)
4、删除過程
drop procedure 過程名
使用pl/sql編寫子產品時,pl/sql的基礎機關是塊 ,其包括過程(存儲過程),函數,觸發器,包
編寫規範:
①注釋
單行注釋 — —
多行注釋/* */
②辨別符号的命名規範
1、當定義變量時,建議使用v_為字首,
2、定義常量時,建議使用c_為字首
3、當定義遊标時,使用_cursor作為字尾
4、定義例外時,使用e_為 字首 e_error
圖1
執行個體1—之包括執行部分的pl/sql塊
set serveroutput on ——打開輸出選項
begin
dbms_output.put_line('hello');
dbms_output是oracle所提供的包(類似于java的開發包),該包包含一些過程,put_line就是dbms_output包的一個過程。
案例:一
隻包括執行部分的pl/sql塊
SQL> begin
2 dbms_output.put_line('hello world!');
3 end;
4 /
PL/SQL procedure successfully completed
當打開輸出選項時:(就會在下面輸出内容)
SQL> set serveroutput on;
SQL> begin
2 dbms_output.put_line('你好,智障!0_0');
3 end;
4 /
你好,智障!0_0
PL/SQL procedure successfully completed
案例:二
包含定義部分和執行部分的pl/sql
SQL> declare
2 v_ename varchar2(5);
3 begin
4 select ename into v_ename from emp where empno =&no;
5 dbms_output.put_line('雇員名'||v_ename);
6 exception
7 when no_data_found then
8 dbms_output.put_line('異常');
9 end;
10 /
雇員名SCOTT
PL/SQL procedure successfully completed
SQL> declare
2 v_ename varchar2(5);--定義字元串常量
3 begin
4 select ename into v_ename from emp where empno=&no;--将查詢的值傳給v_ename
5 dbms_output.put_line('雇員名'||v_ename);--字元串連接配接||
6 end;
7 /
&:表示要接受從控制台輸入變量
過程
用于執行 特定的操作,當建立過程時,既可以指定輸入參數(in),也可以指定輸出參數(out)。通過在過程中使用輸入參數,可以将資料傳遞到執行部分;通過使用輸出參數,可以将執行部分的資料傳遞到應用環境。
執行個體:①可以輸入雇員名,可以修改雇員的工資,新工資
PL/SQL procedure successfully completed
SQL> create procedure sp_pro3(spName varchar2,newSal number) is
2 begin
3 update emp set sal = newSal where ename = spName;
4 end;
5 /
Warning: connection was lost and re-established
Procedure created
SQL> exec sp_pro3('SCOTT',4768);
PL/SQL procedure successfully completed
函數
用于傳回特定資料,當建立函數時,在函數頭部必須包含return子句,而在函數體内必須包含return語句傳回的資料。
使用create function 來建立函數,實際案例:
SQL> create function sp_fun2(spName varchar2) return
2 number is yearSal number(7,2);
3 begin
4 --執行部分
5 select sal*12+nvl(comm,0) into yearSal from emp where ename = spName;
6 return yearSal;
7 end;
8 /
建立一個函數名為sp_fun2 ,輸入sp_Name(形參),傳回一個number 叫yearSal 類型為number(7,2);
函數的調用
SQL> var abc number;
SQL> call sp_function('SCOTT') into:abc;
SQL>print abc
包
包用于在邏輯上組合過程和函數,它由包規範和包體兩部分組成。
①使用create package 指令來建立包:
SQL> create package sp_package is
2 procedure update_sal(name varchar2,newsal number);
3 function annual_income(name varchar2) return number;
4 end;
5 /
包的規範隻包含了過程和函數的說明,但是沒有過程和函數的實作代碼,包體用于實作包規範中的過程和函數,
②建立包體:
使用create package body 指令
SQL> create or replace package body sp_package is
2 procedure update_sal(name varchar2,newsal number)
3 is
4 begin
5 update emp set sal=newsal where ename = name;
6 end;
7 function annual_income(name varchar2)
8 return number is
9 annual_salary number;
10 begin
11 select (sal+nvl(comm,0))*12 into annual_salary from emp where ename=name;
12 return annual_salary;
13 end;
14 end;
15 /
Package body created
SQL>
包的執行:
SQL> exec sp_package.update_sal('SCOTT',120);
PL/SQL procedure successfully completed
SQL>