版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目前 第1章达梦数据库开发概 预备知 第2章数据查询与操 事务控 第3章使用数据库对 使用数据类 创建和使用 使用视 使用序 使用同义 第4章使用存储过 存储过程概 创建和使用 使用变量和常 程序控制 第5章使用触发 设计触发 第6章如何发布达梦数据库应用程 发布概 准备环 导出数据库对 数据导 脚本执 环境确 DM数据库的基本概念和客户端工具,如何使用SQL和PL/SQLDM数据库以及如何发布达梦数据库的应用程序。DM1DMDM数据库进行DM产品开发的数据库应用程序和组件。DM数据库,SQLDM数据库的最基本接口。DM产品包中包含的ManagerDisql两个客户端工具,它们让用户可以不需SQL语句,应用开发人员可以使用这两个工具来测试应用SQL语句。DMPL/SQL,作为第三代语言,PL/SQL具有比SQL语言更加强大的功能,且与SQLPL/SQLSQL语言。这样,PL/SQL就能够实现表、索限机制,PL/SQL还能够安全地隐藏客户端程序的实现。因此,我们推荐用户在客户端程序PL/SQL子程序来进行数据库访问。DDLDMDML对数据INT、VARCHAR、DATE等。存储过程PL/SQL的代码块。这些代码块存储在数据库中,可以被客户端DAMENGDMSERVER。BOOKSHOP模拟武汉代理图书的某销售公司,该公司欲建立在线购物平台来拓CREATEVIEWPURCHASING.VENDOR_EXCELLENTSELECTVENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREDITFROMPURCHASING.VENDORWHERECREDIT=CREATEVIEWPURCHASING.VENDOR_EXCELLENTSELECTVENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREDITFROMPURCHASING.VENDORWHERECREDIT=CREATEORREPLACEPROCEDURECREATEORREPLACEPROCEDURERESOURCES.PROC_1(AINOUTVARCHAR)ASTOTAL_NUMINT;SETSCHEMACREATEORREPLACETRIGGERDEPT_DEL_UPD_CASCADEAFTERDELETEORUPDATEONOTHER.DEPTTABFOREACHROWIFDELETINGSETSCHEMACREATEORREPLACETRIGGERDEPT_DEL_UPD_CASCADEAFTERDELETEORUPDATEONOTHER.DEPTTABFOREACHROWIFDELETINGDELETEFROMOTHER.EMPTABWHEREDEPTNO=:OLD.DEPTNO;WHEREDEPTNO=:OLD.DEPTNO;ENDSQLPL/SQLDMSQLPL/SQLSQL语言有一定的了解。SQL语句查询表获取数据,创建或修改对象以SQLPL/SQLSQL语言的扩展。它集成了面向过程语言的过言。PL/SQL允许声明常量和变量、定义存储过程和函数、使用集合和对象类型、捕获运行SQL和PL/SQL使用信息可以参考《DM_SQL图形管理器(DM管理工具ManagerSQLPL/SQLDMDMJava1.6JAVAHOTSPOT(TM)CLIENTVM(BUILD17.1-B03,MIXEDMODE,linux(KDE–DMwindows–DMSQLDISQL还可以在DISQLDISQLDISQLDMManager工具已经安装在您的系统中,主要说明如何启动并连接到达梦数据库。如果没有安装,参见《DM1.3.2节中介绍的步骤打开Manager的主界面,之后可通过如下步骤连接和退出达DISQLDISQLDISQL并SQL语句、PL/SQL登录使用时间登录使用时间7.916(毫秒SQL>SELECTCOUNT(*)FROM已用时间0.459(毫秒).执行号DMDMODBC遵照MicrosoftODBC3.0ODBCDM的互C++Builder、PowerBuilderDMODBC3.0DM数据库。OLEDB(ObjectLinkingandEmbedding,Database)是微软为以统一方式访问不同类型的数JDBC(JavaDatabaseConnectivity)Java(APISQLAPI。PRO*COracleCC程序SQLSQL语言容易掌握,适合初学者。DMPRO*COraclePRO*C.NETData.NETDataProvider是.NETFrameworkDMDM.NETDataProvider,用户可以使用此接口连接到数据库、执PHP(HypertextPreprocessor)HTML中使用。DMPHPPHPPHP扩展。PHPDMPHPDMOCI(OracleCallInterface)OracleSQL所有DMDCIOCIOracel兼容功能的FLDR(FastLoader)DMDM数据库的一FLDR接口能把按照一定格式排序的文本数据以最简单、快速、高效Python是一种面向对象、只译试计算机编程语言,具有近二十年的发展历史,成熟且稳定。Python提供一套数据库访问接口,供程序员使用。DMPYTHONPythonPythonDM2DM的模式对象类型包括表、视图、存储过程\函数、触发器、包、外部表、类、物化Manager图形管理工具,通过简单点击鼠标即可直观地查看某个模式中ManagerDM服务器后,点击要查看的具体模式对象,如PERSON存储过程是存储在数据库中可以执行的PL/SQL触发器为当某些与数据库有关的事件发生时,数据库应该采取的操作。DM触发器DISQLSELECT*FROMDISQLSELECT*FROMDISQL命令对显示格式进行调整。ManagerSELECT查询语句从一个或多个基本表(表和视图)对象中选取数据,还可以把一个查SQL语句中对数据进行一些列的运算操作,如加减乘运算、聚集函数SELECTPERSONID,NAME,SELECTPERSONID,NAME,SEXFROMPERSON.PERSONPERSONIDNAMESEXDISQLSQL>后输入查询语句,然后回车执行。Manager工SQL语句:2.2.1节中的查询语句的结果显示时列SELECTPERSONIDID,NAME,SEXFROMSELECTPERSONIDID,NAME,SEXFROM在SELECT语句中加入过滤条件,可以查询出满足指定条件的数据。过滤条件通过在SELECT语句中增加WHEREWHERE子句常用的查询条件由谓词和逻辑运算符组成。!=,BETWEEN…NOTIS数据为ISNOT数据不为2-4LIKE2-5IN谓词。SELECT*FROMPERSON.PERSONSELECT*FROMPERSON.PERSONWHERESELECTNAME,AUTHOR,PUBLISHER,NOWPRICEFROMSELECTNAME,AUTHOR,PUBLISHER,NOWPRICEFROMWHERENOWPRICE>=10AND鲁迅文集(SELECTADDRESSID,ADDRESS1,CITY,POSTALCODEFROMSELECTADDRESSID,ADDRESS1,CITY,POSTALCODEFROMWHEREADDRESS1LIKE' <列名>LIKE<<列名>LIKE<匹配字符串常数列名>果指定列值与由<匹配字符串常数>给出的内容一致,则谓词结果为真。<匹配字符串常数>中的字符可以是一个完整的字符串,也可以是百分号和下划线,和称通配符。代表任意字符串;SELECTNAME,AUTHORSELECTNAME,AUTHORFROMWHEREPUBLISHERIN('中华书局','人民文学出版社假设现在需要查询性别为男性的员工的姓名与职务,我们发现可以在PERION.PERSONDM的连接查询方式包括:交叉连接(crossjoin)SELECTT1.NAME,FROMPERSON.PERSONT1,RESOURCES.EMPLOYEET2WHERET1.PERSONIDSELECTT1.NAME,FROMPERSON.PERSONT1,RESOURCES.EMPLOYEET2WHERET1.PERSONID=T2.PERSONIDANDT1.SEX='M';SELECTNAME,FROMPERSON.PERSONT1,RESOURCES.EMPLOYEET2WHERET1.PERSONID=T2.PERSONIDANDSEX='M';SELECTFROMT1T2,并SELECTNAME,FROMPERSON.PERSONT1,RESOURCES.EMPLOYEET2WHERET1.PERSONID=T2.PERSONIDANDSEX='M';REGEXPPOSIX标准的正则表达式进行字符串匹配操作的系统函数,是字符串处理函数的一种扩展。DM支持的REGEXP函数包括:REGEXP_COUNT、REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、REGEXP_REPLACE。,'(,'(2-84REGEXP_REPLACEFROMRESOURCES.EMPLOYEE;SELECTADDRESSID,ADDRESS1,REGEXP_SUBSTR(ADDRESS1,'[^*]+区NEW_ADDRESSFROMSELECTADDRESSID,ADDRESS1,REGEXP_SUBSTR(ADDRESS1,'[^*]+区NEW_ADDRESSFROM36956-1-36957-2-1115155615551423洪山区光谷软件园FROMPRODUCTION.PRODUCTWHEREREGEXP_COUNT(PUBLISHTIME,'-2-10FROMPRODUCTION.PRODUCTWHEREREGEXP_COUNT(PUBLISHTIME,'-噼里啪啦丛书(7册ORDERBY(ASC)ORDERBYBIRTHDATEASC;ORDERBYBIRTHDATEASC;当排序列值包含NULLORDERBY子句的结尾使用“NULLSFIRST”或“NULLSFROMSALES.SALESPERSON;FROMSALES.SALESPERSON;DM求数值n求数值n求数值n求数值n求数值n1/n2求大于或等于数值n求大于或等于数值n的最小整数,等价于求数值n求数值n求数值n求弧度n求数值n求小于或等于数值n求n1、n2和n3求n1、n2求n1、n2和n3求数值n求数值n2以n1求数值n10求数值m被数值n得到常数求数值n2以n1求角度n01求数值n求数值n求数值n求数值n求数值nTO_NUMBER(charDECIMAL截取数值函数,等价于TO_CHAR(n[,fmt[,'nls']将数值类型的数据转换为VARCHAR求两个数值型数值按位进行AND2-13使用ROUND 2-14SIGN20 -----SELECTTO_NUMBER('2,222.22','9G999D99')from2-15TO_NUMBERSELECTTO_NUMBER('2,222.22','9G999D99')fromDM将字符串nASCII的字符转成\XXXX(UTF-16)ASCII返回整数n返回整数n对应的字符,等价于比较两个字符串的SOUNDEX值之差异,返回两个char1begin个字符,char2插入到char1串的begin/char1从n1的位置开始删除n2char2插入到char1中n1从输入字符串char1的第n个字符开始查找字符串的第mchar1n个字节开始查找字符串char2的第m返回字符串最左边的n返回给定字符串表达式的字符(而不是字节)个数(返回给定字符串表达式的字符(而不是字节)个数(拷贝指定长度的源BLOB数据插入到目标char1char2伸至nchar2POSITION(char1,/IN12返回将字符串重复n将输入字符串中所有出现的search_stringreplace_stringchar自己复制timesRIGHT/返回字符串最右边nLPADn从输入字符串的右端开始删除char2返回一个包含ncharcharposcharcharposchar1begin个字符,char2插入到char1串的begin/SUBSTRING(charFROMm[FORchar中从字符位置m开始的nSUBSTR[exp][]FROM删去字符串char2中由串char1根据符合POSIXOVERLAY(char1PLACINGchar2int[FORchar2char1返回两个LONGVARCHAR11GREATEST(char1,char2,charchar1、char2char3GREAT(char1,charchar1、char2to_single_byteto_multi_byte初始化clob初始化blobSELECTPRODUCTID,NAME,PUBLISHER,FROM2-16SELECTPRODUCTID,NAME,PUBLISHER,FROM1234射雕英雄传(全四册)5鲁迅文集(小说、散文、杂文)6数据结构(C语言版)(盘89噼里啪啦丛书(7册2110噼里啪啦丛书(7册)21SELECTNAME,LEFT(NAME,2)FROMSELECTNAME,LEFT(NAME,2)FROM数据结构(C语言版)(附光盘噼里啪啦丛书(7册SELECTNAME,REPLACE(NAME地址地点FROM2-18使用REPLACEPERSON.ADDRESS_TYPE表中NAMESELECTNAME,REPLACE(NAME地址地点FROMREPLACE(NAME地址地点2-19TO_CHAR函数,将表PRODUCTION.PRODUCTDESCRIPTIONTEXT类型<长文本DM返回日期加上n返回日期加上nEXTRACT(FROM求n1、n2和n3求n1、n2求n1、n2和n3ROUNDtimestampninterval返回一个表明timestamp2与timestamp1之间的将时间戳类型timestamp和时区类型timezone(名称tz_name)timestampwithtimezone定语法的VARCHARSELECTSELECT+2-21DAYS_BETWEEN2014-01-012013-01-012-22使用TO_DATE函数将DMCAST(valueAS类型说明将value将value将exp转换为BLOB将exp转换为VARCHAR将exp转换为SELECTCAST('100.5678'ASSELECTCAST('100.5678'ASDM相异集函数AVG|MAX|MIN|SUM|COUNT(DISTINCT<列名完全集函数AVG|MAX|MIN|COUNT|SUM([ALL]<值表达式方差集函数var_pop、var_samp、variance、stddev_pop、stddev_samp、covar_pop、covar_samp、FIRST/LASTAVG|MAX|MIN|COUNT|SUM([ALL]<>)KEEP(DENSE_RANKFIRST|LASTORDERBY子句);ORDERBY4.7节;SELECT SELECT MAXSELECTMIN(NOWPRICE)FROMWHERESELECTMIN(NOWPRICE)FROMWHEREDISCOUNT<SELECTAVG(NOWPRICE) WHERESELECTAVG(NOWPRICE) WHEREDISCOUNT<SELECTCOUNT(DISTINCTPUBLISHER)SELECTCOUNT(DISTINCTPUBLISHER)FROMSQL>SELECT SQL>SELECT (ORDER 查询结果为:长征,工作中无小事,红楼梦,老人与海,鲁迅文集(小说、散文、杂文)全两册,射雕英雄传(全四册),数据结构(C语言版)(附光盘),水浒传,突破英文基础词汇,噼里啪啦丛书(7册)杂。为此,DMSQL语句就能满足类似的查询需求,SELECTAUTHOR,MAX(DISCOUNT)OVERSELECTAUTHOR,MAX(DISCOUNT)OVER(PARTITIONBYAUTHOR)ASMAX WHEREDISCOUNT>如果使用的是集函数MAX,那么得到的是所有图书中折扣的最大值,并不能查询出作SELECTEMPLOYEEID,RANK()SELECTEMPLOYEEID,RANK()OVER(ORDERBYSALESLASTYEAR)ASFROMRANK()ORDERBY项进行排名,如果值相同,则排名相同,例如销售DENSE_RANK()12名。ROW_NUMBER()则按照顺序编号,不区分相同值。 NAME,NVL(EMAIL,'EMAIL未登记')EMAIL,PHONE WHERENAME='杨凤兰 NAME,NVL(EMAIL,'EMAIL未登记')EMAIL,PHONE WHERENAME='杨凤兰EMAIL功能,DMCASEDECODECASESELECTTOP5NAME,CASESEXWHEN'MTHEN男WHENFTHEN女'ELSE未知'ENDASFROM2-32SELECTTOP5NAME,CASESEXWHEN'MTHEN男WHENFTHEN女'ELSE未知'ENDASFROM的“ELSE'未知'”可以去掉,不影响查询结果。DECODEDECODEDECODE(exp,cond1,res1,cond2,res2,…,condn,resn,default)。exp与cond1,cond2,…condn相比较,如果等于condnresn,如果default,defaultNULL。SELECTTOP5NAMEDECODE(SEXF','SELECTTOP5NAMEDECODE(SEXF','男','M','女未知FROMROLLBACK语句之前执行查询操作查看数据更新 INSERTINTOtable_name(column_1,column_2,...column_n)VALUES(value_1,value_2,... 对于插入语句中没有给出的列,若表定义中该列有默认值,DM会使用默认值进行填充,某TABLEDEF函数查看。2-34如查看表PURCHASING.VENDOR SELECT INSERTINTOPURCHASING.VENDOR(ACCOUNTNO,NAME,ACTIVEFLAG,VALUES'00'INSERTINTOPURCHASING.VENDOR(ACCOUNTNO,NAME,ACTIVEFLAG,VALUES'00'华中科技大学出版社1VENDORIDWEBURL列允许为空,NULL。INSERTINTOPURCHASING.VENDOR(ACCOUNTNO,INSERTINTOPURCHASING.VENDOR(ACCOUNTNO,NAME,ACTIVEFLAG,VALUES'00'华中科技大学出版社12'00'清华大学出版社1VENDORID列为自增列,值由系统产生,这里并没有指定。CREATETABLEPRODUCTION.PRODUCT_SELL(CREATETABLEPRODUCTION.PRODUCT_SELL(PRODUCTNAMEVARCHAR(50)NOTNULL,CUSTOMERNAMEVARCHAR(50)NOTNULL);INSERTINTOPRODUCTION.PRODUCT_SELLSELECTDISTINCTT1.NAME,T5.NAMEFROMPRODUCTION.PRODUCTT1,SALES.SALESORDER_DETAILT2,SALES.SALEsORDER_HEADERT3,SALES.CUSTOMERT4,PERSON.PERSONT5WHERET1.PRODUCTID=T2.PRODUCTIDandT2.SALESORDERID=T3.SALESORDERIDANDT3.CUSTOMERID=T4.CUSTOMERIDANDT4.PERSONID=T5.PERSONID; UPDATEtable_nameSETcolumn_1=value_1[,column_1=value_2]... UPDATEPRODUCTION.PRODUCTSETNOWPRICEUPDATEPRODUCTION.PRODUCTSETNOWPRICENOWPRICE1WHEREPUBLISHER='中华书局';UPDATEPURCHASING.PURCHASEORDER_HEADERSET(TAX,FREIGHT)=(selectORIGINALPRICE,NOWPRICEfromPRODUCTION.PRODUCTwhereNAME='长征');UPDATEPURCHASING.PURCHASEORDER_HEADERSET(TAX,FREIGHT)=(selectORIGINALPRICE,NOWPRICEfromPRODUCTION.PRODUCTwhereNAME='长征');Manager中进行数据更新。与插入数据类似,在浏览数据面板中选择要DELETEDELETEFROMtable_nameDELETEFROMOTHER.READERWHERE2-39DELETEFROMOTHER.READERWHEREDELETEFROMRESOURCES.EMPLOYEE_ADDRESSWHEREDELETEFROMRESOURCES.EMPLOYEE_ADDRESSWHEREEMPLOYEEIDIN(SELECTFROMRESOURCES.EMPLOYEEWHEREEMPLOYEEIDNOTIN(SELECTEMPLOYEEIDFROMDELETE语句一次只能对一个表进行删除,因此当两个表存在引用与被引用关系时,要Manager中进行数据删除。在浏览数据面板中选择要删除的行,右击鼠DMSQLCOMMIT整的事务结束,DDL语句本身所属事务则根据“DDL_AUTO_COMMIT”配置参数决定是否自动ROLLBACK语句回滚操作DM的交互式管理工具和编程接口中都能够设置自动提交开关,当为自动提交状态时,所有的SQL语句都会在执行结束后提交,或者在执行失败时回滚,此时每个事务都只有一SQL语句。 SETAUTOCOMMIT DISQLCOMMIT语句手动提交INSERTINTOT1VALUES(1,1);SELECT*FROMT1; 在Manager中,可以点击提交按钮实现事务手动提交ROLLBACK命令手动回滚。INSERTINSERTINTOT1VALUES(1,1);SELECT*FROMT1; SELECT*FROM在Manager中,可以点击提交按钮实现事务回滚被部分回滚的事务依然处于活动状态,可以继续执行。用户可以使用SAVEPOINTINSERTINTOT1VALUES(1,1);SAVEPOINTSAV1;INSERTINTOT1SAVEPOINT--保存点--保存点UPDATET1SETC1=3WHERESAVEPOINTSAV3; --保存点SAV3DELETEFROMT1WHEREC1=1;SELECT*FROM ROLLBACKTOSAVEPOINT--回滚到检查点SELECT*FROM ROLLBACKTOSAVEPOINT--回滚到检查点SELECT*FROM ROLLBACKTOSAVEPOINTSELECT*FROMT1;--回滚到检查点32.1.1节“模式对象的类型”中讨论到的一些常用数据库DATE,那么该列可以包含'1999-10-01'2或者字符CHAR/CHARACTER1,VARCHAR/VARCHAR2类型:变长字符串类型,用户在定义时可以指定一个不超过实际的数据,节约存储空间,因此是最常用的字符串类型。示例库中表NUMERIC/NUMBER/DECIMAL/DEC类型:存储零、正负定点数,定义方式类似于NUMERIC[(标度])]。其中:精度是一个无符号整数,定义了总的数字数,精138。标度定义了小数点右边的数字位数。一个数的标度不应大于其字,范围在-999.9999.9。10(-231)~+2147483647(231-1)。2424REAL24,155315。值,例如:DATE'1999-10-01'、'1999/10/01'或'1999.10.01'DATE值,且RESOURCESEMPLOYEEBIRTHDATEDATETIMESTAMP类型:包括年、月、日、时、分、秒信息,DMTIMESTAMP类型定义了一个在'-4712-01-0100:00:00.000000'和'9999-12-3123:59:59.999999'如:TIMESTAMP2002-12-1209:10:21'或'2002-12-129:10:21'或'2002/12/1209:10:21''DM利用它存储长的文本串。2G-1字节。除了存储图像数据之外,还可用于存储任何DISQLSQLManager中使用图形交3-1DISQLManagerDISQL INTPRIMARYKEY, VARCHAR(18)NOTNULL,DEPARTMENTIDINTNOTNULL, VARCHAR(256) VARCHAR(50)NOT CHAR(1)NOTNULL,EMPLOYEEIDINTNOTNULLREFERENCESEMPLOYEE(EMPLOYEEID),ADDRESSVARCHAR(100)这样,就在SYSDBAEMPLOYEEEMPLOYEE_ADDRESSManager表名:输入点击图标添加列,输入列名、数据类型、非空约束等信息信1:列名“DEPARTMENTID”,数据类型“INT”,主键、非空、精度、标度使用默认在EMPLOYEE表中HAIRDATEEMPLOYEELOGINIDLOGINID,LOGINID。在EMPLOYEE表中EMPLOYEEID列上有主键约束,要求每个员工必须有唯一的EMPLOYEE_ADDRESSEMPLOYEEIDEMPLOYEE的外键约束,要EMPLOYEEEMPLOYEEID。用户可以在DISQL交互式工具中使用ALTERTABLE3-2DISQLManager 点击“确定”DEPARTMENTNAME列非空约束的添加3-3DISQLManager增加唯一性约束点击“确定”DEPARTMENTDEPARTENTID列上唯一性约束的添加3-4DISQLManager增加主键约束在DISQL中执行下面的语句为DEPARTMENT表增加主键约束,指定主键列为 点击“确定”DEPARTMENTDEPARTMENID列上主键约束的添加3-5DISQLManager增加外键约束DISQLEMPLOYEEDEPARTMENTIDALTERTABLESYSDBA.EMPLOYEEADDALTERTABLESYSDBA.EMPLOYEEADDCONSTRAINTEMPLOYEE_FK_REFFOREIGNKEY(DEPARTMENTID)REFERENCESSYSDBA.DEPARTMENT(DEPARTMENTID);DEPARTMENTID,点击点击“确定”EMPLOYEEDEPARTENTID列上外键约束的添加3-6DISQLManager增加检验约束DISQLEMPLOYEEEMPLOYEEID的值必0。 >DISQLCREATEINDEX3-7DISQLManagerDISQL Manager点击“确定”EMPLOYEEIDEMPLOYEE_ID_IDX的创建DISQL交互式工具和Manager对已存在的索引进行修改操作。3-8DISQLManagerDISQLCREATEORREPLACEINDEXCREATEORREPLACEINDEXEMPLOYEE_ID_IDXONSYSDBA.EMPLOYEE(EMPLOYEEIDDESC);Manager点击“确定”EMPLOYEE_ID_IDX的修改DISQL交互式工具和Manager删除索引3-9DISQLManagerDISQL DROPINDEX ManagerTABLE语句进行表删除,也可以在Manager中通过交互式图形界面完成。3-10DISQLManagerDISQL交互式工具删除表EMPLOYEE表。 DROPTABLE Manager选中表DISQLSQLManager3-11DISQLManagerDISQLCREATEVIEWPURCHASING.VENDOR_EXCELLENTASSELECTVENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREATEVIEWPURCHASING.VENDOR_EXCELLENTASSELECTVENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREDITFROMPURCHASING.VENDORWHERECREDIT=Manager VENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREDIT CREDIT=DISQL交互式工具和Manager对已存在的视图进行修改操作。3-12DISQLManager修改视图DISQLVENDOR_EXCELLENT11的供应商,CREATECREATEORREPLACEVIEWPURCHASING.VENDOR_EXCELLENTASSELECTVENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREDITFROMPURCHASING.VENDORWHERECREDIT=1ANDManager VENDORID,ACCOUNTNO,NAME,ACTIVEFLAG,CREDIT CREDIT=1ANDDISQLDROPVIEW语句删除视图,也可以在Manager中通过3-13DISQLManagerDISQL交互式工具删除视图VENDOR_EXCELLENT。 DROPVIEW Manager序列(SEQUENCE)DM数据库的数据库实体之一。通过使用序列,多个用户可以产3-14DISQLManagerDISQL ManagerDISQLDROPSEQUENCEManager中3-15DISQLManagerDISQL交互式工具删除序列EMPLOYEE_SEQ。 DROPSEQUENCE ManagerPRODUCT,如果客户不认识这个英文词,这时可以增加同可以在DISQL交互式工具中使用CREATESYNONYM3-16DISQLManagerDISQL ManagerDEPTDISQLDROPSYNONYM3-17DISQLManagerDISQL交互式工具删除同义词DEPT。 DROPSYNONYM Manager4DMDMPL/SQLPL/SQLPL/SQLPL/SQLPL/SQL程序中,包括一整套的SQL语言契合紧密,可以在PL/SQLSQL语言。PL/SQLSQLSQLDMPL/SQLDMPL/SQL程序或PL/SQL程序的安全性。可以授权或撤销数据库其他用PL/SQL程序的能力;SQL,DMSQL语句,在网络环境下这就意味着每一个DM而PL/SQL是以整个语句块被服务器处理,降低了网络拥挤,同时可以大大提高访PL/SQL语言编码的主要单位是独立的过程和函数,或者包。这些程序可以存PL/SQL使用一系列的类型、变量、过程或函数,DM推荐将这些内容封PL/SQL单位创建一个独立的命名空间,可以使包内的过程函PL/SQL程序在不同系统中的使用。DMPL/SQL语言创建过程或函数,这些过程或函数像普通的过程或函数过程和函数结构与PL/SQL语句块结构基本相同,PL/SQL声明部分DECLARE开始的部分,指定在应用逻辑中使用的常量及变量。这部异常处理部分EXCEPTION开始的部分,处理在执行部分中出现的异常情况,PL/SQL语句块结构相比,多了一个程序头指明这段程序是过程或函可以在DISQL交互式工具中使用CREATEPROCEDURE4-1DISQLManagerSYSDBAPROC1NUMBERCREATEPROCEDURECREATEPROCEDURESYSDBA.PROC1(PARAM_1INNUMBER,PARAM_2INVARCHAR)DBMS_OUTPUT.PUT_LINE('PARAM_1:'||PARAM_1);END例子中使用了DM系统包DBMS_OUTPUT的PUT_LINE()点击参数列表右侧的按钮添加参2:数据类型使用缺省类型VARCHAR,其他也不做调整/*执行体ENDDISQLCREATEFUNCTION4-2DISQLManagerDISQL RETURNRETURNINTRETURNPARAM_1+PARAM_2;ENDFUNC1;Manager点击参数列表右侧的按钮添加参/*执行体RETURNPARAM_1+PARAM_2;ENDFUNC1;点击“确定”FUNC14-3DISQLManager修改存储过程的语句与创建类似,只是在语句的开头使用“CREATEORREPLACEPROCEDURE”代替创建时的“CREATEPROCEDURE”。CREATEORREPLACEPROCEDURESYSDBA.PROC1(PARAM_1INCREATEORREPLACEPROCEDURESYSDBA.PROC1(PARAM_1INNUMBER,PARAM_2INVARCHAR,LOOP_TIMESININT)FORIIN1..LOOP_TIMESENDLOOP;ENDPROC1;INT类型的参数LOOP_TIMES,然后将存储过程体修改为如下所示即可。IINT;/*执行体FORIIN1..LOOP_TIMESENDLOOP;ENDPROC1;DMManager中选中一个存储过程或DISQLSQL语句“ALTERPROCEDURE|FUNCTIONnamePL/SQL中的语句,设置和取消断点,查看变量与堆栈信息等。在一些实际应用中,为了完成指定的业务功能,PL/SQLPL/SQL能起到很4-4下面以存储过程PROC1SQLSQLDEBUG和当前过程脚SQLDEBUG标签,进入调用脚本部分。修改调用语句中各个参数CALL来运行一个存储模块,那么它不会返回任何的结果集信息,即使这个存SELECT来调用存储模块,如果调CALL4-5CALLSELECTSELECTSYSDBA.FUNC1(1,2)FROMCALLFUNC1()的结果是一样的,都没有结果集的显DISQLDROPPROCEDURE|FUNCTION语句来删除过程或函数,也可以在Manager中使用图形交互方式实现。4-6DISQLManagerDROPPROCEDUREDISQLDROPPROCEDUREDMPL/SQL包来扩展数据库功能,用户可以通过包来创建应用程序或者使用DISQLCREATEPACKAGECREATEPACKAGEBODY语句创Manager中使用图形交互方式创建。4-7DISQLManagerDISQLCREATEPACKAGESYSDBA.PKG1ASFUNCTIONGET_VALUERETURNINT;ENDPKG1;CREATEPACKAGESYSDBA.PKG1ASFUNCTIONGET_VALUERETURNINT;ENDPKG1;AINT;FUNCTIONGET_VALUERETURNINTASBEGINRETURNA;ENDPKG1;AFUNCTIONGET_VALUERETURNINTASBEGINRETURNA;点击“确定”,完成包PKG14.3.24-8DISQLManagerDISQL修改包的语句语法与创建类似,只是在语句的开头使用“CREATEORREPLACECREATEORREPLACECREATEORREPLACEPACKAGESYSDBA.PKG1ASFUNCTIONGET_VALUERETURNINT;PROCEDURESET_VALUE(PINT);ENDCREATEORREPLACEPACKAGEBODYSYSDBA.PKG1ASAINT;FUNCTIONGET_VALUERETURNINTASBEGINRETURNENDASBEGINA:=P;ENDPKG1;ManagerSET_VALUE的声明:PROCEDURESET_VALUE(PINT)ASBEGINA:=END点击“确定”,完成包PKG14.3.3DISQLDROPPACKAGEDROPPACKAGEBODY语句来删除包和包体,也可以在Manager中使用图形交互方式实现。4-9DISQLManagerDISQL交互式工具删除包和包体PKG1及其包体 DROPPACKAGE DROPPACKAGEBODY ManagerPL/SQLDMPL/SQLSQLINT、VARCHAR3.1节。除此DM变量和常量可以是任何的SQL或者PL/SQLCONSTANT关键字,并且立刻赋值。DMPL/SQL中,单行注释以两个连字号“--”开始,一直到行末尾都为注释。多行注释PL/SQL程序中的成员命名,如常量、变量和子过程等。DM中所有标识符的最大长度不能超过128个字节,并且必须以字母开头,后续为字母,数字和符scoe_sum”4-10PL/SQLCREATEFUNCTIONSYSDBA.CACL_PRODUCT(product_idININT)RETURNDECIMAL CONSTANTDECIMAL:=CREATEFUNCTIONSYSDBA.CACL_PRODUCT(product_idININT)RETURNDECIMAL CONSTANTDECIMAL:=20;RETURNEND4.2.1节的介绍使用ManagerCACL_PRODUCT节中存储过程CACL_PRODUCT里定义的变量n_price将代表表PRODUCTION.PRODUCTNOWPRICENOWPRICE的列cons_price将被用来与表中的值进行比较判断,同样需要与表中的类型相同。NOWPRICECACL_PRODUCT过程失效。为了方便维护,词%TYPE和%ROWTYPE。%TYPE属性提供了一个表列的类型或者另一个变量的类型。使用%TYPE,当表中的PL/SQL。%ROWTYPERECORD变量提供了一个表中行的定义类型。表中的列和对应RECORD中的成员有相同的名字和类型。使用%ROWTYPE具有与使用%TYPE一样的4-11使用%TYPE RETURN RETURNEND4.2.2节的介绍使用ManagerCACL_PRODUCTOUTINOUT4-12 DECIMALRETURNEND DECIMAL:=0;n_price:=difference:=n_price-RETURNENDPL/SQL中常需要对数据库对象进行操作,常见的有查询表中的某些数据,然后进行一4-13 DECIMAL:=0;SELECTNOWPRICEINTOn_priceFROMPRODUCTION.PRODUCTWHEREPRODUCTION.PRODUCT.PRODUCTIDdifference:=n_price-cons_price;RETURNdifference;ENDSELECTINTOPRODUCTION.PRODUCTPL/SQLSQL扩展的最主要特点,它包括条件选择、循环迭代、以及顺序结构(GOTO语句,本章节暂不介绍。控制流程如下图所示: CASE…WHENWHILE…LOOP和LOOP…EXITWHEN。控制机制包括:IF…THEN…ELSECASE…WHEN语句。IF<条件表达式>THEN执行部分>;[ELSEIF|ELSIF条件表达式THEN执行部分>;{ELSEIF|ELSIF条件表达式THEN执行部分IF<条件表达式>THEN执行部分>;[ELSEIF|ELSIF条件表达式THEN执行部分>;{ELSEIF|ELSIF条件表达式THEN执行部分>;}][ELSE执行部分>;]END4-14 DECIMAL SELECTNOWPRICEINTOn_priceFROMPRODUCTION.PRODUCTWHEREPRODUCTION.PRODUCT.PRODUCTIDdifference:=n_price-IFdifference>0THENflag:=1;ELSEIFdifference<0flagflag:=-flag:=0;ENDIF;RETURNENDCASE条件表达式WHEN1THEN<WHEN2CASE条件表达式WHEN1THEN<WHEN2THEN<WHENn>THEN语句n>[ELSE<语句>]END DECIMAL SELECTNOWPRICEINTOn_priceFROMPRODUCTION.PRODUCTWHEREPRODUCTION.PRODUCT.PRODUCTIDdifference:=n_price-WHENdifference>0THENflag:=1;WHENdifference<0THENflag:=-1;ELSEflag:=0;ENDRETURNdifference;ENDCACL_PRODUCT;循环迭代是指重复执行一系列语句,DM支持四种循环迭代语句:FOR…LOOP、WHILE…LOOP、LOOP…EXITWHENREPEAT…UNTIL。FOR循环计数器INREVERSEFOR循环计数器INREVERSE下限表达式上限表达式ENDLOOPCREATEORREPLACEPROCEDUREP_FORCREATEORREPLACEPROCEDUREP_FOR(AINT)ASFORIIN1..ALOOPENDLOOP;ENDP_FOR;WHILE条件表达式WHILE条件表达式ENDLOOPCREATEORREPLACEPROCEDUREP_WHILE(AINT)CREATEORREPLACEPROCEDUREP_WHILE(AINT)ASWHILEA>0ENDLOOP;ENDP_WHILE;对于相同的输入参数,P_WHILEP_FOR两个存储过程打印出的数字是相同的,但要注意的是,P_FOR是按从小到大的顺序打印的,而P_WHILE则刚好相反。LOOP…EXITWHENEXITWHEN的条件表达式为真时,终止该循环语句。EXIT语句必须WHEN子句省略时,EXIT语句无条件的终止该循环语句。CREATEORREPLACEPROCEDUREP_LOOP(AINT)ASCREATEORREPLACEPROCEDUREP_LOOP(AINT)ASEXITWHENA<=0;ENDLOOP;ENDP_LOOP;REPEAT…UNTILUNTIL表达式,如果为真则退出循环,否UNTIL条件表达式CREATEORREPLACEPROCEDUREP_REPEAT(AINT)ASCREATEORREPLACEPROCEDUREP_REPEAT(AINT)ASIFA>0THENDBMS_OUTPUT.PUT_LINE(A);ENDIF;UNTILA>=0;ENDRECORD是一种复合数据结构,类似于表的一行记录,使用前面介绍过的%ROWTYPE可以使TYPETYPE记录类型名IS(1数据类型2数据类型4-20下面的例子展示了在ManagerP_SALESt_recordget_sales_info的存储过程。在包体中,get_sales_info的PERSON.PERSONSALES.SALESPERSON两张表中获取指定列的信息,并赋值给t_recordinfo。TYPEt_recordIS TYPEt_recordIS t_salesl_sales----根据人员idPROCEDUREget_sales_info(person_idININT,infoPROCEDUREget_sales_info(person_idININT,infoOUTt_record)AS FROMPERSON.PERSONP,SALES.SALESPERSONSWHEREP.PERSONID=S.SALESPERSONID ENDTYPEt_recordISRECORD( t_salesl_sales--根据人员idPROCEDUREget_sales_info(person_idININT,infoOUTt_record);PROCEDUREget_sales_info(person_idININT,infoOUTt_record)AS FROMPERSON.PERSONP,SALES.SALESPERSONSWHEREP.PERSONID=S.SALESPERSONID ENDget_sales_info;SQL语句进行关联,然后才可以PL/SQL中不需要显式地程序控制游标本身,会自动通过游标返回结果判断当前游标是否已经打开,如果打开,该属性值为TRUE,否则为表示最后一次FETCH如果没有取到,其值为FALSE和CURSOR%FOUND在这四个游标属性中,%ISOPENCURSORcursor_nameCURSORcursor_nameISquery_definition;OPENcursor_nameFETCHEXITWHEN--ENDCLOSEOpen语句打开游标,检查游标定义语句,绑定输入参数,确保能成功从结果集获Fetch语句执行查询语句,将一行数据中各列的值依次赋给指定的变量,需要注意Close语句关闭游标,释放其所占用的内存空间。当游标关闭后,不能再从游标中CURSORcursor_nameISCURSORcursor_nameISquery_definition;FORXINcursor_nameENDFOROPEN、FETCHCLOSE语句,也不需要用%FOUNDDM服务器内部隐式处理。4-21使用游标FOR在4.6节中我们创建了一个“P_SALES包,现在我们在包中添加一个过程PROCEDUREPROCEDUREPROCEDUREPROCEDUREget_all_person_salesASCURSORcurIS FORxINcurDBMS_OUTPUT.PUT_LINE(x.NAME||''||x.SEX||''||x.SALESTHISYEAR||''||ENDEND点击“确定”CALLCALL李丽李丽F8.0000王刚M8.0000使用游标变量:CURSORCURSORcursor_nameISCURSORcursor_varcursor_name;--引用游标赋值OPENcursor_varFETCHFETCHEXITWHEN ENDLOOP;CLOSE4-22在“P_SALES包中添加获得最大销售额和最小销售额的人员销售信息的过程PROCEDUREPROCEDUREPROCEDUREPROCEDUREget_max_and_min_person_salesASCURSORcur0IS SALES.SALESPERSONSANDS.SALESTHISYEAR=(FROMSALES.SALESPERSONCURSORcur1IS ANDS.SALESTHISYEAR=(FROMSALES.SALESPERSONxt_record;cur_var=cur0;OPENcur_var;FETCHcur_varINTOEXITWHENDBMS_OUTPUT.PUT_LINE(||''||x.sex||''||x.t_sales||''||x.l_sales);ENDLOOP;CLOSEcur_var=cur1;OPENcur_var;FETCHcur_varINTOEXITWHENDBMS_OUTPUT.PUT_LINE(||''||x.sex||''||x.t_sales||''||x.l_sales);ENDLOOP;CLOSEEND点击“确定CALLCALLTYPETYPEindex_by_table_nameISTABLEOF1INDEXBYINTEGER/INTVARCHAR两种类型,分别代表整数下标和字符串下标。TYPEARRTYPEARRISTABLEOFVARCHAR(100)INDEXBYINT;XARR;X(1):=X(2):=X(3):=X(1)+X(2);CURSORcurSELECTDISTINCTTITLEFROMCURSORcurSELECTDISTINCTTITLEFROMTYPEemployee_title_typeISTABLETYPEemployee_title_typeISTABLEOFcur%ROWTYPEINDEXBY为索引表批量填充数据(BULKBULKCOLLECT批量填充CURSORcurISSELECTDISTINCTCURSORcurISSELECTDISTINCTTITLEFROMTYPEemployee_title_typeISTABLEOFcur%ROWTYPEINDEXBYINT;xemployee_title_type;OPENFETCHcurBULKCOLLECTINTOCURSORcurCURSORcurISSELECTDISTINCTTITLEFROMTYPEemployee_title_typeISTABLEOFcur%ROWTYPEINDEXBYINT;xemployee_title_type;iINT;i:=OPENcur;IFcur%NOTFOUNDENDENDFETCHcurINTOi:=i+ENDCURSORcurISSELECTDISTINCTTITLEFROMTYPECURSORcurISSELECTDISTINCTTITLEFROMTYPEemployee_title_typeISTABLEOFcur%ROWTYPEINDEXBYINT; OPENFETCHcurBULKCOLLECTINTOFORiIN1..x.COUNT()LOOPDBMS_OUTPUT.PUT_LINE('TITLE:'+x(i).TITLE);ENDii=x."FIRST"();IFiISNULLTHENENDii=END1。TYPETYPEarray_nameISARRAY[常量表达式,常量表达式TYPEARRTYPEARRISARRAYINT[3];AARR;--TYPETYPEARR1ISARRAYBFORIIN1..3A[I]:=I*10;ENDFORIIN1..2LOOPFORJIN1..3LOOPB[I][J]:=I*10+J;ENDLOOP;ENDLOOP;TYPETYPEISARRAYNEW数据类型[常量表达式TYPETYPEARRISARRAYINT[,];AARR;A:=NEWINT[3][]; FORIIN1..3LOOPA[I]:=NEWFORJIN1..4A[I][J]:=I*J;ENDLOOP;ENDLOOP;DBMS_OUTPUT.PUT_LINE(ARRAYLEN(A));--函数ARRAYLENAANEW PL/SQL中,每个异常都应该有对应的异常处理器,异常捕获和对应异常处理器的调DM系统的预定义异常。---SELECTINTO-0-CREATECREATEORREPLACEPROCEDURESYSEXCEPTIONAS WHENZERO_DIVIDETHENENDCALLCALL-6103-61030DM7支持两种自定义异常变量的方法,在这两种方法中,<错误号>都应该是-20000<异常变量名EXCEPTIONFOR错误号<异常变量名EXCEPTIONFOR错误号错误描述<异常变量名<异常变量名>,<EXCEPTION_INITDMRAISE异常名用户可以用RAISERAISE异常名DMPL/SQL程序中需包含一个异常处理部分,在<异常处理部分<异常处理部分EXCEPTION{<异常处理语句<异常处理语句WHEN异常名>THEN执行部分PL/SQLEXCEPTION关键字时,必须至少有一个异OTHERS异常处理器必须在最后,它处理所有没有明确列出的异常。OTHERS是特殊的E1EXCEPTIONfor-20000,'EC_01';E2EXCEPTIONfor-30000,'EC_02';RAISEWHENE1THENRAISE/*下层语句块抛出异常E1/*在异常E1的处理过程中,抛出异常E2WHENE1THEN/*异常变量E1WHENE2THEN/*异常变量E2的异常处理器*/ENDCALLCALLEXCEPTIONEXCEPTIONE2PL/SQL中最终一定要执行一些处理,不论程序中间是否出现异常或者是出现什么异常。DMFINALLY部分,不论前面的程序块中执行出现了什么情况,FINALLY部分中的程序片段总是会被执行的。CREATEORREPLACEPROCEDUREEXCEPT2CREATEORREPLACEPROCEDUREEXCEPT2(varININT)ASE1EXCEPTIONfor-20000,'EC_01';E2EXCEPTIONfor-30000,'EC_02';IF(var<0)THENRAISEE1;ELSEIF(var>0)THENRAISEE2;ENDIF;PRINT'VARISWHENE1THEN/*异常变量E1的异常处理器*/WHENE2THENWHENE2THEN/*异常变量E2的异常处理器*/ENDEXCEPTIONEXCEPTIONE1CATCHEDFINALLYDOEXCEPTIONEXCEPTIONE2CATCHEDFINALLYDOVARVARISFINALLYDOFINALLY部分都被执行了。5DMPL/SQL语句。不同的CREATECREATETRIGGERtrigger_name[trigger_restriction]triggering_eventDMLINSERT、DELETEUPDATE,也可以是DDLLOGIN、LOGOUT、SERERR、BACKUPDATABASE、R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年机场航站楼环境卫生服务标准
- 2026年性别平等主题儿童戏剧编排
- 2026年学校健康教育课程优化与素养提升
- 脊髓疾病患者的压力管理护理
- 热点三 张雪机车一战封神(解读)-高考语文高频热点命题练习卷
- 2026届高考作文话题预测及主题素:文明之光
- 畜牧养殖场动物疫病防控技术合同
- 糕点装饰师蛋糕裱花合作框架协议
- 2026年室内设计作品集制作从大一开始准备
- 舞台搭建与拆除合同范本
- 第十章 静电场中的能量 总结提升-2023学年高二物理(人教版)
- 2.1大气的组成和垂直分层(情境教学设计)地理人教版2019
- 《地下管线BIM模型技术规程》(征求意见稿)
- 水上乐园管理制度与安全操作规范
- 实施指南《G B-T17492-2019工业用金属丝编织网技术要求和检验》
- 关于精益管理办法
- 湖北省部分高中2025届高三下学期四月统考(二模)政治试卷(含解析)
- 白细胞减少症病例讨论
- 年产200吨高纯金属铯铷项目报告书
- 2025具身智能行业发展研究报告
- 智库能力测试题及答案
评论
0/150
提交评论