安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

PLSQL语法手冊

7月23日 霸王亭投稿
  目录
  第一部分SQL语法部分。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
  一、CREATETABLE语句。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3
  二、CREATESEQUENCE语句。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5
  三、CREATEVIEW语句。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6
  四、INSERT语句:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
  五、UPDATE语句:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
  六、DELETE语句:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10
  七、TRUNCATE语句:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11
  八、各类FUNCTIONS:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12
  1。转换函数:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12
  2。日期函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。16
  3。字符函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。20
  4。数值函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。28
  5。单行函数:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。33
  6。多行函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。35
  第二部分PLSQL语法部分。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。39
  一、PLSQL语言简介。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。39
  二、变量说明。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。46
  三、PLSQL控制程序流。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。50
  四、存储过程。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。53
  五、存储函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。53
  六、PACKAGE。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。53
  七、触发器。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。56
  第一部分SQL语法部分
  一、Createtable语句
  语句:CREATETABLE〔schema。〕tablename
  ({columndatatype〔DEFAULTexpr〕〔columnconstraint〕。。。
  tableconstraint}
  〔,{columndatatype〔DEFAULTexpr〕〔columnconstraint〕。。。
  tableconstraint}〕。。。)
  〔〔PCTFREEinteger〕〔PCTUSEDinteger〕
  〔INITRANSinteger〕〔MAXTRANSinteger〕
  〔TABLESPACEtablespace〕
  〔STORAGEstorageclause〕
  〔RECOVERABLEUNRECOVERABLE〕
  〔PARALLEL(〔DEGREE{integerDEFAULT}〕
  〔INSTANCES{integerDEFAULT}〕
  )
  NOPARALLEL〕
  〔CACHENOCACHE〕
  〔CLUSTERcluster(column〔,column〕。。。)〕〕
  〔ENABLEenableclause
  DISABLEdisableclause〕。。。
  〔ASsubquery〕
  表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段。createtable语句的基本形式用来在数据库中创建容纳数据行的表。createtable语句的简单形式接收表名,列名,列数据类型和大小。除了列名和描述外,还可以指定约束条件,存储参数和该表是否是个cluster的一部分。
  Schema用来指定所建表的owner,如不指定则为当前登录的用户。
  Tablename用来指定所创建的表名,最长为30个字符,但不可以数字开头(可为下划线),但不可同其它对象或Oracle的保留字冲突。
  Column用来指定表中的列名,最多254个。
  Datatype用来指定列中存储什幺类型的数据,并保证只有有效的数据才可以输入。
  columnconstraint用来指定列约束,如某一列不可为空,则可指定为notnull。
  tableconstraint用来指定表约束,如表的主键,外键等。
  Pctfree用来指定表中数据增长而在Oracle块中预留的空间。DEFAULT为10,也就是说该表的每个块只能使用90,10给数据行的增大时使用。
  Pctused用来指定一个水平线,当块中使用的空间低于该水平线时才可以向该中加入新数据行。
  Parallel用来指定为加速该表的全表扫描可以使用的并行查询进程个数。
  Cache用来指定该表为最应该缓存在SGA数据库缓冲池中的候选项。
  Cluster用来指定该表所存储的cluster。
  Tablespace用来指定用数据库的那个分区来存储该表的数据。
  RecoverableUnrecoverable用来决定是否把对本表数据所作的变动写入Redo文件。以恢复对数据的操作。
  As当不指定表的各列时,可利用As子句的查询结果来产生数据库结构和数据。
  例:
  1)createtablemytab1e(mydecdecimal,
  myintinteter)
  tablespaceuserdata
  pctfree5
  pctused30;
  2)createtablemytable2
  as(selectfrommytable1);
  二、createsequence语句
  语句:CREATESEQUENCE〔schema。〕sequencename
  〔INCREMENTBYinteger〕
  〔STARTWITHinteger〕
  〔MAXVALUEintegerNOMAXVALUE〕
  〔MINVALUEintegerNOMINVALUE〕
  〔CYCLENOCYCLE〕
  〔CACHEintegerNOCACHE〕
  〔ORDERNOORDER〕
  序列用来为表的主键生成唯一的序列值。
  Incrementby指定序列值每次增长的值
  Startwith指定序列的第一个值
  Maxvalue指定产生的序列的最大值
  Minvalue指定产生的序列的最小值
  Cycle指定当序列值逵到最大或最小值时,该序列是否循环。
  Cache指定序列生成器一次缓存的值的个数
  Order指定序列中的数值是否按访问顺序排序。
  例:
  1)createsequencemyseq
  incrementby4
  startwith50
  maxvalue60
  minvalue50
  cycle
  cache3;
  2)
  
  sqlinsertintonew(newid,lastname,firstname)
  values(news。nextval,’daur’,’permit’);
  三、createview语句
  语句:CREATE〔ORREPLACE〕〔FORCENOFORCE〕VIEW〔schema。〕viewname
  〔(alias〔,alias〕。。。)〕
  ASsubquery
  〔WITHCHECKOPTION〔CONSTRAINTconstraint〕〕
  视图实际上是存储在数据库上旳select语句。每次在sql语句中使用视图时,表示该视图的select语句就用来得到需要的数据。
  Orreplace创建视图时如果视图已存在,有此选项,新视图会覆盖旧的
  视图。
  Force如有此选项,当视图基于的表不存在或在该模式中没有创建视图的权限时,也可以建立视图。
  Assubquery产生视图的select查询语句
  Withcheckoption如果视图是基于单表的且表中所有的非空列都包含在视图中时,该视图可用于insert和update语句中,本选项保证在每次插入或更新数据后,该数据可以在视图中查到
  例:
  1)createorplaceviewnewv
  as
  selectsubstr(d。dlastname,1,3),
  d。dlastname,d。dfirstname,b。bstartdate,b。blocation
  fromnew1d,
  new2b
  whered。dlastnameb。
  四、INSERT语句:
  1。语法
  INSERTINTO〔schema。〕{tableviewsubquery}〔dblink〕
  〔(column〔,column〕。。。)〕
  {VALUES(expr〔,expr〕。。。)subquery}
  〔WHEREcondition〕
  2。插入单行
  使用VALUES关键词为新行的每一列指定一个值。如果不知道某列的值,可以使用NULL关键词将其值设为空值(两个连续的逗号也可以表示空值,也可使用NULL关键词)
  插入一行时试图为那些NOTNULL的列提供一个NULL值,会返回错误信息。
  举例:
  插入一条记录到DEPARTMENT表中
  INSERTINTODEPARTMENT
  (DEPARTMENTID,NAME,LOCATIONID)
  VALUES(01,’COMPUTER’,167)
  3。插入多行
  将SELECT语句检索出来的所有数据行都插入到表中。这条语句通常在从一个表向另一个表快速复制数据行。
  举例:
  INSERTINTOORDERTEMP
  SELECTA。ORDERID,B。ITEMID,C。NAME,E。FIRSTNAME。E。LASTNAME,
  A。ORDERDATE,A。SHIPDATE,D。DESCRIPTION,B。ACTUALPRICE,
  B。QUANTITY,B。TOTAL
  FROMSALESORDERA,ITEMB,CUSTOMERC,
  PRODUCTD,EMPLOYEEE
  WHEREMONTHSBETWEEN(TODATE(A。ORDERDATE),TODATE(017月91))0
  ANDA。CUSTOMERIDC。CUSTOMERID
  ANDC。SALESPERSONIDE。EMPLOYEEID
  ANDA。ORDERIDB。ORDERID
  ANDB。PRODUCTIDD。PRODUCTID
  4。从其它表复制数据:
  要快速地从一个表向另一个尚不存在的表复制数据,可以使用CREATETABLE语句定义该表并同时将SELECT语句检索的结果复制到新表中。
  CREATETABLEEMPLOYEECOPY
  AS
  SELECT
  FROMEMPLOYEE
  五、UPDATE语句:
  1。语法
  UPDATE〔schema。〕{tableviewsubquery}〔dblink〕〔alias〕
  SET{(column〔,column〕。。。)(subquery)
  column{expr(subquery)}}
  〔,{(column〔,column〕。。。)(subquery)
  column{expr(subquery)}}〕。。。
  〔WHEREcondition〕
  UPDATE语句更新所有满足WHERE子句条件的数据行。同样,该语句可以用SELECT语句检索得到。但SELECT必须只检索到一行数据值。否则报错。而且每更新一行数据,均要执行一次SELECT语句。
  举例:
  UPDATEEMPLOYEECOP
  SETSALARY
  SALARY400
  WHERETONUMBER(TOCHAR(HIREDATE,YYMMDD))850101
  UPDATEITEMCOPA
  SETA。ACTUALPRICE
  (
  SELECTB。LISTPRICE
  FROMPRICEB,SALESORDERC
  WHEREA。PRODUCTIDB。PRODUCTIDAND
  A。ORDERIDC。ORDERIDAND
  TONUMBER(TOCHAR(C。ORDERDATE,YYYYMMDD))BETWEEN
  TONUMBER(TOCHAR(B。STARTDATE,YYYYMMDD))AND
  NVL(TONUMBER(TOCHAR(ENDDATE,YYYYMMDD)),29991231)
  )
  六、DELETE语句:
  1。语法
  DELETE〔FROM〕〔schema。〕{tableview}〔dblink〕〔alias〕
  〔WHEREcondition〕
  DELETE语句删除所有满足WHERE子句条件的数据行。
  举例:
  DELETEFROMitem
  WHEREORDERID510
  七、TRUNCATE语句:
  1。语法
  TRUNCATE〔schema。〕table
  八、各类Functions:
  1。转换函数:
  1。1。函數:TOCHAR
  语法:
  TOCHAR(number〔,format〕)
  用途:
  将一个数值转换成与之等价的字符串。如果不指定格式,将转换成最简单的字符串形式。如果为负数就在前面加一个减号。
  Oracle为数值提供了很多格式,下表列出了部分可接受的格式:
  元素
  描述
  示例
  值
  结果
  9hr返回指定位数的数值,前面为0,显示为空格
  99999784hr578
  1234567hr45。895‘784’
  ‘578’
  ‘’
  ‘46’
  插入小数点
  9999。99784
  45。3482‘784。00’
  ’45。35’
  在结果串的指定位置插入逗号
  9,999,999784
  1234567hr0。44‘784’
  ‘1,234,567’
  ‘0’
  返回值前面加一个元符号
  99,999784
  578‘784’
  ‘578’
  B
  结果的整数部分如果是0,就显示成空格
  B9999。9784
  0。44‘784。0’
  ‘。4’
  S
  返回有正负号的数值
  S9999
  784hr‘784’
  EEEE
  以科计数法表示数值
  9。9EEEE45
  0。0666‘4。5E01’
  ‘6。7E02’
  1。2。函數:TOCHAR
  语法:
  TOCHAR(date〔,format〕)
  用途:
  将按format参数指定的格式将日期值转换成相应的字符串形式。同样,Oracle提供许多的格式模型,用户可以用它们的组合来表示最终的输出格式。唯一限制就是最终的掩码不能超过22个字符。下表列出了部分日期格式化元素。
  Oracle为数值提供了很多格式,下表列出了部分可接受的格式:
  格式
  意义
  D
  用数字表示星期几(1,2,3,4,5,6,7)
  DY
  用三个字符表示星期几的缩写形式(MON)
  DAY
  星期几的完整表示(MONDAY)
  DD
  用数字表示一月中的几号
  DDD
  用数字表示年份中的天数
  W
  一月中的星期数
  WW
  一年中的星期数
  MM
  用数字表示月数
  MON
  用三个字母表示月的缩写(APR)
  MONTH
  月的完整英文表示(FEBRUARY)
  Y
  年份中的最后一个数字(9)
  YY
  年份中的最后二个数字(99)
  YYY
  年份中的最后三个数字(999)
  YYYY
  年份用四个数字表示(1999)
  YEAR
  年份的字母全部拼写(NINETEENNINETYNINE)
  AM或PM
  午前或午后表示符
  HH
  用小时表示日期
  MI
  分钟表示小时
  SS
  秒钟表示分钟
  SSSS
  自午夜以来的秒数(这个数字经常在086399之间)
  1。3。函數:TODATE
  语法:
  TODATE(string,format)
  用途:
  根据给定的格式将一个字符串转换成Oracle的日期值。
  该函数的主要用途是用来验证输入的日期值。在应用程序中,用户必须验证输入日期是否有效,如月份是否在112之间和日期中的天数是否在指定月份的天数内。
  1。4。函數:TONUMBER
  语法:
  TONUMBER(string〔,format〕)
  用途:
  该函数将一个字符串转换成相应的数值。对于简单的字符串转换数值(例如几位数字加上小数点)。格式是可选的。
  2。日期函数
  2。1。函數:ADDMONTHS
  语法:
  ADDMONTHS(date,number)
  用途:
  在日期date上加指定的月数,返回一个新日期。如果给定为负数,返回值为日期date之前几个月的日期。number应当是个整数,如果是小数,正数被截为小于该数的最大整数,负数被截为大于该数的最小整数。
  例如:
  SELECTTOCHAR(ADDMONTHS(sysdate,1),
  DDMONYYYY)Nextmonth
  FROMdual
  Nextmonth
  19FEB2000
  2。2。函數:LASTDAY
  语法:
  LASTDAY(date)
  用途:
  返回日期date所在月份的最后一天的日期。
  例如:
  SELECTSYSDATE,LASTDAY(SYSDATE)Last,
  LASTDAY(SYSDATE)SYSDATEDaysLeft
  FROMDUAL
  SYSDATELastDaysLeft
  19JAN0031JAN0012
  2。3。函數:MONTHSBETWEEN
  语法:
  MONTHSBETWEEN(date1,date2)
  用途:
  返回两个日期之间的月份。如果两个日期月份内的天数相同(或者都是某个月的最后一天),返回值是整数。否则,返回值是小数,每于131月来计算月中剩余天数。如果第二个日期比第一个日期还早,则返回值是负数。
  例如:
  SELECTMONTHSBETWEEN(TODATE(02021992,MMDDYYYY),
  TODATE(01011992,MMDDYYYY))
  Months
  FROMDUAL
  Months
  1。03225806
  SELECTMONTHSBETWEEN(TODATE(02291992,MMDDYYYY),
  TODATE(01311992,MMDDYYYY))
  Months
  FROMDUAL
  Months
  1hr2。4。函數:NEXTDAY
  语法:
  NEXTDAY(date,day)
  用途:
  该函数返回日期date指定若天后的日期。注意:参数day必须为星期,可以星期几的英文完整拼写,或前三个字母缩写,或数字1,2,3,4,5,6,7分别表示星期日到星期六。例如,查询返回本月最后一个星期五的日期。
  例如:
  SELECTNEXTDAY((lastday(sysdate)7),FRIDAY)
  FROMdual
  NEXTDAY(
  28JAN00
  2。5。函數:ROUND
  语法:
  ROUND(date〔,format〕)
  用途:
  该函数把一个日期四舍五入到最接近格式元素指定的形式。如果省略format,只返回date的日期部分。例如,如果想把时间(24010014:58:41)四舍五入到最近的小时。下表显示了所有可用格式元素对日期的影响。
  FormatElement
  Result
  SS
  24010014:58:41
  MI
  24010014:59:00
  HH
  24010015:00:00
  DD
  25010000:00:00
  MM
  01020100:00:00
  YY
  01010000:00:00
  CC
  01010000:00:00
  例如:
  SELECTtochar(ROUND(sysdate,HH),DDMONYYHH24:MI:SS)
  FROMdual
  TOCHAR(ROUND(SYSDATE,HH),DDMONYYHH24:MI:SS)
  24JAN0015:00:00
  2。6。函數:TRUNC
  语法:
  TRUNC(date〔,format〕)
  用途:
  TRUNC函数与ROUND很相似,它根据指定的格式掩码元素,只返回输入日期用户所关心的那部分,与ROUND有所不同,它删除更精确的时间部分,而不是将其四舍五入。
  例如:
  SELECTTRUNC(sysdate)
  FROMdual
  TRUNC(SYS
  24JAN00
  3。字符函数3。1。函數:ASCII
  语法:
  ASCII(character)
  用途:
  返回指定字符的ASCII码值。如果为字符串时,返回第一个字符的ASCII码值。
  例如:
  SELECTASCII(Z)
  FROMdual
  ASCII(Z)
  90hr3。2。函數:CHR
  语法:
  CHR(number)
  用途:
  该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符。该函数通常用于向字符串中添加不可打印字符。
  例如:
  SELECTCHR(65)BCDEF
  FROMdual
  CHR(65
  ABCDEF
  3。3。函數:CONCAT
  语法:
  CONCAT(string1,string2)
  用途:
  该函数用于连接两个字符串,将string2跟在string1后面返回,它等价于连接操作符()。
  例如:
  SELECTCONCAT(‘Thisisa’,’computer’)
  FROMdual
  CONCAT(THISISA,
  Thisisacomputer
  它也可以写成这样:
  SELECT‘Thisisa’’computer’
  FROMdual
  THISISACOMPUT
  Thisisacomputer
  这两个语句的结果是完全相同的,但应尽可能地使用操作符。
  3。4。函數:INITCAP
  语法:
  INITCAP(string)
  用途:
  该函数将字符串string中每个单词的第1个字母变成大写字母,其它字符为小写字母。
  例如:
  SELECTINITCAP(firstname。lastname)
  FROMemployee
  WHEREdepartmentid12
  INITCAP(FIRSTNAME。LASTN
  Chris。Alberts
  Matthew。Fisher
  Grace。Roberts
  Michael。Douglas
  3。5。函數:INSTR
  语法:
  INSTR(inputstring,searchstring〔,n〔,m〕〕)
  用途:
  该函数是从字符串inputstring的第n个字符开始查找搜索字符串的第m次出现,如果没有找到搜索的字符串,函数将返回0。如果找到,函数将返回位置。
  例如:
  SELECTINSTR(thequickslyfoxjumpedoverthe
  lazybrowndog,the,2,1)
  FROMdual
  INSTR(THEQUICKSLYFOXJUMPEDOVERTHELAZYBROWNDOG,THE,2,1)
  31hr3。6。函數:INSTRB
  语法:
  INSTRB(inputstring,searchstring〔,n〔,m〕〕)
  用途:
  该函数类似于INSTR函数,不同之处在于INSTRB函数返回搜索字符串出现的字节数,而不是字符数。在NLS字符集中仅包含单字符时,INSTRB函数和INSTR函数是完全相同的。
  3。7。函數:LENGTH
  语法:
  LENGTH(string)
  用途:
  该函数用于返回输入字符串的字符数。返回的长度并非字段所定义的长度,而只是字段中占满字符的部分。以列实例中,字段firstname定义为varchar2(15)。
  语法:
  SELECTfirstname,LENGTH(firstname)
  FROMemployee
  FIRSTNAMELENGTH(FIRSTNAME)
  JOHN4
  KEVIN5
  3。8。函數:LENGTHB
  语法:
  LENGTHB(string)
  用途:
  该函数用于返回输入字符串的字节数。对于只包含单字节字符的字符集来说LENGTHB函数和LENGTH函数完全一样。
  3。9。函數:LOWER
  语法:
  LOWER(string)
  用途:
  该函数将字符串string全部转换为小写字母,对于数字和其它非字母字符,不执行任何转换。
  3。10。函數:UPPER
  语法:
  UPPER(string)
  用途:
  该函数将字符串string全部转换为大写字母,对于数字和其它非字母字符,不执行任何转换。
  3。11。函數:LPAD
  语法:
  LPAD(string,length〔,’set’〕)
  用途:
  在字符串string的左边加上一个指定的字符集set,从而使串的长度达到指定的长度length。参数set可以是单个字符,也可以是字符串。如果string的长度小于length时,取string字符串的前length个字符。
  语法:
  SELECTfirstname,LPAD(firstname,20,)
  FROMemployee
  FIRSTNAMELPAD(FIRSTNAME,20,)
  JOHNJOHN
  KEVINKEVIN3。12。函數:RPAD
  语法:
  RPAD(string,length〔,’set’〕)
  用途:
  在字符串string的右边加上一个指定的字符集set,从而使串的长度达到指定的长度length。参数set可以是单个字符,也可以是字符串。如果string的长度小于length时,取string字符串的前length个字符。
  例如:
  SELECTfirstname,rpad(firstname,20,)
  FROMemployee
  FIRSTNAMERPAD(FIRSTNAME,20,)
  JOHNJOHN
  KEVINKEVIN
  3。13。函數:LTRIM
  语法:
  LTRIM(string〔,’set’〕)
  用途:
  该函数从字符串的左边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止。
  例如:
  SELECTfirstname,ltrim(firstname,BA)
  FROMemployee
  WHEREfirstnameBARBARA
  FIRSTNAMELTRIM(FIRSTNAM
  BARBARARBARA
  3。14。函數:RTRIM
  语法:
  RTRIM(string〔,’set’〕)
  用途:
  该函数从字符串的右边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止。具有NULL值的字段不能与具有空白字符的字段相比较。
  这是因为空白字符与NULL字符是完全不同的两种字符。该函数的另外一个用途是当进行字段连接时去掉不需要的字符。
  3。15。函數:SUBSTR
  语法:
  SUBSTR(string,start〔,length〕)
  用途:
  该函数从输入字符串中取出一个子串,从start字符处开始取指定长度的字符串,如果不指定长度,返回从start字符处开始至字符串的末尾。
  3。16。函數:REPLACE
  语法:
  REPLACE(string,searchset〔,replaceset〕)
  用途:
  该函数将字符串中所有出现的searchset都替换成replaceset字符串。可以使用该函将字符串中所有出现的符号都替换成某个有效的名字。如果不指定replaceset,则将从字符串string中删除所有的搜索字符串searchset。
  例如:
  SELECTREPLACE(abcdefbdcdabc,dsssdcdrd,abc,ABC)
  FROMdual
  REPLACE(ABCDEFBDCDABC,
  ABCdefbdcdABC,dsssdcdrd3。17。函數:TRANSLATE
  语法:
  TRANSLATE(string,searchset,replaceset)
  用途:
  该函数用于将所有出现在搜索字符集searchset中的字符转换成替换字符集replaceset中的相应字符。注意:如果字符串string中的某个字符没有出现在搜索字符集中。则它将原封不动地返回。如果替换字符集replaceset比搜索字符集searchset小,那么搜索字符集searchset中后面的字符串将从字符串string中删除。
  例如:
  SELECTTRANSLATE(GYK87M,0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ,
  9999999999xxxxxxxxxxxxxx)
  FROMdual
  TRANSL
  xx99x
  4。数值函数4。1。函數:ABS
  语法:
  ABS(number)
  用途:
  该函数返回数值number的绝对值。绝对值就是一个数去掉符号的那部分。
  4。2。函數:SQRT
  语法:
  SQRT(number)
  用途:
  该函数返回数值number的平方根,输入值必须大于等于0,否则返回错误。
  4。3。函數:CEIL
  语法:
  CEIL(number)
  用途:
  该函数返回大于等于输入值的下一个整数。
  4。4。函數:FLOOR
  语法:
  FLOOR(number)
  用途:
  该函数返回小于等于number的最大整数。
  4。5。函數:MOD
  语法:
  MOD(n,m)
  用途:
  该函数返回n除m的模,结果是n除m的剩余部分。m,n可以是小数,负数。
  4。6。函數:POWER
  语法:
  POWER(x,y)
  用途:
  该函数执行LOG函数的反操作,返回x的y次方。
  4。7。函數:ROUND
  语法:
  ROUND(number,decimaldigits)
  用途:
  该函数将数值number四舍五入到指定的小数字。如果decimaldigits为0,则返回整数。decimaldigits可以为负数。
  4。8。函數:TRUNC
  语法:
  TRUNC(number〔,decimalpluces〕)
  用途:
  该函数在指定的小数字上把一个数值截掉。如果不指定精度,函数预设精度为0。decimalpluces可以为负数。
  4。9。函數:SIGN
  语法:
  SIGN(number)
  用途:
  该函数返回number的符号,如果number为正数则返回1,为负数则返回1,为0则返回0。
  4。10。函數:SIN
  语法:
  SIN(number)
  用途:
  该函数返回弧度number的正弦值。
  4。11。函數:SINH
  语法:
  SINH(number)
  用途:
  该函数返回number的返正弦值。
  4。12。函數:COS
  语法:
  COS(number)
  用途:
  该函数返回弧度number的三角余弦值。要用角度计算余弦,可以将输入值乘以0。01745转换成弧度后再计算。
  4。13。函數:COSH
  语法:
  COSH(number)
  用途:
  该函数返回输入值的反余弦值。
  4。14。函數:TAN
  语法:
  TAN(number)
  用途:
  该函数返回弧度number的正切值。
  4。15。函數:TANH
  语法:
  TANH(number)
  用途:
  该函数返回数值number的反正切值。
  4。16。函數:LN
  语法:
  LN(number)
  用途:
  该函数返回number自然对数。
  4。17。函數:EXP
  语法:
  EXP(number)
  用途:
  该函数返回e(2。71828183)的number次方。该函数执行自然对数的反过程。
  4。18。函數:LOG
  语法:
  LOG(base,number)
  用途:
  该函数返回base为底,输入值number的对数。
  5。单行函数:
  单行函数中可以对任何数据类型的数据进行操作。
  5。1。函數:DUMP
  语法:
  DUMP(expression〔,format〔,start〔,length〕〕〕)
  用途:
  该函数按指定的格式显示输入数据的内部表示。下表列出了有效的格式。
  格式代码
  描述
  8hr八进制
  10hr十进制
  16hr十六进制
  17hr单字符
  例如:
  SELECTDUMP(FARRELL,16)
  FROMdual
  DUMP(FARRELL,16)
  Typ96Len7:46,41,52,52,45,4c,4c
  5。2。函數:GREATEST
  语法:
  GREATEST(listofvalues)
  用途:
  该函数返回列表中项的最大值。对数值或日期来说,返回值是最大值或最晚日期,如果列表中包含字符串,返回值是按字母顺序列表中的最后一项。
  例如:
  SELECTGREATEST(123,234,432,112)
  FROMdual
  GREATEST(123,234,432,112)
  4325。3。函數:LEAST
  语法:
  LEAST(listofvalues)
  用途:
  该函数返回列表中项的最小值。对数值或日期来说,返回值是最小值或最早日期,如果列表中包含字符串,返回值是按字母顺序列表中的第一项。
  例如:
  SELECTLEAST(sysdate,sysdate10)
  FROMdual
  LEAST(SYS
  10JAN00
  5。4。函數:NVL
  语法:
  NVL(expression,replacementvalue)
  用途:
  如果表达式不为空值,函数返回该表达式的值,如果是空值,就返回用来替换的值。
  例如:
  SELECTlastname,
  NVL(TOCHAR(COMMISSION),NOTAPPLICABLE)
  FROMemployee
  WHEREdepartmentid30
  LASTNAMENVL(TOCHAR(COMMISSION),NOTAPPLICABLE)
  ALLEN300
  WARD500
  MARTIN1400
  BLAKENOTAPPLICABLE
  6。多行函数
  组函数可以对表达式的所有值操作,也可以只对其中不同值进行操作,组函数的语法如下所示:
  function〔DISTINCTALLexpression〕
  如果既不指定DISTINCT,也不指定ALL,函数将对查询返回的所有数据行进行操作。不能在同一个SELECT语句的选择列中同时使用组函数和单行函数。
  6。1。函數:AVG
  语法:
  AVG(〔DISTINCTALL〕expression)
  用途:
  对查询返回的数据行求平均值。
  例如:
  SELECTAVG(sal)Average
  FROMemp
  Average
  2073。21429
  6。2。函數:COUNT
  语法:
  COUNT(〔DISTINCTALL〕expression)
  用途:
  计算表达式的个数。要计算EMP表中雇员的个数。
  例如:
  SELECTCOUNT(deptno)
  FROMemp
  COUNT(DEPTNO)
  14hrSELECTCOUNT(distinctdeptno)
  FROMemp
  COUNT(DISTINCTDEPTNO)
  36。3。函數:MAX
  语法:
  MAX(〔DISTINCTALL〕expression)
  用途:
  对查询返回的行集求最大值。如果有多个最大值,将所有均返回。要检索公司中最高工资的雇员。
  语法:
  SELECTename,sal
  FROMemp
  WHEREsal(selectmax(sal)
  FROMemp)
  ENAMESAL
  KING5000
  6。4。函數:MIN
  语法:
  MIN(〔DISTINCTALL〕expression)
  用途:
  对查询返回的行集求最小值。如果有多个最小值,将所有均返回。
  例如:
  SELECTMIN(lastname)
  FROMemployee
  MIN(LASTNAME)
  ADAMS
  6。5。函數:SUM
  语法:
  SUM(〔DISTINCTALL〕expression)
  用途:
  计算查询返回的所有非空数值的总和。如果返回的数据都是空值,则该函数也返回空值。
  例如:
  SELECTSUM(salary)Total
  FROMemployee
  WHEREdepartmentid10
  Total
  8750hr6。6。函數:VARIANCE
  语法:
  VARIANCE(〔DISTINCTALL〕expression)
  用途:
  该函数计算返回所有行的统计方差。
  例如:
  SELECTVARIANCE(salary)
  FROMemployee
  VARIANCE(SALARY)
  973659。27
  伪列
  返回值
  Sequence。CURRVAL
  上一次由序列产生器产生的序列名值。只有在当前实例会话中从该序列选择过一次值,这个伪列才会有效。
  LEVEL
  查诣的深度,LEVEL适用于特殊的树查询。
  Sequence。NEXTVAL
  选择这个伪列将导致序列发生器返回该序列的下一个值。一旦选择了该值,它就不能被重用,因为以后的每次检索都将返回下一个值。
  ROWID
  这个伪列表示数据行确切的存储位置。ROWID的格式是一个三个16进制数的结构AAAAAAAA。BBBB。CCCC,这里AAAAAAAA表示数据库文件中包含该行的块号,BBBB是数据块内部的行号,而CCCC则是数据中的文件ID。
  ROWNUM
  被检索数据行的序列号。
  SYSDATE
  当前日期和时间。
  UID
  当前用户的标识ID。
  USER
  用户登录进数据库的名字。
  第二部分PLSQL语法部分
  一、PLSQL语言简介
  (本讲义之所有程序均调式通过)
  首先我们看一个简单之例子,下面这个例子是统计从1至100的总和。
  declare
  inumber:0;声明变量井给初值
  tnumber:1;
  声明一个出错处理
  begin
  fortin1。。100loop
  i:
  
  ifi5050then
  引发错误处理
  else
  insertintocnt(ct)values(i);
  
  exception
  whenerrormessagethen
  insertintocnt(ct)values(0);
  
  从上例中可以看出PLSQL语法的一般规则。
  PLSQL中语句以分号(;)结尾。
  开始程序块的PLSQL语句(如IF或BEGIN语句)没有分句。
  文本值括在单引号(‘‘)内,而不是()。
  过程只允许最后有一个出口。。
  PLSQL程序可以分为三个部分
  DECLARE部分用于变量、常量、函数、过程、Cursor。
  BEGIN部分包含PLSQL块中要执行的代码用于程序处理,其中可以调用函数、过程。
  Exception部分用于出错处理。
  下面我们再看一个例子:
  declare
  inumber:1;
  tnumber:1;
  pnumber:1;
  createtablecny(ctnumber,coutnumber);
  functionaa(xxnumber)returnnumberisdefinefunction
  
  ctnumber:1;
  jnumber:1;
  begin
  whilejxxloop
  ct:
  j:j1;
  
  
  
  begin
  createtablecnt(ctnumber,coutnumber);
  
  whilei200loop
  t:
  i:i1;
  p:aa(i);callingfunction
  insertintocntvalues(t,p);
  
  
  
  说明:
  1。在定义变量可以赋初值,赋初值有两种方法,一为上程序所示,另一种为如下所示:
  Declare
  Inumberdefault92;
  Tnumberdefault0;
  2。定义常量
  Declare
  Iconstantnumber:1;
  Tconstantnumber:9;
  3。定义函数
  functionfunctionname(parametertype)returntypeis
  declarevariant
  begin
  
  在上面的例子中我们定义了一个函数aa,在begin模块部分引用了此函数aa()。
  4。定义过程
  procedureprocedurename(parameterINtype)is
  declarevariant
  begin
  exception
  
  见下例:
  declare
  
  inumber:1;
  tnumber:1;
  proceduretet(ttnumber)is定义一个函数
  begin
  insertintocnt1(t1)values(tt);
  
  begin
  調用函數
  foriin1。。100loop
  tet(i);
  
  
  5。定义Cursor
  declare
  
  temp1
  temp2
  cursortest1
  
  begin
  opentest1;
  deletefromcnt1;
  
  loop
  fetchtest1intotemp1,temp2;
  exitwhentest1
  insertintocnt1values(temp1,temp2);a
  
  closetest1;
  
  
  我们在open一个cursor时,可能会存在一种情况,即我们不需要cursor中所有之记录,我们该如何处理:
  1。在定义一个cursor时,可以附带参数如下所示
  declae
  cursorc1(pempid)is
  selectempno,
  dempptc1
  begin
  openc1(123);
  loop
  fetchc1(123)intodemppt
  2。在将cursor中之记录项转到变量中时进行控制,如下所示:
  declare
  cursoris
  selectemptno,
  
  
  begin
  loop
  fetchc1into(pno,pname);
  用於到cursor中變量進行控制
  ifcondition1then
  endif
  
  注意:
  因为PLSQL不支持IO,所以程序所有结果都是放在数据档中。
  Deletefromacctswherestatus’baddebt’
  Ifsqlrowcount10then
  R
  E
  另:
  在声明一个变量时,PLSQL提供两种变量类型:TYPE,ROWTYPE。
  1。TYPE
  使用TYPE时,可以有种用法:
  一用法见下例:
  declare
  Balancenumber(7,2);
  Minimumbalancebalancetype:10。00;
  在上例中,minimumbalance数据类型为number(7,2)具默认值为10。00。
  二用法见下例(将数据类型与table中一columndatatype相对应起来,如果table中columndatatype变更,则在运行时,上数据类型会自动的变换上):
  declare
  mydnameempc。
  2。rowtype
  使用rowtype数据类型用于将table和cursor中一数据行相对起来。
  见下例:
  Declare
  定義一個rowtype類型,與mycursor中記錄行對應。
  Cursormycursorisselectsalnvl(comm,0)salcomm,wages,
  M
  Begin
  O
  將mycursor中之記錄寫到myrec變量中去。
  loop
  F
  E
  Ifmyrec。wages200then
  Insertintotempvalues(null,myrec。wages,myrec。ename);
  E
  E
  C
  E
  二、变量说明
  在PLSQL中包括以下几种常见的变量类型:
  CHAR存储定长的ASCII字符串,允许存储数字,文本文符等,最长可255个字符。
  VARCHAR2存储变长的字符串,尽管伋按符串的最大长度来定义,但VARCHAR2和CHAR的区别在于如果达不到定义的长度,下的空间不会自动的填写为空格,VARCHAR2最大可以放入2000个字符。
  DATE实际上是存储时间信息的日期时间戳,在使用日期时,应考虑怎样使用日期函数。有关日期函数的格式见函数说明部分。
  127hrNUMBER存储数值数据,包括整数和浮点数、数据范围可以从110到3810,而且,你有很大的数据空间。
  BOOLENA存储布尔值。它表示是否,真假,10之类的东西。
  LONG这是一种文本字符串,其长度大于VARCHAR2字段的2000个字符。该类最多可储存2GB个字符,与原始二进制数据相比,它只能存储字符信息。
  RAW用来存储操作系统使用的原始二进制数据,可用于存储像图像或声音记录这样的信息,但这种数据长度最长度只有255字节。
  LONGRAW与LONG类型等价,但存储二进制数据,最长可达2GB个字节。
  31hr31hrBINARYINTEGER这个字段按计算器使用的二进制格式存储信息,从
  2到21。
  另:
  PLSQL提位两种复合类型:TABLE和RECORD
  1。TABLE
  要定义一个数组,你使用表类型定义语句,例如要定义Lastname数组,可以使用下述语句:
  typelastnamelististableofvarchar2(22)
  
  
  当定义一个长类型时,就涉及到一个删除表的问题,PLSQL表不能用Delete语句来删除,但可以将每一行空值如下所示:
  saltab(3):
  另一种法是定义两个相同类型的表类型,如果要将另一表清空,只需将空表给要清空的表即可。如下所示。
  declare
  typenumtabtypeistableofnumber
  
  
  
  begin
  forIin1。。100loop
  saltab(I):I;
  
  。
  E
  2。RECORD
  Declare
  Typedeptrectypeisrecord
  (deptnonumber(2),
  dnamechar(14),
  locchar(14),);
  
  begin
  selectdeptno,dname,locintodeptrecfromdeptwheredeptno30;
  
  与所有的编程语言一样,定义一个变量时,同样存在变量作用范围问题:
  如下所示:
  变量x为实数类型
  declare
  
  functionfunctionname(varianttype)returntypeis
  在此范围内变量x为char类型
  declare
  
  begin
  
  变量x为实数类型
  begin
  x:expression1
  
  如果想引用另一block之变量时,可以加上blocklabel,如下所示:
  B
  outer
  declare
  
  begin
  declare
  
  引用outerblock块定义之变量。
  begin
  。
  Ifbirthdateouter。birthdatethen
  。
  E
  E
  E
  三、PLSQL控制程序流
  1。IFTHENELSIFELSE。ENDIF
  IFTHEN
  STATMENT1;
  elseifthen
  statment2
  elseifthen
  statment3
  ELSE
  STATMENT4;
  
  例:
  outer
  forctrin1。。20loop
  inner
  forctrin1。。10loop
  ifouter。ctrctrthen
  
  
  2。loopexitendloop
  loop
  
  
  
  例:
  loop
  fetchc1into
  exitwhenc1
  
  closec1;
  另:加
  例:outer
  loop
  loop
  exitouterwhen
  
  
  3。whileloopendloop结构如下所示:
  例
  whiletotal25000loop
  。
  Selectsa1intosalaryfromempwhere
  Total:
  E
  4。forloop
  例1。
  selectcount(empno)
  forLin1。。empcountloop
  
  例2。
  outer
  forstepin1。。25loop
  forstepin1。。10loop
  ifouter。step15then
  
  
  5。cursor。loop
  declare
  sursorc1
  namevarchar2(100);
  begin
  forpc1recinc1loop
  name:pc1rec。
  
  四、存储过程
  要创建存储过程,可以使用下面的SQL和PLSQL语句:
  CREATEORREPLACEPROCEDUREPROCEDURENAME(parameterlist)
  AS
  BEGIN
  (SQLANDPLSQLCOMMANDS)
  END;
  五、存储函数
  createorreplacefunctionfunctionname(parameterlist)returntypeis
  。
  Begin
  
  六、Package
  Package分为两部分:SpecificandBody
  在包说明部分中,主要将此包中所含的过程和Function的调用参数说明清楚,如:
  CREATEORREPLACEPACKAGEZDLJOBPKG
  AS
  PROCEDUREZDLINSERTJOB(
  pbkcidinnumber,
  pitemidinnumber,
  pjobnumberinoutvarchar2,
  pgroupidinnumber,
  pleaddayinnumber,
  ploadtypeinnumber,
  PSTATUSTYPEINNUMBER,
  PUSERIDINNUMBER,
  PJOBTYPEINVARCHAR2);
  PROCEDUREZDLUPDATEJOB(
  PBKCIDINNUMBER,
  PGROUPIDINNUMBER,
  PSTATUSTYPEINNUMBER,
  PUSERIDINNUMBER);
  FUNCTIONWIPMASSLOAD(PGROUPIDINNUMBER,PUSERIDINNUMBER)RETURNNUMBER;
  PROCEDUREZDLPREUPDATE;
  FUNCTIONZDLUPDATEORACLEWIP(PUSERIDINNUMBER)RETURNNUMBER;
  FUNCTIONZDLJOBSTATUS(PJOBNUMBERINVARCHAR2)RETURNNUMBER;
  ENDZDLJOBPKG;
  在包体部分,主要将包说明部分之过程及Function之代码写出来,
  如:
  CREATEORREPLACEPACKAGEBODYZDLJOBPKG
  AS
  PROCEDUREZDLINSERTJOB(
  pbkcidinnumber,pitemidinnumber,pjobnumberinoutvarchar2,
  pgroupidinnumber,
  pleaddayinnumber,
  PLOADTYPEINNUMBER,
  PSTATUSTYPEINNUMBER,
  PUSERIDINNUMBER,
  PJOBTYPEINVARCHAR2)
  is
  begin
  endZDLINSERTJOB;
  PROCEDUREZDLUPDATEJOB(PBKCIDINNUMBER,PGROUPIDINNUMBER,PSTATUSTYPEINNUMBER,PUSERIDINNUMBER)
  AS
  BEGIN
  ENDZDLUPDATEJOB;
  FUNCTIONWIPMASSLOAD(PGROUPIDINNUMBER,PUSERIDINNUMBER)RETURNNUMBER
  as
  begin
  ENDWIPMASSLOAD;
  PROCEDUREZDLPREUPDATEIS
  begin
  endZDLPREUPDATE;
  FUNCTIONZDLUPDATEORACLEWIP(PUSERIDINNUMBER)RETURNNUMBER
  IS
  begin
  endZDLUPDATEORACLEWIP;
  FUNCTIONZDLJOBSTATUS(PJOBNUMBERINVARCHAR2)RETURNNUMBER
  AS
  BEGIN
  ENDZDLJOBSTATUS;
  ENDZDLJOBPKG;
  七、触发器
  所需系统权限
  要为某表创建触发器,必须能改变这个表,因此不仅要拥有表,并且要具有这个表的alter权限,或者具有alteranytable系统权限,除此之外,必须有createtriger系统权限,若要在另一个用户帐号(account)(也称之为模式(schema))上创建触发器,就必具有createanytrigger系统权限。
  所需表权限
  触发器可以引用的表并不是初始化触发事件的表。
  触发器
  触发器有十二种类型。一个触发器的类型由执行触发器的层次位置和触发事务的类型定义。
  行级触发器
  在某个事务中,行级触发器行执行,对于上述ledger表中记例子而言,触发器。行级触发器是在createtrigger命令中通过用foreachrow子句创建的。
  合法的触发器类型
  当两种不同类型之触发动作相结合时,有十二种可能的配置:
  Beforeinsert行级触发器
  beforeinsert语句级触发器
  afterinsert行级触发器
  afterinsert语句级触发器
  beforeupdate行级触发器
  beforeupdate语句级触发器
  afterupdate行级触发器
  afterupdate语句级触发器
  beforedelete行级触发器
  beforedelete语句级触发器
  afterdelete行级触发器
  afterdelete语句级触发器
  例:
  CREATEORREPLACETRIGGERAPPS。ZDLBKCJOBBODYAFI
  AFTERINSERTONAPPS。ZDLBKCJOBBODY
  REFERENCINGOLDASOLDNEWASNEWFOREACHROW
  BEGIN
  Insertintoaudittblvalues(:new。id,:new);
  UPDATEZDLBKCJOBHEADSETUPDATEDATESYSDATE
  WHEREZDLBKCJOBHEADID:NEW。ZDLBKCJOBBODYID;
  END;
投诉 评论 转载

滴滴被禁止下载APP,请问现在哪家公司的出行APP靠谱?现在网约车市场鱼龙混杂,什么花小猪、美团打车、高德打车、T3等等,不仅价格不统一,而且恶意竞争比较激烈,作为消费者难以辨别安全性,因此晚上的时候尽量打合规大平台信誉好的网约车,……MIUI13稳定版推送达4GB,恭喜RedmiK30S,第二对于智能手机来说跟功能及最大的不同就是可以升级更新系统来获得最新的功能跟体验,有用户表示升级更新系统就像是换个一个新手机。小米在去年12月的时候推出了小米数字系列新旗舰小……PLSQL语法手冊目录第一部分SQL语法部分。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。……如果高通骁龙不向中国出售会怎么样?如果高通骁龙不向中国出售,那他的新客户又在哪里?中国作为世界第一大手机生产国和消费国,从全球市场情报提供商TrendForce的统计数据来看,2016年中国智能手机产量达到了6……华为mate50系列年底发布搭载麒麟9000处理器今日微博博主曝光了华为Mate50系列的相关消息,新机将于今年年底发布,搭载麒麟9000处理器,并且还将有新一代骁龙8处理器版本发布,新机后置摄像头模组采用大圆环设计,内置五颗……对话星辰天合CEO胥昕数据如何实现汇存管用?数据存储是数字化时代的基石。XSKY星辰天合CEO胥昕如是表示。存储是数据中心三大件之一,传统存储的发展历史超过40年,也形成了行业的固有壁垒,当以互联网为代表的新应用逐……全球汽车业加速绿色转型(国际视点)来源:人民网近期,多家研究机构数据显示,2021年全球新能源汽车销量实现逆势增长,占比快速提升。过去一年,全球多家车企发布新能源发展计划,更多科技企业开始进军新能源汽车领……有哪些闷声发大财的行业?我堂姐就是闷声发大财的人。堂姐以前是农村的赤脚医生,今年60岁。她再婚的老公是个转业军人,复员到了山西某地,在当地娶妻结婚。女方家是世代中医,堂姐夫在帮忙时,也知道了很多……一分钟资讯苹果小米VIVO谷歌,最新消息哈喽,我是毛小毛。关注我,每日带你了解最新数码资讯!一分钟资讯第113期,感谢你的阅读。苹果下月将举行多场发布会据DigiTimes报道,知情人士透露,苹果计划在9……开发一款微信外挂软件,狂薅4000万元通讯员章锣锣周柳玲本报记者余春红微信可以说是当下应用最广泛的即时通讯程序之一,有人因此蹭热度,开发起微信外挂软件,狂薅4000余万元。近日,这起开发推广微信外挂软件……马化腾过冬说,仅在一念间立方快评丘眉3月24日,一条马化腾:腾讯如何‘过冬’的消息引发了热议。在经济下行压力加大的当下,标志性龙头企业的一举一动更加容易触发市场情绪,因此不难理解,以上标题的消息在迅速发……双十一,首尾两天手机优惠价格比较2021。11。1小米手机价格相当优惠京东自营店小米1112256G3599小米118256G3379小米11pro82563699结果没想到双十……
AI产品创新大赛聆思科技全芯时代,乘势而来怎么认识联想引起的争议Facebook凌晨全球大面积宕机,首席技术官致歉服务正陆续关于四维空间的那点事有哪些功能强大的小众app推荐?理想ONE升级换代刻意隐瞒老车主吐槽被割韭菜机构依旧看好腾讯CF游戏,乱封号现象官宣小米11T系列下月15日发布PostgreSQL轻量级连接池PgBouncer7。29万起,全能小钢炮凯翼炫界Pro燃擎来袭2022创青春湖北青年创新创业大赛正在报名被执行人微信零钱800元被冻结,不管它,微信以后还能用吗?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利