oracle之PLSql語言(一)
1、PLSQL語言
PLSQL語言是ORACLE公司對SQL語言的功能的擴充套件,它是將過程性結構與ORACLE SQL無縫的整合在一起而產生的一種結構化的強有力的語言,是一種高階資料庫程式設計語言。
2、SQL*PLUS
SQL*PLUS是ORACLE公司提供的一個工具程式,它用於執行SQL語句和PL/SQL塊,並且用於跟蹤、除錯SQL語句和PL/SQL塊。該工具程式不僅可以在命令列執行,也可以在WINDOWS視窗環境中執行。
2.1 在命令列執行SQL*PLUS
格式:sqlplus [username]/[password][@SERVER]
其中: username用於指定資料庫使用者名稱
password用於指定使用者口令
@SERVER用於指定主機字串或網路服務名,當連線到本地資料庫時,不需要提供網路服務名。
2.2 在WINDOWS環境中執行SQL*PLUS
2.2.1 具體方法:
開始->程式->Oracle - OraDb10g_home1->應用程式開發->SQL PLUS
2.2.2 在命令列執行SQLPLUSW命令
格式:sqlplusw [username]/[password][@SERVER]
2.3 SQL*PLUS的使用
2.3.1 直接編輯:使用ED命令或在SQL>提示符下鍵入,以 / 退出,鍵入 / 或RUN執行行。
2.3.2 使用檔案:@或START執行 .sql檔案。
例:查詢DEPT表中的所有行
例1、使用@命令
SQL> @ d:/dept.sql;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
例2、使用START命令
SQL> start d:/dept.sql;
DEPTNO DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
3、PL/SQL塊的組成
3.1 PL/SQL語言以塊為單位,塊中可以巢狀子塊。
3.2 一個基本的PL/SQL塊由3部分組成:
- 定義部分(DECLARE):PL/SQL中使用的變數、常量、遊標、複雜資料型別、和異常處理的名字都必須先定義後使用,並且必須定義在以關鍵字DECLARE開頭的定義部分。
- 執行部分 (BEGIN):該部分是PL/SQL塊的主體,包含該塊的可執行語句。該部分定義了塊的功能,是必須的。由關鍵字BEGIN開始,EXCEPTION或END結束。
- 異常處理部分(EXCEPTION):該部分包含該塊的異常處理程式,當該塊程式體中的某個語句出現異常時,程式控制轉到異常部分的相應的異常處理程式中進行進一步的處理,該部分由關鍵字EXCEPTION開始,END關鍵字結束。
DBMS_OUTPUT.PUT_LINE是依靠SQL*Plus命令Set Serveroutput ON來顯示輸出的。預設的Serveruotput已經關閉。
3.3 定義部分
簡單變數定義格式:
<variable_name> [constant] <datatype> [ [not null] {default | :=}<exception>];
例項:v_num number :=0;
說明:
①定義部分是包括在關鍵字DECLARE和BEGIN之間的部分,每條語句後用';'結束。
②每行只能定義一個識別符號。
③如果加上關鍵字CONSTANT,則表示所定義的識別符號為一個常量,必須為它賦初始值。
④每個識別符號必須以字母開頭,而且不分大小寫。如果定義的識別符號不能為空,則必須加上關鍵字NOT NULL,並賦初始值。
⑤為識別符號賦值時,使用賦值符號':=',預設值為NULL。
4、 賦值語句
賦值符號為':='
格式:<變數名>:=<表示式>
5、ORACLE常用資料型別
binary_integer:整數,主要用來計數而不是用來表示欄位型別
number:數字型,範圍10-130~10125
char:定長字元型,最大2000個字元。
varchar2:變長字串,最大4000個字元。
long:大文字,最大32760個字元,最長2G。
date:日期型,包括年、月、日、時、分、秒。
boolean:邏輯型,取值true、false、null,在plsql中不給初值,會被設定為null。在java中不給初值,設為false;
6、使用%TYPE
使用%TYPE宣告一個變數,可以使它的型別與某個變數或資料庫基本表中某個列的資料型別一致。
例1:
declare
Ename emp.eNAME%TYPE; //使其與emp表中的ename欄位的資料型別一致
JOB Ename%TYPE;
BEGIN
select ename,job into Ename,job
from emp
where empno=7369;
DBMS_OUTPUT.PUT_LINE(Ename||' , '||job);
END;
輸出:SMITH , CLERK
7、定義Table變數型別(類似陣列)
格式:
Type table變數名 is table of <field> <datatype> [[not null]{default | :=}<expression>] index by binary_integer;
例項:
declare
type type_table_emp_empno is table of emp.empno%Type index by binary_integer; //定義變數型別
v_empnos type_table_emp_empno; //宣告使用定義的變數型別
begin
v_empnos(0) :=7369;
v_empnos(2) :=7839;
v_empnos(-1) :=9999;
dbms_output.put_line(v_empnos(-1));
end;
定義Record變數型別(類似java中的類)即:定義與表結構資料型別一致的資料型別,再用這個型別宣告變數。就可以直接引用了,不用再挨個匹配各個欄位的資料型別,更加的方便。
記錄型別定義的一般格式:
TYPE <RecordTypeName> IS RECORD
(
<field> <datatype> [[not null]{default | :=}<expression>]
[,<field>......]
);
說明:記錄型別變數的屬性引用方法是' . '引用。
例1:
DECLARE
TYPE abc IS RECORD --定義記錄型別
(
aname emp.ename%type,
ajob emp.job%type,
adate emp.hiredate%type
);
a abc; --定義記錄變數
BEGIN
SELECT ENAME,JOB,HIREDATE INTO A.ANAME,A.AJOB,A.ADATE
FROM EMP
WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(A.ANAME||' , '||A.AJOB||' , '||A.ADATE);
END;
輸出:SMITH , CLERK , 17-12月-80
8、使用%ROWTYPE
使用%ROWTYEP宣告一個記錄型變數,可以使它的型別與某個基本表的資料結構一致。(就不用擔心表的結構發生變化了)
例1:
DECLARE
A EMP%ROWTYPE; //使用%type宣告record變數
BEGIN
SELECT ENAME,JOB,HIREDATE INTO A.ENAME,A.JOB,A.HIREDATE
FROM EMP
WHERE EMPNO=7369;
DBMS_OUTPUT.put_line(A.ENAME||' , '||A.JOB||' , '||A.HIREDATE);
END;
輸出:SMITH , CLERK , 17-12月-80
相關文章
- PLSQL程式語言SQL
- oracle plsqlOracleSQL
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- Oracle vs PostgreSQL Develop(25) - plsql vs plpgsql(語法嚴謹性)OracleSQLdev
- 7_Oracle truncate異常恢復之plsql修復OracleSQL
- Oracle vs PostgreSQL Develop(29) - COMMIT in PLSQLOracleSQLdevMIT
- 關於使用plsql操作oracle的一點小技巧和幾個常用的查詢語句SQLOracle
- Oracle 的PL/SQL語言使用OracleSQL
- 關於使用plsql操作oracle的一點小技巧和幾個常用的查詢語句BUSQLOracle
- C語言(一)C語言
- prometheus之查詢語言Prometheus
- 基於C#語言Oracle.ManagedDataAccess操作Oracle資料庫連線語句C#Oracle資料庫
- C語言-字串函式的實現(一)之strlenC語言字串函式
- Gradle 之語言基礎 GroovyGradle
- iOS 多語言化之痛iOS
- Flutter系列之Dart語言概述FlutterDart
- Go語言庫系列之emailGoAI
- Go語言淺嘗之方法Go
- C語言:一種高效、易學的程式語言C語言
- GO語言學習筆記之mac環境go語言配置Go筆記Mac
- 【記】《.net之美》之讀書筆記(一) C#語言基礎筆記C#
- Oracle vs PostgreSQL Develop(27) - PLSQL vs PLPGSQL(輸出引數)OracleSQLdev
- [C語言] 第一章|C語言入門第一課C語言
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- python之程式語言(簡介)01Python
- Go 語言操作 MySQL 之 CURD 操作GoMySql
- Go 語言操作 MySQL 之 SQLX 包GoMySql
- 語言演算法之:階乘演算法
- 開心檔之Go 語言常量Go
- MySQL之資料定義語言(DDL)MySql
- Go 語言實踐(一)Go
- C語言-記憶體函式的實現(一)之memcpyC語言記憶體函式memcpy
- 在不安裝oracle客戶端的情況下,使用PLSQLOracle客戶端SQL
- oracle下載安裝及PLSQL連線資料庫教程OracleSQL資料庫
- [譯]用javascript實現一門程式語言-語言構想JavaScript
- [Go語言寫介面]一、使用xcgui完成go語言第一個軟體介面GoGUI
- C 語言程式設計利器之 CLion程式設計
- Go 語言基礎之 Context 詳解GoContext