当前位置:首页 » 编程语言 » dividesql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

dividesql

发布时间: 2022-12-14 20:44:52

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程序设计中异常的抛出和处理是非常重要的内容。