1. 關系資料庫中關系代數的基本運算有哪些
五種基本操作:並,差,積,選擇,投影;構成關系代數完備的操作集。其他非基本操作:可以用以上五種基本操作合成的所有操作。並(U)、交(⌒)、投影(π)選擇(σ)和笛卡兒積(×)。
傳統的集合運算:
1、並(UNION)設有兩個關系R和S,它們具有相同的結構。R和S的並是由屬於R或屬於S的元組組成的集合,運算符為∪。記為T=R∪S。
2、差(DIFFERENCE)R和S的差是由屬於R但不屬於S的元組組成的集合,運算符為-。記為T=R-S。
3、交(INTERSCTION)R和S的交是由既屬於R又屬於S的元組組成的集合,運算符為∩。記為T=R∩S。R∩S=R-(R-S)。
(1)dividesql擴展閱讀:
在資料庫世界裡,後關系資料庫仍舊泰然自若,保持其本色。
在現代IT界,SQL和XML已經成為資料庫的非常重要組成部分,這二者成為資料庫系統結構組成部分的歷史也很長久了,至於開始的時間我也很難記得了。
在60年代末和70年代初,出現了具備靈活欄位長度、嵌套表格、鬆散數據類型選擇的資料庫構架,這樣的資料庫系統不僅受市場歡迎,也得到大家的青睞。這些早期的資料庫系統雖然缺乏像XML一樣的標記功能,但是它們在實際工作中卻表現出和XML極為類似的功能。
描述這些資料庫系統的術語是「後關系」或者「多值」,它們沒有SQL關系資料庫知名,是因為這些資料庫系統缺乏許多新聞的宣傳度,我們很容易把它認為是一個實驗而已,然後這些實驗在人們的印象中就會半途而廢了,最終慢慢的消失。
2. SQL語句的數據類型
這是 提示TEXT的數據類型不能做除法。除法只能使用數字類型。
你這個做除法的兩個欄位,肯定有一個不是數字型。
轉一下。
3. 第三章 SQL語言元素(一)
InterSystems SQL命令(也稱為SQL語句)以關鍵字開頭,後跟一個或多個參數。其中一些參數可能是子句或函數,由它們自己的關鍵字標識。
InterSystems SQL關鍵字包括命令名稱,函數名稱,謂詞條件名稱,數據類型名稱,欄位約束,優化選項和特殊變數。它們還包括 AND , OR 和 NOT 邏輯運算符, NULL 列值指示符以及ODBC函數構造,例如 {d dateval} 和 {fn CONCAT(str1,str2)} 。
聚合函數是SQL固有函數,它計算列的所有值並返回單個聚合值。
這種寫法只能在mac routine里,類文件里編譯報錯。
如果將用戶提供的(外部)函數的使用配置為系統范圍的選項,則該SQL語句只能調用用戶提供的(外部)函數。默認為「否」。默認情況下,嘗試調用用戶提供的函數會發出 SQLCODE -372 錯誤。可以使用 %SYSTEM.SQL類的SetAllowExtrinsicFunctions() 方法在系統范圍內配置SQL對外部函數的使用。若要確定當前設置,請調用 $SYSTEM.SQL.CurrentSettings() ,該顯示顯示「允許在SQL語句中使用外部函數」選項。
不能使用用戶提供的函數來調用 %routine (名稱以%字元開頭的常式)。
嘗試這樣做會發出 SQLCODE -373 錯誤。
InterSystems SQL文字具有以下語法:
文字是一系列代表實際(文字)值的字元。它可以是數字或字元串。
空字元串是文字字元串;它由兩個單引號字元( '' )表示。 NULL 不是文字值;它表示沒有任何值。
注意:在嵌入式SQL中,不允許在字元串文字中使用以 ## 開頭的一些字元序列,如「使用嵌入式SQL」一章的「文字值」中所述。此限制不適用於其他SQL調用,例如動態SQL。
使用單引號( ' )字元作為字元串定界符。 SQL兼容性支持雙引號字元( 「 )的使用,但由於與定界標識符標准沖突,因此強烈建議不要使用。將一對雙引號字元 "" 解析為無效的定界標識符。並生成 SQLCODE -1 錯誤。
要在字元串中指定單引號字元作為字面字元,請指定一對這樣的字元作為字面轉義序列。
例如, 'a 'normal' string' 。
雙豎條( || )是首選的SQL連接操作符。
它可以用於連接兩個數字、兩個字元串或一個數字和一個字元串。
下劃線( _ )作為SQL連接操作符提供,以保證ObjectScript的兼容性。
此連接操作符只能用於連接兩個字元串。
如果兩個操作數都是字元串,並且兩個字元串都具有相同的排序規則類型,則所得的級聯字元串具有該排序規則類型。在所有其他情況下,連接的結果是排序類型 EXACT 。
使用 NULL 關鍵字表示沒有指定值。
在SQL中, NULL 始終是表示數據值因任何原因未指定或不存在的首選方式。
SQL零長度字元串(空字元串)由兩個單引號字元指定。
空字元串( " )與空字元串是不同的。
空字元串是一個已定義的值,一個不包含字元的字元串,一個長度為0的字元串。
一個零長度的字元串在內部由非顯示字元 $CHAR(0) 表示。
注意:不建議使用SQL零長度字元串作為欄位輸入值或欄位默認值。
使用 NULL 表示數據值的缺失。
在SQL編碼中應避免使用SQL零長度字元串。
但是,由於許多SQL操作都會刪除末尾的空格,所以只包含空格字元(空格和製表符)的數據值可能會導致SQL的零長度字元串。
注意,不同的SQL length函數返回不同的值: length 、 CHAR_LENGTH 和 DATALENGTH 返回SQL長度。
$LENGTH 返回ObjectScript表示長度。
長度不計算尾隨空格;
所有其他長度函數都計算末尾的空格。
NOT NULL數據約束要求欄位必須接收一個數據值;
不允許指定NULL而不是值。
這個約束不阻止使用空字元串值。
SELECT 語句的 WHERE 或 HAVING 子句中的 IS NULL 謂詞選擇空值;
它不選擇空字元串值。
IFNULL 函數計算一個欄位值,如果欄位值為 NULL ,則返回第二個參數中指定的值。
它不會將空字元串值視為非空值。
COALESCE 函數從提供的數據中選擇第一個非空值。
它將空字元串值視為非空值。
當 CONCAT 函數或 concenate 操作符( || )連接一個字元串和一個 NULL 時,結果是 NULL 。
如下面的例子所示:
AVG、COUNT、MAX、MIN 和 SUM 聚合函數在執行操作時忽略 NULL 值。
( COUNT * 統計所有行,因為不可能有一個所有欄位都為空值的記錄。)
SELECT 語句的 DISTINCT 關鍵字在其操作中包含 NULL ;
如果指定的欄位有空值, DISTINCT 返回一個空行.
AVG 、 COUNT 和 MIN 、聚合函數受空字元串值的影響。
MIN 函數將空字元串視為最小值,即使存在值為0的行。
MAX 和 SUM 聚合函數不受空字元串值的影響。
對大多數SQL函數提供 NULL 作為操作數將返回 NULL 。
任何以NULL作為操作數的SQL算術操作都返回 NULL 值。
因此,7 +零=零。
這包括二元運算加法( + )、減法( - )、乘法( * )、除法( / )、整數除法( )和取模( # ),以及一元符號運算符加號( + )和減號( - )。
算術操作中指定的空字元串將被視為0(零)值。
除法( / ),整數除法( ),或對空字元串( 6/ " )取模( # )會導致 <DIVIDE> 錯誤。
在SQL中, NULL 的長度是沒有定義的(它返回 < NULL > )。
然而,空字元串的長度被定義為長度為0。
如下面的例子所示:
如本例所示,SQL LENGTH 函數返回SQL長度。
可以使用 ASCII 函數將SQL的零長度字元串轉換為 NULL ,示例如下:
但是,對標准 SQL 的某些系統間IRIS擴展對 NULL 和空字元串的長度的處理是不同的。
$LENGTH函數返回這些值的InterSystems IRIS內部表示: NULL 表示為長度為0的已定義值,SQL空字元串表示為長度為0的字元串。
該功能與ObjectScript兼容。
這些值的內部表示方式的另一個重要位置是 %STRING 、 %SQLSTRING 和 %SQLUPPER 函數,它們將空格附加到值中。
因為 NULL 實際上沒有值,所以在它後面添加一個空格會創建一個長度為1的字元串。
但是一個空字元串確實有一個字元值,所以在它後面加上一個空格會創建一個長度為2的字元串。
如下面的例子所示:
注意,這個例子使用的是 CHAR_LENGTH ,而不是 LENGTH 。
因為 LENGTH 函數刪除了末尾的空格,所以 LENGTH(%STRING(NULL)) 返回長度為0的字元串;
LENGTH(%STRING(")) 返回長度為2的字元串, 因為 %STRING 追加的是前導空格,而不是尾隨空格。
當SQL NULL 輸出到ObjectScript時,它由ObjectScript空字元串( "" )表示,長度為0的字元串。
當SQL零長度字元串數據輸出到ObjectScript時,它由包含 $CHAR(0) 的字元串表示,該字元串長度為1。
在ObjectScript中,沒有值通常用空字元串( "" )表示。
當這個值被傳遞到嵌入式SQL中時,它會被視為空值,如下面的例子所示:
如果指定了一個未定義的輸入主機變數,嵌入式SQL將其值視為 NULL 。
當將NULL或空字元串值從嵌入式SQL傳遞到ObjectScript時, NULL 被轉換為長度為0的字元串,空字元串被轉換為長度為1的字元串。
如下面的例子所示:
在下面的例子中,SQL的空字元串加上一個空格被傳遞為長度為2的字元串:
4. 在SQL語言的語句中,實現投影操作的是哪個字句
select是查詢的意思.但查詢操作可以分為:選擇(select ),投影(project ),連接(join),
除(divide),並(union),差(except),交(intersection),笛卡爾積等.其中投影是從關系中選擇出若干屬性列組成新的關系.
例如:
select a from table1即為查詢table1關繫上a屬性上的投影.
5. sql投影操作
SQL語言中的"投影"的含義是指對 列的操作,從表裡選擇你所要的列 ,就是投影.比如:Select 姓名,性別這里就是對列的選擇 ,這個就叫投影From 表。
select是查詢的意思。但查詢操作可以分為:選擇(select),投影(project ),連接 (join),除(divide),並(union),差(except),交(intersection),笛卡兒積等。其中投影是從關系中選擇出若干屬性列組成新的關系。
高度非過程化:
非關系數據模型的數據操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數據操作。
用戶只需提出「做什麼」,而不必指明「怎麼做」,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不但大大減輕了用戶負擔,而且有利於提高數據獨立性。
6. 在sql查詢時如果某列報錯(比如除數為0,也可能是別的異常),如何讓查詢繼續,並且出錯列的值顯示為"error"
可以判斷除數是否等於0,如果等於0,你直接寫為'error'
case when 除數=0 then 'error'
else
正常進行除法運算
end
7. SQL 存儲過程 長字元串分割存儲
declare @inputStr varchar(max)
set @inputStr='H,SH600,AAA,123,456,567,566,565,H,SH600,ABC,542,34,35,367,765,H,SH600,AAC,52,314,325,3867,7865'
declare @divideFlag varchar(20)
set @divideFlag='H,'
declare @bnname varchar(8)
declare @gpdm varchar(8)
declare @gpcn int
declare @ydate int
declare @yopen int
declare @yhigh int
declare @substr varchar(200)
declare @pos1 int
declare @pos2 int
declare @sql varchar(400)
--如果字元串中有分隔符標記
while CHARINDEX(@divideFlag,@inputStr,0)>0
begin
set @pos1 = CHARINDEX(@divideFlag,@inputStr,0)
print '位置1 '+cast(@pos1 as varchar)
set @pos2 = CHARINDEX(@divideFlag,@inputStr,@pos1+1)
print '位置2 ' + cast(@pos2 as varchar)
if @pos2>0
begin
set @substr = SUBSTRING(@inputStr,@pos1,@pos2-@pos1)
print '截取處理串 '+ @substr
set @inputStr = SUBSTRING(@inputStr,@pos2,len(@inputStr))
--print @inputStr
end
else
begin
set @substr = SUBSTRING(@inputStr,@pos1,len(@inputStr))
print '截取處理串 '+ @substr
set @inputStr = 'empty'
--print @inputStr
end
--去掉開頭的分割標記
set @substr=substring(@substr,CHARINDEX(@divideFlag,@substr,0)+len(@divideFlag),len(@substr))
print '去掉開頭分割標記 ' + @substr
if right(@substr,1)=','
begin
set @substr = left(@substr,len(@substr)-1)
print '去掉末尾的逗號' + @substr
end
--取得表名稱
set @bnname = substring(@substr,1,charindex(',',@substr,0)-1)
print @bnname
--取表名稱後面的字元串
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
--取得第一個欄位
set @gpdm = substring(@substr,1,charindex(',',@substr,0)-1)
print @gpdm
--取得後面的字元串
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
set @gpcn = substring(@substr,1,charindex(',',@substr,0)-1)
print @gpcn
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
set @ydate = substring(@substr,1,charindex(',',@substr,0)-1)
print @ydate
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
set @yopen = substring(@substr,1,charindex(',',@substr,0)-1)
print @yopen
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
set @yhigh = substring(@substr,1,charindex(',',@substr,0)-1)
print @yhigh
set @substr=substring(@substr,charindex(',',@substr,0)+1,len(@substr))
print @substr
-- 拼接 插入的 sql 字元串
set @sql = 'insert into '+@bnname+' (gpdm,gpcn,ydate,yopen,yhigh)
values(
'''+@gpdm+''','+cast(@gpcn as varchar)+','+cast(@ydate as varchar)+','+cast(@yopen as varchar)+','+cast(@yhigh as varchar)+'
)'
print @sql
end
-- 拷貝到查詢分析器執行,可以看到列印出的消息,拼接的字元串應該可以用
8. sql語句幫助(高分懸賞)
api(application programming interfaces,應用程序介面)
ascii(american standard code for information interchange,美國國家標准信息交換代碼)
atl: activex template library(activex模板庫)
basic:beginner's all-purpose symbolic instruction code(初學者通用指令代碼)
com: component object model(組件對象模式)
dna: distributed internet application(分布式網際網路應用程序)
mfc: microsoft foundation classes(微軟基礎類庫)
sdk(software development kit,軟體開發工具包)
windows
ce(consumer electronics,消費電子)
dcom: distributing component object model,構造物體模塊
dhcp: dynamic host configuration protocol,動態主機分配協議
dmf: distribution media format
gdi(graphics device interface,圖形設備介面)
gui(graphics user interface,圖形用戶界面)
gpf(general protect fault,一般保護性錯誤)
hta: hypertext application,超文本應用程序
inf file(information file,信息文件)
ini file(initialization file,初始化文件)
ndis: network driver interface specification,網路驅動程序介面規范
nt(new technology,新技術)
qos: quality of service,服務質量
rrvp: resource reservation protocol(資源保留協議)
rtos(real time operating systems,實時操作系統)
sbfs: simple boot flag specification,簡單引導標記規范
vefat: virtual file allocation table(虛擬文件分配表)
(vxd,virtual device drivers,虛擬設備驅動程序)
wdm(windows driver model,視窗驅動程序模塊)
winsock: windows socket,視窗套介面
whql: windows hardware quality labs,windows硬體質量實驗室
whs: windows Xing host,視窗腳本程序
zam: zero administration for windows,零管理視窗系統
加密
ecc: elliptic curve crypto(橢圓曲線加密)
set: secure electronic transaction(安全電子交易)
語言
css: cascading style sheets,層疊格式表
dcd: X content deXion for xml: xml文件內容描述
dtd: X type definition,文件類型定義
html(hypertext markup language,超文本標記語言)
jvm: X virtual machine, X虛擬機
oji: open X vm interface,開放X虛擬機介面
sgml: standard generalized markup language,標准通用標記語言
smil: synchronous multimedia integrate language(同步多媒體集成語言)
vrml:virtual reality makeup language,虛擬現實結構化語言
vxml(voice extensible markup language,語音擴展標記語言)
xml: extensible markup language(可擴展標記語言)
xsl: extensible style sheet language(可擴展設計語言)
adimm(advanced al in-line memory moles,高級雙重內嵌式內存模塊)
amr(audio/modem riser;音效/數據機主機板附加直立插卡)
aha(accelerated hub architecture,加速中心架構)
ask ir(amplitude shift keyed infra-red,長波形可移動輸入紅外線)
atx: at extend(擴展型at)
bios(basic input/output system,基本輸入/輸出系統)
cse(configuration space enable,可分配空間)
db: device bay,設備插架
dmi(desktop management interface,桌面管理介面)
eb(expansion bus,擴展匯流排)
eisa(enhanced instry standard architecture,增強形工業標准架構)
emi(electromagnetic interference,電磁干擾)
escd(extended system configuration data,可擴展系統配置數據)
fbc(frame buffer cache,幀緩沖緩存)
firewire(火線,即ieee1394標准)
fsb: front side bus,前置匯流排,即外部匯流排
fwh( firmware hub,固件中心)
gmch(graphics & memory controller hub,圖形和內存控制中心)
gpis(general purpose inputs,普通操作輸入)
ich(input/output controller hub,輸入/輸出控制中心)
ir(infrared ray,紅外線)
irda(infrared ray,紅外線通信介面可進行區域網存取和文件共享)
isa: instry standard architecture,工業標准架構
isa(instruction set architecture,工業設置架構)
mdc(mobile daughter card,移動式子卡)
mrh-r(memory repeater hub,內存數據處理中心)
mrh-s(sdram repeater hub,sdram數據處理中心)
mth(memory transfer hub,內存轉換中心)
ngio(next generation input/output,新一代輸入/輸出標准)
p64h(64-bit pci controller hub,64位pci控制中心)
pcb(printed circuit board,印刷電路板)
pcba(printed circuit board assembly,印刷電路板裝配)
pci: peripheral component interconnect,互連外圍設備
pci sig(peripheral component interconnect special interest group,互連外圍設備專業組)
post(power on self test,加電自測試)
rng(random number generator,隨機數字發生器)
rtc: real time clock(實時時鍾)
kbc(keybroad control,鍵盤控制器)
sap(sideband address port,邊帶定址埠)
sba(side band addressing,邊帶定址)
sma: share memory architecture,共享內存結構
std(suspend to disk,磁碟喚醒)
str(suspend to ram,內存喚醒)
svr: switching voltage regulator(交換式電壓調節)
usb(universal serial bus,通用串列匯流排)
usdm(unified system diagnostic manager,統一系統監測管理器)
vid(voltage identification definition,電壓識別認證)
vrm (voltage regulator mole,電壓調整模塊)
zif: zero insertion force, 零插力
主板技術
gigabyte
acops: automatic cpu overheat prevention system(cpu過熱預防系統)
siv: system information viewer(系統信息觀察)
磐英
esdj(easy setting al jumper,簡化cpu雙重跳線法)
浩鑫
upt(usb、panel、link、tv-out四重介面)
晶元組
acpi(advanced configuration and power interface,先進設置和電源管理)
agp(accelerated graphics port,圖形加速介面)
i/o(input/output,輸入/輸出)
mioc: memory and i/o bridge controller,內存和i/o橋控制器
nbc: north bridge chip(北橋晶元)
piix: pci isa/ide accelerator(加速器)
pse36: page size extension 36-bit,36位頁面尺寸擴展模式
pxb: pci expander bridge,pci增強橋
rcg: ras/cas generator,ras/cas發生器
sbc: south bridge chip(南橋晶元)
smb: system management bus(全系統管理匯流排)
spd(serial presence detect,內存內部序號檢測裝置)
ssb: super south bridge,超級南橋晶元
tdp: triton data path(數據路徑)
tsc: triton system controller(系統控制器)
qpa: quad port acceleration(四介面加速)
3dnow!(3d no waiting)
alu(arithmetic logic unit,算術邏輯單元)
agu(address generation units,地址產成單元)
bga(ball grid array,球狀矩陣排列)
bht(branch prediction table,分支預測表)
bpu(branch processing unit,分支處理單元)
brach pediction(分支預測)
cmos: complementary metal oxide semiconctor,互補金屬氧化物半導體
cisc(complex instruction set computing,復雜指令集計算機)
clk(clock cycle,時鍾周期)
cob(cache on board,板上集成緩存)
cod(cache on die,晶元內集成緩存)
cpga(ceramic pin grid array,陶瓷針型柵格陣列)
cpu(center processing unit,中央處理器)
data forwarding(數據前送)
decode(指令解碼)
dib(al independent bus,雙獨立匯流排)
ec(embedded controller,嵌入式控制器)
embedded chips(嵌入式)
epic(explicitly parallel instruction code,並行指令代碼)
fadd(floationg point addition,浮點加)
fcpga(flip chip pin grid array,反轉晶元針腳柵格陣列)
fdiv(floationg point divide,浮點除)
femms:fast entry/exit multimedia state,快速進入/退出多媒體狀態
fft(fast fourier transform,快速熱歐姆轉換)
fid(fid:frequency identify,頻率鑒別號碼)
fifo(first input first output,先入先出隊列)
flip-chip(晶元反轉)
flop(floating point operations per second,浮點操作/秒)
fmul(floationg point multiplication,浮點乘)
fpu(float point unit,浮點運算單元)
fsub(floationg point subtraction,浮點減)
gvpp(generic visual perception processor,常規視覺處理器)
hl-pbga: 表面黏著,高耐熱、輕薄型塑膠球狀矩陣封裝
ia(intel architecture,英特爾架構)
icu(instruction control unit,指令控制單元)
id:identify,鑒別號碼
idf(intel developer forum,英特爾開發者論壇)
ieu(integer execution units,整數執行單元)
imm: intel mobile mole, 英特爾移動模塊
instructions cache,指令緩存
instruction coloring(指令分類)
ipc(instructions per clock cycle,指令/時鍾周期)
isa(instruction set architecture,指令集架構)
kni(katmai new instructions,katmai新指令集,即sse)
latency(潛伏期)
ldt(lightning data transport,閃電數據傳輸匯流排)
local interconnect(局域互連)
mesi(modified, exclusive, shared, invalid:修改、排除、共享、廢棄)
mmx(multimedia extensions,多媒體擴展指令集)
mmu(multimedia unit,多媒體單元)
mflops(million floationg point/second,每秒百萬個浮點操作)
mhz(million hertz,兆赫茲)
mp(multi-processing,多重處理器架構)
mps(multiprocessor specification,多重處理器規范)
msrs(model-specific registers,特別模塊寄存器)
naoc(no-account overclock,無效超頻)
ni:non-intel,非英特爾
olga(organic land grid array,基板柵格陣列)
ooo(out of order,亂序執行)
pga: pin-grid array(引腳網格陣列),耗電大
post-risc
pr(performance rate,性能比率)
psn(processor serial numbers,處理器序列號)
pib(processor in a box,盒裝處理器)
ppga(plastic pin grid array,塑膠針狀矩陣封裝)
pqfp(plastic quad flat package,塑料方塊平面封裝)
raw(read after write,寫後讀)
register contention(搶占寄存器)
register pressure(寄存器不足)
register renaming(寄存器重命名)
remark(晶元頻率重標識)
resource contention(資源沖突)
retirement(指令引退)
risc(reced instruction set computing,精簡指令集計算機)
sec: single edge connector,單邊連接器
shallow-trench isolation(淺槽隔離)
simd(single instruction multiple data,單指令多數據流)
sio2f(fluorided silicon oxide,二氧氟化硅)
smi(system management interrupt,系統管理中斷)
smm(system management mode,系統管理模式)
smp(symmetric multi-processing,對稱式多重處理架構)
soi: silicon-on-insulator,絕緣體矽片
sonc(system on a chip,系統集成晶元)
spec(system performance evaluation corporation,系統性能評估測試)
sqrt(square root calculations,平方根計算)
sse(streaming simd extensions,單一指令多數據流擴展)
superscalar(超標量體系結構)
tcp: tape carrier package(薄膜封裝),發熱小
throughput(吞吐量)
tlb(translate look side buffers,翻譯旁視緩沖器)
uswc(uncacheabled speculative write combination,無緩沖隨機聯合寫操作)
valu(vector arithmetic logic unit,向量算術邏輯單元)
vliw(very long instruction word,超長指令字)
vpu(vector permutate unit,向量排列單元)
vpu(vector processing units,向量處理單元,即處理mmx、sse等simd指令的地方)
library 庫,程序庫
linkage 連接
to load 裝入,寄存,寫入,載入
location 存儲單元
logger 登記器,記錄器
loop 循環
machine language 機器語言
magnetic storage 磁存儲器
magnetic tape 磁帶
matrix 矩陣
memory 存儲器
message 信息,報文
microcomputer 微型計算機
mole 組件,模塊
monitor 監視器,監督程序,管程
nanosecond 毫微秒
network 網路,網
numeric, numerical 數字的,數值的
octet 八位位組,八位位元組
operator 操作員
optical character reader 光符閱讀機
optical scanner 光掃描器
output 輸出
overflow 溢出,上溢
panel 平板
parameter 參數,參量
perforator 穿孔機
peripheral equipment 外圍設備,外部設備
personal computer 個人計算機
printed circuit 印製電路
printer 列印機
printout 列印輸出
to process 處理
processing unit 處理部件
program 程序
to program 程序編制
programmer 程序設計員
programming 程序設計,程序編制
pulse 脈沖
punch 穿孔
to punch 穿孔
punched card, punch card 穿孔卡片
punched tape, punch tape 穿孔紙帶
punch hole 孔,穿孔
random access 隨機存取
to read 讀
reader 閱讀程序
reading 閱讀
real time 實時
record, register 記錄
rendancy 冗餘
routine 例行程序
selector 選擇器,選擇符
sentinel 標記
sequence 序列,順序
sequential 順序的
serial 串列的.連續的
shift 移位,移數
signal 信號
simulation 模擬
simulator 模擬器,模擬程序
software 軟體,軟設備
sort 分類,排序
sorter 分類人員,分類機,分類程序,排序程序
storage 存儲器
to store 存儲
subroutine, subprogram 子程序
switch 開關
symbol 符號
symbolic language 符號語言
system 系統
tabulator 製表機
teleprinter 電傳打字機
terminal 終端
terminal unit 終端設備
timer 時鍾,精密計時器
time sharing 分時
timing 定時
track 磁軌
transcer 感測器,翻譯機
translator 翻譯程序,翻譯器
to update 更新
Winchester disk drive 溫徹斯特磁碟機,硬碟機
working storage 工作存儲器
c2c: card-to-card interleaving,卡到卡交錯存取
cc-numa(cache-coherent non uniform memory access,連貫緩沖非統一內存定址)
chrp(common hardware reference platform,共用硬體平台,ibm為powerpc制定的標准,可以兼容mac os, windows nt, solaris, os/2, linux和aix等多種操作系統)
emp: emergency management port,緊急事件管理埠
icmb: inter-chassis management bus, 內部管理匯流排
mpp(massive parallel processing,巨量平行處理架構)
mux: data path multiplexor,多重路徑數據訪問
9. PL/SQL的執行操作
過程:執行特定操作
函數:用於返回特定數據 語法:create [orreplace] procere procere_name(argument1 [model]datatype1,argment2 [mode2],...)
is [as]
pl/sql block;
1.建立過程:不帶任何參數
create or replaceprocecre out_time
is
begin
dbms_output.put_line(systimestamp);
end;
2.調用過程
set serveroutput on
exec out_time
set serveroutput on
call out_time();
3.建立過程:帶有IN參數
CREATE OR REPLACE PROCEDURE add_employee(eno NUMBER,NAME VARCHAR2,sal NUMBER,job VARCHAR2 DEFAULT 'clerk',dno NUMBER) ISe_integrity EXCEPTION;PRAGMA EXCEPTION_INIT(e_integrity, -2291);BEGININSERT intoimp(empno,ename,sal,job,deptno)VALUES(eno,NAME,sal,job,dno);EXCEPTIONWHEN p_val_on_index THENraise_application_error(-20000, '雇員號不能重復');WHEN e_integrity THENraise_application_error(-20001, '部門不存在');END add_employee;
4.建立過程:帶有OUT參數
create or replaceprocere qry_employee
(eno number,name outvarchar2,salary out number)
is
begin
selectename,sal into name,salary from emp where empno=eno;
exception
whenno_date_found then
raise_application_error(-20000,'該雇員不存在');
end;
當在應用程序中調用該過程時,必須要定義變數接受輸出參數的數據
sql>var name varchar2(10)
var salary number
exec qry_employee(7788,:name,:salary)
print name salary
5.建立過程:帶有INOUT參數(輸入輸出參數)
create or replaceprocere compute
(num1 in outnumber,num2 in out number)
is
v1number;
v2number;
begin
v1:num1/num2;
v2:mod(num1,num2);
num1:=v1;
num2:=v2;
end;
sql>var n1 number
var n2 number
exec :n1:=100
exec :n2:=30
exec ecmpute(:n1,:n2)
print n1 n2
6.為參數傳遞變數和數據
位置傳遞,名稱傳遞,組合傳遞三種
1.位置傳遞:在調用子程序時按照參數定義的順序為參數指定相應的變數或數值
exec add_dept(40,'sales','new york');
exec add_dept(10);
2.名稱傳遞:在調用子程序時指定參數名,並使用關聯符號=>為其提供相應的數值或變數
execadd_dept(dname=>'sales',dno=>50);
exec add_dept(dno=>30);
3.組合傳遞:同時使用位置傳遞和名稱傳遞
exec add_dept(50,loc=>'new york');
execadd_dept(60,dname=>'sales',loc=>'newyork');
7.查看過程原代碼
oracle會將過程名,源代碼以及其執行代碼存放到數據字典中.執行時直接按照其執行代碼執行
可查詢數據字典(user_source)
select textfrom user_source where name='add_dept';
刪除過程
dropprocere add_dept; 用於返回特定函數
語法:create [orreplace] function function_name
(argument1 [mode1] datatype1,
argument2 [mode2] datatype2,
.....)
returndatatype --函數頭部必須要帶有RETURN子句,至少要包含一條RETURN語句
is|as pl/sql block;
1.建立函數:不帶任何參數
create or replacefunction get_user
return varchar2
is
v_uservarchar2(100);
begin
selectusername into v_user from user_users;
returnv_user;
end;
2.使用變數接受函數返回值
sql>var v1 varchar2(100)
exec :v1:=get_user
print v1
在SQL語句中直接調用函數
selectget_user from d l;
使用DBMS_OUTPUT調用函數
setserveroutput on
execdbms_output.put_line('當前資料庫用戶:'||ger_user)
3.建立函數:帶有IN參數
create orreplace function get_sal(name in varchar2)
returnnumber
as
v_sal emp.sal%type;
begin
select sal into v_sal from emp where upper(ename)=upper(name);
return v_sal;
exception
when no_data_found then
raise_application_error(-20000,'該雇員不存在');
end;
4.建立函數:帶有out參數
create or replacefunction get_info(name varchar2,title out varchar2)
return varchar2
as
deptnamedept.dname%type;
begin
selecta.job,b.dname into title,deptname from emp a,dept b anda.deptno=b.deptno
anpper(a.ename)=upper(name);
returndeptname
exception
whenno_data_found then
raise_application_error(-20000,'該雇員不存在');
end;
sql>var job varchar2(20)
var dname varchar2(20)
exec :dname:=get_info('scott',:job)
print danme job
5.建立函數:帶有INOUT參數
create or replacefunction result(num1 number,num2 in out number)
return number
as
v_resultnumber(6);
v_remaindernumber;
begin
v_result:=num1/num2;
v_remainder:=mod(num1,num2);
num2:=v_remainder;
returnv_result;
exception
whenzero_divide then
raise_application_error(-20000,'不能除0');
end;
sql>var result1 number
var result2 number
exec :result2:=30
exec :result1:=result(100,:result2)
print result result2
6.函數調用限制
SQL語句中只能調用存儲函數(伺服器端),而不能調用客戶端的函數
SQL只能調用帶有輸入參數,不能帶有輸出,輸入輸出函數
SQL不能使用PL/SQL的特有數據類型(boolean,table,record等)
SQL語句中調用的函數不能包含INSERT,UPDATE和DELETE語句
7.查看函數源代碼
oracle會將函數名及其源代碼信息存放到數據字典中user_source
set pagesize 40
select text fromuser_source where name='result';
8.刪除函數
drop functionresult; 1.列出當前用戶的子程序
數據字典視圖USER_OBJECTS用於顯示當前用戶所包含的所有對象.(表,視圖,索引,過程,函數,包)
sql>col object_name format a20
select object_name,created,status from user_objects whereobject_type in ('procere','function')
2.列出子程序源代碼
select text fromuser_source where name='raise_salsry';
3.列出子程序編譯錯誤
使用SHOWERRORS命令確定錯誤原因和位置
show errorsprocere raise_salary
使用數據字典視圖USER_ERRORS確定錯誤原因和位置
col text formata50
selectline||'/'||position as line/col,text error from user_errors wherename='raise_salary';
4.列出對象依賴關系
使用數據字典視圖USER_DEPENDENCIES確定直接依賴關系
select name,typefrom user_dependencies where referenced_name='emp';
使用工具視圖DEPTREE和IDEPTREE確定直接依賴和間接依賴關系
先運行SQL腳本UTLDTREE.SQL來建立這兩個視圖和過程DEPTREE_FILL,然後調用DEPTREE_FILL填充這兩個視圖
sql>@%oracle_home%
dbmsadminutldtree
exec deptree_fill('TABLE','scott','emp')
執行後會將直接或間接依賴於SCOTT.EMP表的所有對象填充到視圖DEPTREE和IDEPTREE中.
select nested_level,name,type from deptree;
select * from ideptree
5.重新編譯子程序
當修改了被引用對象的結構時,就會將相關依賴對象轉變為無效(INVALID)狀態。
alter table emp addremark varchar2(10);
selectobject_name,object_type from user_objects wherestatus='invalid';
為了避免子程序的運行錯誤,應該重新編譯這些存儲對象
alter procereadd_employee compile;
alter view dept10compile;
alter functionget_info compile; 包用於邏輯組合相關的PL/SQL類型,項和子程序,由包規范和包體組成
1.建立包規范:包規范是包與應用程序之間的介面,用於定義包的公用組件,包括常量,變數,游標,過程,函數等
create [or replace]package package_name
is|as
p lic type and item declarations
s program specificationsend package_name;
create or replacepackage emp_package is
g_deptnonumber(3):=30;
procereadd_employee(eno number,name varchar2,salary number,dno numberdefault g_deptno);
procerefire_employee(eno number);
functionget_sal(eno number) return number;
end emp_package;
2.建立包體:用於實現包規范所定義的過程和函數
create [or replace]package body package_name
is|as
private type and item declarations
s program bodies
endpackage_name;
create or repalce package body emp_package is
functionvalidate_deptno(v_deptno number)
return boolean
is
v_temp int;
begin
select 1 into v_temp from dept where deptno=v_deptno;
return tr;
exception
when no_date_found then
return false;
end;
procere add_employee(eno number,name varchar2,salary number,dnonumber default g_deptno)
is
begin
if validate_deptno(dno) then
insert into emp(empno,ename,sal,deptno)vals(eno,name,salsry,dno);
else
raise_application_error(-20010,'不存在該部門');
end if;
exception
when p_val_on_index then
raise_application_error(-20012,'該雇員已存在');
end;
procere fire_employee(eno number) is
begin
delete from emp where empno=eno;
if sql%notfound then
raise_application_error(-20012,'該雇員不存在');
end if;
end;
functionget_sal(eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=eno;
return v_sal;
exception
whenno_data_found then
raise_application_error(-20012,'該雇員不存在');
end;
end emp_package;
3.調用包組件
3.1在同一個包內調用包組件
create or replacepackage body emp_package is
procere add_employee(eno number,name va har2,salary number,dnonumber default g_deptno)
is
begin
ifvalidate_deptno(dno) then
insert into emp(empno,ename,sal,deptno)vals(eno,name,salary,dno);
else
raise_application_error(-20010,'該部門不存在')
end if;
exception
when p_val_on_index then
raise_application_error(-20011,'該雇員已存在')
end;
.........
3.2調用包公用變數
execemp_package.g_deptno:=20
3.3調用包公用過程
execemp_package.add_employee(1111,'mary',2000)
3.4調用包公用函數
var salarynumber
exec:salary:=emp_package.get_sal(7788)
print salary
3.5以其他用戶身份調用包公用組件
connsystem/manager
execscott.emp_package.add_employee(1115,'scott',1200)
execscott.emp_package.fire_employee(1115)
3.6調用遠程資料庫包的公用組件
execemp_package.add_employee@orasrv(1116,'scott',1200)
4.查看源代碼:存放在數據字典USER_SCOURCE中
select text fromuser_source where name='emp-package' and type='package';
5.刪除包
drop packageemp_package;
6.使用包重載
重載(overload)是指多個具有相同名稱的子程序
1.建立包規范
同名的過程和函數必須具有不同的輸入參數,同名函數返回值的數據類型必須完全相同
create or replacepackage overload is
functionget_sal(eno number) return number;
functionget_sal(name varchar2) return number;
procerefile_employee(eno number);
procerefile_employee(name varchar2);
end;
2.建立包體
必須要給不同的重載過程和重載函數提供不同的實現代碼
create or replacepackage body overload is
function get_sal(eno number) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno=eno;
return v_sal;
exception
when no_data_found then
raise_application_error(-20020,'該雇員不存在');
end;
function get_sal(name varchar2) return number
is
v_sal emp.sal%type;
begin
select sal into v_sal from emp where upper(ename)=upper(name);
return v_sal;
exception
when no_data_found then
raise_application_error(-20020,'該雇員不存在');
end;
procere fire_employee(eno number) is
begin
delete from emp where empno=no;
if sql%notfound then
raise_application_error(-20020,'該雇員不存在');
end if;
end;
procerefire_employee(name varchar2) is
begin
delete from emp where upper(ename)=upper(name);
if sql%notfound then
raise_application_error(-20020,'該雇員不存在');
end if;
end;
end;
3.調用重載過程和重載函數
var sal1 number
var sal2 number
exec:sal1:=overload.get_sal('scott')
exec:sal2:=overload.get_sal(7685)
execoverload.fire_employee(7369)
execoverload.fire_employee('scott')
7.使用包構造過程
類似於高級語言中的構造函數和構造方法
1.建立包規范
包的構造過程用於初始化包的全局變數.
create or replacepackage emp_package is
minsalnumber(6,2);
maxsalnumber(6,2);
procereadd_employee(eno number,name varchar2,salary number,dnonumber);
procereupd_sal(eno number,salary number);
procereupd_sal(name varchar2,salary number);
end;
2.建立包體
包的構造過程沒有任何名稱,它是實現了包的其他過程後,以BEGIN開始,END結束的部分
create or replacepackage body emp_package is
procereadd_employee(eno number,name varchar2,salary number,dno number)
is
begin
if salarybetween minsal and maxsal then
insert into emp (empno,ename,sal,deptno)vals(eno,name,salary,dno);
else
raise_application_error(-20001,'工資不在范圍內');
end if;
exception
when p_val_on_index then
raise_application_error(-20002,'該雇員已經存在');
end;
procereupd_sal(eno number,salary number) is
begin
if salary between minsal and maxsal then
update emp set sal=salary where empno =eno;
if sql%notfound then
raise_application_error(-20003,'不存在雇員號');
end if;
else
raise_application_errpr(-20001,'工資不在范圍內');
end if;
end;
procere upd_sal(name varchar2,salary number) is
begin
if salary between minsal and maxsal then
update emp set sal=salary where upper(ename)=upper(name);
if sql%notfound then
raise_application_error(-20004,'不存在該雇員名');
end if;
else
raise_application_error(-20001,'工資不在范圍內');
end if;
end;
begin
selectmi(sal),max(sal) into minsal,maxsal from emp ;
end;
調用包公用組件:構造過程只調用一次
execemp_package.add_employee(1111,'mary',3000,20)
execemp_package.upd_sal('mary',2000)
8.使用純度級別
在SQL中引用包的公用函數,該公用函數不能包含DML語句(insert,update,delete),也不能讀寫遠程包的變數
為了對包的公用函數加以限制,在定義包規范時,可以使用純度級別(purity level)限制公用函數
語法:pragmarestrict_references (function_name,wnds[,wnps][,rnds][,rnps]);
wnds:用於限制函數不能修改資料庫數據(禁止DML)
wnps:用於限制函數不能修改包變數(不能給包變數賦值)
rnds:用於限制函數不能讀取資料庫數據(禁止SELECT操作)
rnps:用於限制函數不能讀取包變數(不能將包變數賦值給其他變數)
1.建立包規范
create or replacepackage purity is
minsalnumber(6,2);
maxsalnumber(6,2);
functionmax_sal return number;
functionmin_sal return number;
pragmarestrict_references(max_sal,wnps);--不能修改
pragmarestrict_references(min_sal,wnps);
end;
2.建立包體
create or replacepackage body purity is
function max_sal return number
is
begin
return maxsal;
end;
functionmin_sal return number
is
begin
return minsal;
end;
begin
select min(sal),max(sal) into minsal,maxsal from emp;
end;
3.調用包的公用函數
var minsal number
var maxsal number
exec :minsal:=purity.minsal()
exec :maxsal:=purity.maxsal()
print minsal maxsal PL/SQL處理異常不同於其他程序語言的錯誤管理方法,PL/SQL的異常處理機制與ADA很相似,有一個處理錯誤的全包含方法。
PL/SQL處理異常不同於其他程序語言的錯誤管理方法,PL/SQL的異常處理機制與ADA很相似,有一個處理錯誤的全包含方法。當發生錯誤時,程序無條件轉到異常處理部分,這就要求代碼要非常干凈並把錯誤處理部分和程序的其它部分分開。oracle允許聲明其他異常條件類型以擴展錯誤/異常處理。這種擴展使PL/SQL的異常處理非常靈活。
當一個運行時錯誤發生時,稱為一個異常被拋出。PL/SQL程序編譯時的錯誤不是能被處理得異常,只有在運行時的異常能被處理。在PL/SQL程序設計中異常的拋出和處理是非常重要的內容。