標籤:令行 home strong 關閉 end 語句 stat 資料類型 zha
- 本機安裝的oracle ,預設是開機啟動服務的,開機時間太慢,關閉了,需要開啟的服務:
OracleDBConsoleorcl
OracleOraDb10g_home1iSQL*Plus
OracleOraDb10g_home1TNSListener
OracleServiceORCL 這個後面的ORCL就是資料庫名字,官方術語叫做資料庫sid
2.開啟PL/SQL軟體,使用者名稱scott 登陸資料庫 ORCL 密碼 tiger
3.開啟一個測試視窗,如下
1 -- Created on 2018/6/3 by ADMINISTRATOR 2 declare 3 -- 聲明本地變數的地方,包括遊標(結果集類型變數),如果沒有,declare可以去掉 4 --相當於java的 public class A{} 5 i integer; 6 begin 7 -- 執行部分 8 --相當於Java的public static void main(String[] args) 9 --異常處理10 end;
4.列印helloworld
結果如下:
dbms_output是oracle的程式包,put_line()是調用的方法
在命令列中列印:需要先設定 set serveroutput on ,才會將列印語句列印出來,否則只執行不列印。
5. PLSQL變數的使用:
PLSQL中的變數分兩種:
(1)普通資料類型:char varchar2 date number(整數和小數) boolean long
(2)特殊變數類型(引用變數、記錄型變數)
變數的聲明方式為:變數名 變數類型(變數長度) ,例如:v_name varchar2(20)
變數賦值:
(1)聲明時使用 := 直接賦值:v_name varchar2(20) := ‘zhangsan’ 唯寫=,則是進行比較
(2)語句賦值: select 值 into 變數名
5.1 普通變數的使用
1 -- 聲明一個人的資訊 姓名 薪水 地址 2 declare 3 -- 姓名 不能使用name,這是保留字 4 v_name varchar2(50) := ‘張三‘; 5 -- 薪水 小數:number(總長度(小數加整數的位元),小數位元) v_sal number(6,2) --1000.00 6 v_sal number; 7 --地址 8 v_addr varchar2(200); 9 begin10 --直接賦值11 v_sal := 15000;12 --語句賦值13 select ‘上海市南京路‘ into v_addr from dual; --實際工作中應該是from 某個表 14 -- 列印變數 || 是拼接符,相當於java 的+15 dbms_output.put_line(‘姓名:‘ || v_name || ‘,薪水:‘ || v_sal || ‘,地址:‘ || v_addr);16 end;
執行結果:
5.2 引用變數的使用
引用變數:變數的類型和長度取決於表中欄位的類型和長度(變數的類型和長度參考資料表中欄位的類型和長度),通過 表名.列名%TYPE 指定變數的類型和長度,例如 v_name emp.ename%TYPE
引用型變數的好處:使用普通變數定義方式,需要知道表中列的類型,而使用參考型別不需要考慮列的類型,使用%TYPE是非常號的編程風格,因為它使得PL/SQL更加靈活,更加適應於對資料庫定義的更新。
1 -- 查詢emp表中7839號員工的個人資訊,列印姓名和薪水 2 declare 3 -- 姓名 定義的是引用變數 4 v_ename emp.ename%TYPE; 5 -- 薪水 6 v_sal emp.sal%TYPE; 7 8 begin 9 --查詢姓名和薪水並賦值給變數,。使用select into 語句賦值10 select ename, sal into v_ename, v_sal from emp where empno = 7839;11 dbms_output.put_line(‘姓名:‘ || v_ename || ‘,薪水:‘ || v_sal);12 13 end;
結果:
5.3 記錄型變數
記錄型變數 預設接接收 表中的一行資料,不能指定欄位,相當於java中的一個對象。
文法: 變數名稱 表名%ROWTYPE 例如 v_emp emp%rowtype; 通過 變數名.欄位名 的方式擷取變數中的值
1 --記錄型變數樣本:用該變數接收表中一行sql的資訊 2 declare 3 -- 記錄型變數 4 v_emp emp%ROWTYPE; 5 6 begin 7 --查詢所有欄位並賦值給變數,欄位名用v_emp.欄位名 表示 8 select * into v_emp from emp where empno = 7839; 9 dbms_output.put_line(‘姓名:‘ || v_emp.ename || ‘,薪水:‘ || v_emp.sal);10 11 end;
結果:
6.流程式控制制:
條件分支,文法:
BEGIN
IF 條件1 then 執行1;
Elsif 條件2 then 執行2 ; --注意不是 elseif ,是elsif
Else 執行3
End if;
END
基於oracle 的PL/SQL編程-1