PLSQL 簡介及基本語法
什麼是PL/SQL
PLSQL 是 Oracle 對 sql 語言的過程化擴展,指在 SQL 命令語言中增加了過程處理語句(如分支、循環等),使 SQL 語言具有過程處理能力。把 SQL 語言的數據操縱能力與過程語言的數據處理能力結合起來,使得 PLSQL 面向過程但比過程語言簡單、高效、靈活和實用。
PL/SQL 是是由甲骨文公司在 90 年代初開發,以提高 SQL 的功能。
PL/SQL 是嵌入在 Oracle 數據庫中的三個關鍵的編程語言之一(只有 oracle支持)
PL/SQL 是過程語言(Procedural Language)與結構化查詢語言(SQL)結合而成的編程語言
PL/SQL 的工作原理
1、 PL/SQL 引擎接受 PL/SQL 塊並對其進行編譯執行
2、 該引擎執行所有過程語句
3、 將 SQL 語句發送給 Oracle 的 SQL 語句執行器
PL/SQL 基本結構及語法
--定義變量,說明部分 (變量說明,遊標申明,例外說明 〕
[declare]
--程序體的開始
begin 語句序列
(DML 語句)
--異常處理
[exception]
--程序體的結束
end;
示例:
--書寫第一個 plsql 程序塊 打印輸出字符串
begin
--打印輸出
dbms_output.put_line('hello plsql');
end;
變量
變量名與 java 中變量名的定義一樣,長度不能超過 32 位
語法:變量名 變量類型
v_name varchar2(20);
變量基本類型:
varchar2() 32767 個字節
char() 32767
number(m,n)
date
boolean true/false/null
binary_integer 整型
變量賦值:
變量在定義時可以初始化,使用 := 賦值
v_name varchar2(20) := ‘hello’;
常見類型的變量定義並賦值
declare
v_name varchar2(20) := 'hello';
v_id binary_integer := 12;
v_pai number(3,2) := 3.14;
v_sex char(1) := 'm';
v_married boolean := true;
v_date date := sysdate;
begin
dbms_output.put_line(v_name);
dbms_output.put_line(v_id);
dbms_output.put_line(v_pai);
dbms_output.put_line(v_sex);
-- if 判斷 後面會學
if v_married then
dbms_output.put_line('married');
else
dbms_output.put_line('no marry');
end if;
dbms_output.put_line(v_date);
end;
變量的複合類型
表類型
類似於 java 中的數組,用來存儲某種特定數據類型的數據
語法:
type 表類型名稱 is table of 類型 index of binary_integer;
declare
type table_type is table of varchar2(20) index by binary_integer;
v_name table_type;
begin
select name into v_name(0) from t_user where id=1;
select name into v_name(1) from t_user where id=123;
dbms_output.put_line(v_name(0));
end;
簡化的表類型
定義一個變量,其數據類型與已經定義的某個數據變量(尤其是表的某一列)類型一致時使用簡化編程
語法:%type
t_user.name%type; 表示類型是 t_user.name 字段的類型
declare
v_name t_user.name%type;
begin
select name into v_name from t_user where id=1;
dbms_output.put_line(v_name);
end;
記錄類型
作用:可以用來存儲一條記錄 類似於 java 中的 對象數組
語法:
type 記錄類型名 is record(變量名 類型 [,變量名 類型…])
declare
type row_type is record(v_id binary_integer,v_name varchar2(20));
v_record row_type;
begin
select id,name into v_record.v_id , v_record.v_name from t_user where id=1;
dbms_output.put_line(v_record.v_id);
dbms_output.put_line(v_record.v_name);
end;
作用:如果數據類型和數據庫中表的結構一致時可以使用記錄類型,返回一個記錄類型
簡寫:
%rowtype: 取表中的一條記錄中的字段類型組成一個記錄類型temp_emp%rowtype 表示當前變量的類型是跟 t_user 表中的記錄類型一致
declare
v_user temp_emp%rowtype;
begin
select id,name,age into v_user.id,v_user.name,v_user.agefrom t_user where id=1;
dbms_output.put_line(v_user.id || v_user.name || v_user.age);
end;
傳參
定義形參使用& ,如果是字符類型需要使用’’引起來
declare
type table_type is table of varchar2(20) index by binary_integer;
v_name table_type;
begin
select ename into v_name(0) from emp where empno=&no;
dbms_output.put_line(v_name(0));
end;
更多相關知識請戳我主頁哦,點個贊也行哦,謝謝!