日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle 原理: PL/SQL基础

發布時間:2024/10/14 数据库 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 原理: PL/SQL基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、PL/SQL 功能和特點

?PL/SQL 是過程語言(Procedural Language)和結構化查詢(SQL)語言結合而成的編程語言;PL/SQL是SQL的擴展,支持大對象、集合類型。還可以給SQL語言增加程序邏輯。支持SQL,在PL/SQL種可以使用:數據操縱命令、事物控制命令、游標控制、SQL函數和SQL運算符。PL/SQL有更佳的性能,當用戶把PL/SQL塊發送到服務器端,由Oracle服務器端編譯、運行、再把結果返回給用戶,可以移植性,可執行在任何操作系統上。PL/SQL可以通過存儲過程限制對用戶的訪問來提高安全性。

? Oracle服務器中有PL/SQL引擎 和 SQL引擎 ,PL/SQL引擎執行 for ,if 等過程語句 , 而SQL引擎執行 insert、delete等SQL語句

PL/SQL分為三個部分,聲明部分、可執行部分、異常處理部分,其中可執行部分是必須要有的。

DECLARE --聲明變量在這里寫 BEGIN --過程程序在這里寫 EXCEPTION --異常處理在這里寫 END;

?

二、Oracle 11g的PL/SQL對序列的改進,即無dual序列的使用

----創建一個序列 seq ---- create sequence seq start with 1 increment by 1; ----SQL語句的序列取值必須用select ----- select seq.nextval from dual ; ----過程語句不需要select 也可以進行序列取值 declare se positive ; --正整數 beginse :=seq.nextval ;-- select seq.nextval into se from dual ;dbms_output.put_line(se); end; / drop sequence seq;

三、控制語句和continue語句

條件判斷語句: if ..then? ? ;? ? if..then..else; if..then.elsif..;? ?case? 語句;

循環語句: Loop? [無條件循環內容?]?end loop ;? ? while [循環條件] loop [循環內容] end loop;? ?

? ? ? ? ? ? ? ? ? for [循環體變量]?in [循環體變量的取值范圍]? loop? [循環內容]? end loop;

注: Loop? [無條件循環內容?]?end loop 通常和exit搭配,相當于JAVA的break ,如果沒有控制語句搭配,相當于無限循環。

? ? ?continue; 直接進入下一個循環;

?

在PL過程語句中是不能使用DDL語句的,即create、drop、truncate等操作。想要用DDL語句必須用動態SQL執行:

execute immediate sql_command [into 執行結果集][using 綁定變量集?]

---可重跑的SQL腳本:創建并初始化表示例------ declaresql_command varchar2(500);isExsit number ; beginselect count(1) into isExsit from user_tables where table_name ='SALARY_TBL'; if isExsit <> 0 then sql_command :='truncate table salary_tbl';execute immediate sql_command;sql_command :='drop table salary_tbl';execute immediate sql_command;end if;sql_command := ' create table salary_tbl(employer_nm varchar(20),department varchar(20) not null,salary number not null,leader_nm varchar(20) )';execute immediate sql_command;for i in 1..13000loopinsert into salary_tbl values('雇傭者'||i,'部門'||Mod(i,50),100+sqrt(i),'雇傭者'||Mod(i,20)); if Mod(i,1000)=0 then commit;end if;end loop;commit; end; /---goto 語句示例declaresql_command varchar2(500);isExsit number ;i number := 1; beginselect count(1) into isExsit from user_tables where table_name ='SALARY_TBL'; if isExsit <> 0 then sql_command :='truncate table salary_tbl';execute immediate sql_command;sql_command :='drop table salary_tbl';execute immediate sql_command;end if; sql_command := ' create table salary_tbl(employer_nm varchar(20),department varchar(20) not null,salary number not null,leader_nm varchar(20) )';execute immediate sql_command;<<code_aa>> -insert into salary_tbl values('雇傭者'||i,'部門'||Mod(i,50),100+sqrt(i),'雇傭者'||Mod(i,20)); if Mod(i,1000)=0 then commit;end if;i :=i+1;if i <13000 then goto code_bb;else goto code_aa;end if ; <<code_bb>> commit; end; /

?

四,Oracle11g 中的錯誤處理

異常分為預定義異常和用戶自定義異常。預定義異常就是系統自帶的異常,而用戶自定義異常(raise)是自己聲明的相當于java的throw。

預定義異常? exception? when [異常名] then ... when [異常名2 ] then ...??

raise_application_error (異常編號,異常信息)? 即異常中斷程序并輸出異常信息

declare department varchar(20) := '';nullinserterror1 exception; beginif department is null thenraise nullinserterror1;end if;insert into salary_tbl values('雇傭者9999',department,100,'雇傭者4'); exception when nullinserterror1 thendbms_output.put_line('自定義空值插入異常');raise_application_error (-20001,'空值異常'); end; /

在輸出結果中顯示

總結

以上是生活随笔為你收集整理的Oracle 原理: PL/SQL基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。