版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程 一 PL/SQL基本查询与排序本课重点:1、写SELECT语句进行数据库查询2、进行数学运算3、处理空值4、使用别名ALIASES5、连接列6、在SQL PLUS中编辑缓冲,修改 SQL SCRIPTS7、ORDER BY进行排序输出。8、使用WHERE字段。一、写SQL命令:不区分大小写。SQL语句用数字分行,在SQL PLUS中被称为缓冲区。最后以;或/结束语句。也可以用RUN来执行语句二、例 1: SQL SELECT dept_id, last_name, manager_id FROM s_emp; 2: SQL SELECT last_name, salary * 12, c
2、ommission_pct FROM s_emp; 对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。SQL SELECT last_name, salary, 12 * (salary + 100) FROM s_emp;三、列的别名ALIASES :计算的时候特别有用;紧跟着列名,或在列名与别名之间加“ AS ”;如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。 例個字体原因,读者请记住:弓I号为英文双引号Double Quotatio n):SQL SELECT last_name, salary, 12 * (salary + 100) ” An
3、nual Salary” FROM s_emp;四、连接符号:|连接不同的列或连接字符串使结果成为一个有意义的短语:SQL SELECT first_name | | last_name |, | title ” EmployeesFROM s_empSQL select divid | | div name from pub_t_divisi on _test wheresuperid=001效果如下图:五、管理NULL值:SQL SELECT last_name, title, salary * NVL(commission_pct,0)/100 COMMFROM s_emp;此函数使NU
4、LL转化为有意义的一个值,相当于替换 NULL。select divid,div name,NVL(addr,0) from pub t divisi on test wheresuperid=001效果如下图:六、SQL PLUS的基本内容,请参考七、ORDER BY操作:与其他SQL92标准数据库相似,排序如:SELECT expr FROM table ORDER BY colum n, expr ASC|DESC; 从 Oracle7 release 7.0.16开始,ORDER BY 可以用别名。另:通过位置判断排序:SQL SELECT last_name, salary*12 F
5、ROM s_emp ORDER BY 2;select * from pub_t_division_testwhere superid= 001 order by 3这样就避免了再写一次很长的表达式。另:多列排序:SQL SELECT last name, dept_id, salary FROM s_emp ORDER BY dept_id, salary DESC;SQLselect* from pub_t_division_testwhere superid=001 orderby1,3 desc八、限制选取行:SELECT expr FROM table WHERE con ditio
6、 n(s)ORDER BY expr;例1:SQL SELECT first_name, last_name, start_date FROM s_emp WHERE start_date BETWEEN 09-may-91AND 17-jun-91;例2:SQL SELECT last_name FROM s_emp WHERE last_name LIKE _a%; 显示所有第二个字母为 a的last_name第一个字母为一个占位符例3:如果有列为NULLSQL SELECT id, name, credit_rati ng FROM s_customer WHERE sales_rep_
7、id IS NULL;优先级:Order Evaluated Operator1 All comparison operators (=, , , =, , SELECT first_name, last_name FROM s_emp WHERE UPPER(last_name) = PATEL ;FIRST_NAME LAST_NAMEVikram PatelRadha Patel三、数学运算函数四舍五入:ROUND(45.923, 2)= 45.92ROUND(45.923, 0) = 46ROUND(45.923, -1)= 502、TRUNC截取函数TRUNC(45.923, 2)=
8、 45.92TRUNC(45.923)= 45TRUNC(45.923, -1)= 403、MOD 余除MOD(1600, 300)实例:SQL SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)FROM SYS.DUAL;四、ORACLE日期格式和日期型函数:1、默认格式为DD-MON-YY.2、SYSDATE是一个求系统时间的函数3、DUAL dju:el是一个伪表,有人称之为空表,但不确切。SQL SELECT SYSDATE FROM SYS.DUAL;4、日期中应用的算术运算符例:SQL SELECT last_name
9、, (SYSDATE-start_date)/7 WEEKS FROM s_emp WHERE dept_id = 43;DATE+ NUMBER = DATEDATE-DATE= NUMBER OF DAYSDATE + (NUMBER/24)=力卩 1 小时5、函数:MONTHS_BETWEEN(date1, date2)月份间隔,可正,可负,也可是小数 ADD_MONTHS(date,n) 加上N个月,这是一个整数,但可以为负 NEXT_DAY(date, char)女口: NEXT_DAY (restock_date, FRIDAY ),从 此日起下个周五。ROUND(date,fmt
10、)TRUNC(date, fmt)解释下面的例子:SQL SELECT id, start_date, MONTHS_BETWEEN (SYSDATE,start_date) TENURE,ADD_M0NTHS(start_date,6) REVIEWFROM s_emp WHERE MONTHS_BETWEEN (SYSDATE,start_date)48;我们看到:MONTHS_BETWEEN (SYSDATE,start_date) select ro un d(sysdate,MONTH) from dualROUND(SYSD01-11 月-01round(sysdate,YEAR)
11、 = 01-1 月-02ROUND之后的值比基值大的最小符合值,大家可以用更改系统时间的方法 测试,以15天为分界线,也是非常形象的四舍五入,而TRUNC恰 好相反,是对现有的日期的截取。五、转换函数:1、TO_CHAR使一个数字或日期转换为 CHAR2、TO_NUMBER把字符转换为NUMBER3、TO_DATE字符转换为日期这几个函数较为简单,但要多多实践,多看复杂的实例。SQL SELECT ID,TO_CHAR(date_ordered, MM/YY ) ORDERED FROM s_ord WHERE sales_rep_id = 11;转换时,要注意正确的缺省格式:SELECT T
12、O_DATE(O3-MAR-92) CORRECT FROM DUAL ; /正确SELECT TO_DATE(O31O92) CORRECT FROM DUAL ; /不正确SELECT TO_DATE(O31O95,MMDDYY) ERRORR FROM DUAL 输出3月10日SELECT TO_DATE(O31O95,DDMMYY) ERRORR FROM DUAL 输出10月3日4、实例:SQLselect to_char(sysdate,fmDDSPTH of MONTH YYYY AM) TODAYS FROM DUAL ;大小写没有什么影响,引号中间的是不参与运算实例:SQLS
13、ELECT ROUND(SALARY*1.25) FROM ONE_TABLE 意义:涨25%工资后,去除小数位。在现实操作中,很有意义5、混合实例:SQL SELECT last_name, TO_CHAR(start_date, fmDD ”of” Mon th YYYY HIREDATE FROM s_empWHERE start_dateLIKE %91;LAST_NAME HIREDATENagayama 17 of Ju ne 1991Urguhart 18 of Jan uary 1991Havel 27 of February 1991这里要注意:fmDD和fmDDSPTH之间
14、的区别。SQL SELECT id, total, date_ordered FROM s_ord WHERE date_ordered = TO_DATE( September 7,1992,Mo nth dd, YYYY );六、独立的函数嵌套SQL SELECT CONCAT(UPPER(last_name), SUBSTR(title,3) ” Vice Preside nts FROM s_empWHERE title LIKE VP%;*嵌套可以进行到任意深度,从内向外计算。例:SQL SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS(date_ordered,
15、6); FRIDAY ),fmDay, Month ddth, YYYY ) ” New 6 Mon th Review ” FROM s_ord ORDER BY date_ordered;SQL SELECT last_name, NVL(TO_CHAR(ma nager_id), No Ma nager) FROM s_empWHEREmanager_id IS NULL ;对于例子,大家重要的理解,并多做测试,并注意英文版和中文版在日期上 的区别。有些教材上的例子,不要盲目的相信其结果,实践后才有发言权,希望大家 能够在学习的过程中不要忽略了用,多想一想为什么实例要如此设计,在何种情况
16、下应用此实例来解决问题 这样,我们才真正掌握了知识。课程三从多个表中提取数据本课重点:1、SELECT FROM多个表,使用等连接或非等连接2、使用外连接 OUTER JOIN3、使用自连接注意:以下实例中标点均为英文半角一、连接的概念:是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。连接类型:等连接、不等连接、外连接、自连接二、Cartesian product :指的是当JOIN条件被省略或无效时,所有表的行(交叉)都被SELECT出来 的现象。Cartesian product可以产生大量的记录,除非是你有意如此,否则应该加上 某种条件限制。SQL SELECT name
17、, last_name FROM s_dept, s_emp300 rows selected.其中一个表12行,一个表25行。三、简单连接查询:SELECT table.colu mn, table.colum n.FROM table1, table2WHERE table1.colu mn1 = table2.colum n2;女口: SQL SELECT s_emp.last_name, s_emp.dept_id,s_ FROMs_emp, s_deptWHERE s_emp.dept_id = s_dept.id注意:表前缀的重要性:一-SQL SELECT s_
18、dept.id ” Department ID” ,s_region.id ” Region ID” ,s_ ” Region Nam6FROM s_dept, s_regionWHERE s_dept.regi on_id = s_regio n.id在WHERE段中,如果没有前缀,两个表中都有ID字段,就显得的模棱两 可, AMBIGUOUS。这在实际中应该尽量避免。WHERE字段中,还可以有其他的连接条件,如在上例中,加上:INITCAP(s_dept.last_name) = Menchu;再如: WHERE s_emp.dept_id = s_dept.id A
19、ND s_dept.region_id = s_region.idAND s_missio n_pct Q四、表别名ALIAS :1、 使用别名进行多表查询。2、仅在这个查询中生效,一旦用了表别名,就不能再用表的原有的名字进 行连接。实例:SQL SELECT ” Customer Name, c.regiond ” Region ID” , ” Region Name”FROM s_customer c, s_regi on rWHERE c.region_id = r.id;别名最多可以30个字符,但当然越少越好。最好也能容易识别。五、非等连接非等连接一般用在没有
20、明确的等量关系的两个表;最简单的说:非等连接就是在连接中没有“=”出现的连接。SQL SELECT e.e name, e.job, e.sal, s.gradeFROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;说明:Create a non-equijoin to evaluate an employes salary grade. The salary 必须在另一个表中最高和最低之间。其他操作符 =也可以实现,但是BETWEEN是非常简单实用的。 BETWEEN .AND是指闭区间的,这点要注意,请大家测试。六、外
21、连接语法结构:SELECT table.colum n, table.colu mnFROM table1, table2WHERE table1.colu mn = table2.colum n(+);实例:SQL SELECT e.l ast_ name, e.id, c.n ameFROM s_emp e, s_customer cWHERE e.id (+) = c.sales_rep_idORDER BY e.id;显示.,即使有的客户没有销售代表。*可以理解为有+号的一边出现了 NULL,也可以做为合法的条件。外连接的限制:1、外连接符只能出现在信息缺少的那边。2、在条件中,不能用
22、IN或者OR做连接符。七、自连接同一个表中使用连接符进行查询;FROM的后面用同一个表的两个别名。实例:SQL SELECT worker.last_name| works for |FROM s_emp worker, s_emp man agerWHERE worker.ma nager_id = man ager.id;意味着:一个员工的经理Id匹配了经理的员工号,但这个像绕口令的连接 方式并不常用。以后我们会见到一种子查询:select last_ name from s_emp where salary=(select max(salary) from s_emp)也可以看作是一种变
23、向的自连接,但通常我们将其一课程四组函数本课重点:1、了解可用的组函数2、说明每个组函数的使用方法3、使用 GROUP BY4、通过HAVING来限制返回组注意:以下实例中标点均为英文半角一、概念:组函数是指按每组返回结果的函数。组函数可以出现在 SELECT和HAVING 字段中。GROUP BY把SELECT的结果集分成几个小组。 HAVING来限制返回组,对RESULT SET而言。二、组函数:倂号的函数不做重点)1、AVG2、COUNT3、MAX4、MIN5、STDDEV #6、SUM7、VARIANCE #语法:SELECT colu mn, group_f un cti onFRO
24、M tableWHERE con ditio nGROUP BY group_by_expressio nHAVING group_c on diti on ORDER BY colu mn ;实例1: 一个混合实例,说明所有问题:SQL SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM s_empWHERE UPPER(title) LIKE SALES%;1476152514007380说明:很多函数,我们在讲函数的已经向大家介绍过,但在此为何叫分组函数呢, 主要是因为它们可以与 GROUPBY来形成对不同组的计算
25、,相当于在很多值中进行挑选。* MIN MAX 函数可以接任何数据类型。如果是 MIN(last_name), MAX(last_name),返回的是什么呢?千万记住,不是指LAST_NAME的长度,而是指在FIRST字母的前后顺序, 第一个相同,然后比较第二个,女口: xdopt css in gkdkdk adopt acccc实例2:SQL SELECT COUNT(commission_pct)FROM s_emp WHERE dept_id = 31;返回所有非空行个数三、GROUP BY的应用:先看一个简单实例:SQL SELECT credit_rating, COUNT(*)
26、” # Cust”FROM s_customer GROUP BY credit_rat ing;注意这里别名的应用,一复习一下从前的课程,加了引号后,就可以用特殊字符,但也仅有三个:#$_,什么对象的名字都女口此匕。当然空格也是可以的。复杂实例:SQL SELECT title, SUM(salary) PAYROLLFROM s_empWHERE title NOT LIKE VP% GROUP BY titleORDER BY SUM(salary);这里要注意一下几个CLAUSE的先后次序。WHERE在这里主要是做参与分组的记录的限制。*另外,如果要选取出来一个不加组函数的列,如上面的
27、TITLE,就要把这个列GROUP BY !否则要出错的!信息为:ERROR at line 1:ORA-00937: not a sin gle-group group fun cti on理论很简单,如果不 GROUP BY TITLE,显示哪一个呢?这个在试题中经常出现。结论:不加分组函数修饰的列必定要出现在GROUP BY里。错误实例:SQL SELECT dept_id, AVG(salary)FROM s_empWHERE AVG(salary) 2000 GROUP BY dept_id;WHERE AVG(salary) 2000ERROR at line 3:ORA-0093
28、4: group fun ctio n is not allowed here 应在 GROUP BY 后面加上 HAVING AVG(salary) 2000;因为是用来限制组的返回。多级分组实例:SQL SELECT dept_id, title, COUNT(*)FROM s_empGROUP BY dept_id, title;就是先按照DEPT_ID分组,当DEPT_ID相同的时候,再按TITLE分组, 而COUNT(*)以合成的组计数。顺序对结果有决定性的影响。总结:本课我们主要学习了分组函数的使用及如何进行分组查询,我们可以想像一下,SQL SERVER中有COMPUTE BY,
29、来进行分组总数的计算,但在 ORACLE中是没有的。大 家可以建立一个有多个列,多个重复值的表,然后进行各种分组的演示,用得多了,自然明了。课程五子查询本课重点:1、在条件未知的情况下采用嵌套子查询2、用子查询做数据处理3、子查询排序注意:以下实例中标点均为英文半角一、概述:子查询是一种SELECT句式中的高级特性,就是一个 SELECT语句作为另 一个语句的一个段。我们可以利用子查询来在 WHERE字段中引用另一个查询来攻取值以补充其无法事先 预知的子结果。子查询可以用在 WHERE子句,HAING 子句,SELECT或DELETE语句中的FROM子句。注意:1、子查询必须在一对圆括号里。2
30、、比较符号: ,=,或者IN.3、子查询必须出现在操作符的右边4、 子查询不能出现在ORDER BY里(试题中有时出现找哪行出错)二、子查询的执行过程:NESTED QUERY MAIN QUERYSQLSELECT last_name, title FROM s_empWHERE dept_id =( SELECT dept_id FROM s_emp WHERE UPPER(last_name)= BIRI )这里,每个查询只运行一次。当然,子查询要首先被执行,大家设想一下, 如果子查询中有一个以上的人的LASTNAME为BIRI,会如何?-会出错,因为不能用=来连接。ORA-1427:
31、si ngle-row subquery returns more tha none row以上的查询也被称之为 单行子查询。DELECT子查询实例:delete from n ew_table where cata_time to_date(19990901,yyyymmdd) and pro_n ame=(select pro_n ame from n ew_product where pro_addr in (bj,sh)三、子查询中的GROUP函数的应用实例1:SQL SELECT last_name, title, salaryFROM s_empWHERE salary SELEC
32、T dept_id, AVG(salary)FROM s_empGROUP BY dept_idHAVING AVG(salary) (SELECT AVG(salary)FROM s_empWHERE dept_id = 32);子查询被多次执行,因为它出现在 HAVING 子句中。FROM s_empGROUP BY titleHAVING AVG(salary)=(SELECT MIN(AVG(salary)FROM s_empGROUP BY title);对子查询,我们了解这么多在理论上已经覆盖了所有的知识点,对于UPDATE和DELETE的子查询,不作 为重点,但也要练习掌握。今天
33、到这,谢谢大家。课程六运行时应用变量本课重点:1、创建一个SELECT语句,提示USER在运行时先对变量赋值。2、自动定义一系列变量,在 SELECT运行时进行提取。3、在SQL PLUS中用ACCEPT定义变量注意:以下实例中标点均为英文半角一、概述:变量可以在运行时应用,变量可以出现在 WHERE字段,文本串,列名,1、我们这里的运行时,指的是在 SQL PLUS中运行。2、ACCEPT :读取用户输入的值并赋值给变量3、DEFINE :创建并赋值给一个变量4、在做REPORT时经常使用,比如对某个部门的销售信息进行统计,部门 名称可以以变量代替。SQL PLUS不支持对输入数据的有效性检
34、查,因此提示要简单且不模棱两 可。二、应用实例:1、SQL SELECT id, last_name, salaryFROM s_empWHERE dept_id = &departme nt_nu mber2、可以在赋值前后进行比较:SET VERIFY ONSQLselect * from emp where last name=&last_ name输入 last_name 的值:adopt原值1: select * from emp where last name=&last_ name新值1: select * from emp where last name=adopt-如果在原语
35、句中没有单引号,那么在输入值的时候要手工加上单引号般字符和日期型要在语句中加 上单引号。SET VERIFY OFF之后,原值和新值这两句消失。这在 ORACLE8I中是默 认为ON。3、子句为变量:WHERE &con ditio n; 要注意引号三、DEFINE和ACCEPT的应用:1、SET ECHO OFF 使内容不 显示在用户界面 ACCEPT p_dname PROMPT Provide the department name:SELECT , r.id, ” REGION NAME ”FROM s_dept d, s_region rWHERE d.re
36、giond = r.id AND UPPER(d. name) LIKEUPPER( %&p_dname%)SET ECHO ON存为文件:l7prompt.SQLSQL START l7promptProvide the departme nt n ame: sales2、SQL DEFINE dname = salesSQL DEFINE dn ameDEFINE dname = ” sale/ (CHAR)SQL SELECT n ameFROM s_dept WHERE lower(name) = &dname;可以正常执行了。SQL DEFINE dn ame主要是显示当前的变量是否
37、赋值,值是什么。当然,我们可以用UNDEFINEGO 来使变量恢复初始,不然它会一直保持下去。3、如果变量在SQL SCRIPT文件中确定:可以SQL START l7param Preside nt 来赋值。总结:本课主要针对较古老的 SQLPLUS方法,在REPORT和结果集生成方 面使用变量,达到方便操作,动态修改的目的。课程七其他数据库对象SEQUENCE创建实例:INCREMENT BY 1START WITH 51MAXVALUE 9999999NOCACHENOCYCLE;Seque nee created.1、NEXTVAL 和 CURRVAL 的用法 只有在INSERT 中,
38、才可以作为子查询出现。以下几个方面不可用子查询:SELECT 子句 OF A VIEW有DISTINCT的出现的SELECT0有 GROUP BY , HAVING , ORDER BY 的 SELECT 子句。SELECT 或 DELETE , UPDATE 中的子查询。DEFAULT选项中不能用。2、编辑 SEQUENCE只有OWNER或有ALTER权限的用户才能修改 SEQUENCE未来的NUMBER受修改的影响。不能修改START WITH,如果变,贝U要 RE-CREATE。修改会受到某些有效性检验的限制,如 MAXVALUE3、删除:DROP SEQUENCE seque nee;
39、ORACLE 对象之 INDEX一、INDEX 概述:是ORACLE的一种数据对象,用POINTER来加速查询行。通过快速路径存取方法定位数据并减少I/O 0INDEX独立于表。INDEX由ORACLE SERVER来使用和保持。二、索引如何建立?1、自动:通过 PRIMARY KEY和UNIQUE KEY 约束来建立。2、用户手工建立非唯一性索引。三、创建方法:语法:CREATE INDEX indexON table (colu mn, eolu mn .);何时建立INDEX :此列经常被放到 WHERE字段或JOIN来作条件查询 此列含有大量的数据。此列含有大量的空值。两个或几个列经常
40、同时放到WHERE字段进行组合查询 表很大而且只有少于2-4%的ROW可能被查询的时候。以下情况不要建立索引:表很小;表被更新频繁。四、查看已经存在的索引:1、USER_INDEXES可以查询索引名和类型。2、USER_IND_COLUMNS包含索弓I名、表名、列名。 实例:SQL SELECT ic.i ndex_ name, ic.colu mn_n ame,ic.colu mn _positio n col_pos, ix.uniquen essFROM user_i ndexes ix, user_i nd_colu mns icWHERE ic.i ndex_ name = ix.i
41、 ndex_ nameAND ic.table_name = S_EMP;五、删除索引:DROP INDEX in dex;SYNONYMS同义词语法:CREATE PUBLIC SYNONYM synon ym for object;注意:此对象不能包含在一个包里;一个私有的同义词不能与同一 USER的其他对象重名。DROP SYNONYM D_SUM ;课程八用户访问控制本课重点:1、创建用户2、创建角色来进行安全设置3、使用GRANT或REVOKE 来控制权限 注意:以下实例中标点均为英文半角一、概述:ORACLE通过用户名和密码进行权限控制。 数据库安全:系统安全和数据安全 系统权限:
42、使用户可以访问数据库 对象权限:操纵数据库中的对象SCHEMA :各种对象的集合二、系统权限:1、超过80个权限可用。CREATE NEW USERREMOVE USERSREMOVE ANY TABLEBACKUP ANY TABLE三、创建用户1、CREATE USER user IDENTIFIED BY password;2、系统权限:CREATE SESSION Conn ect to the database.CREATE TABLE Create tables in the use s schema.CREATE SEQUENCE Create a seque nee in th
43、e users schema.CREATE VIEW Create a view in the user s schema.CREATE PROCEDURE Create a stored procedure, function, or package in the user s schema.3、授权用户系统权限:GRANT privilege , privilege. TO user , user.;GRANT CREATE TABLE TO SCOTT ;四、角色的使用1、概念:角色是一组权限的命名,可以授予给用户。这样就如同给了某个 用户一个权限包。2、创建、授予给角色:CREATE
44、ROLE MANAGER ;GRANT CREATE TABLE,CREATE VIEW TO MANAGER ;GRANT MANAGER TO CLARK五、修改密码:ALTER USER user IDENTIFIED BY password;六、对象权限:1、语句:GRANT object_priv(, object_priv.)|ALL(columns)ON objectTO user, user.|role|PUBLICWITH GRANT OPTION;2、实例:最简单:SQL GRANT select ON s_emp TO sue, rich;稍复杂:SQL GRANT up
45、date (n ame, regiond) ON s_dept TO scott, ma nagerSQL GRANT select, insert ON s_dept TO scott WITH GRANT OPTION ;课程九声明变量 本课重点:1、了解基本的PLSQL块和区域3、区别 PLSQL 与非 PLSQL 变量4、声明变量5、执行PLSQL块注意:以下实例中标点均为英文半角一、概述:1、PLSQL块结构:DECLARE -可选变量声明定义BEGIN -必选SQL和PLSQL语句EXCEPTION -可选错误处理END ;-必选二、实例:declare vjob varchar(
46、9);v_co unt nu mber:=0;vtotal date:=sysdate+7;c_tax con sta nt nu mber(3,2):=8.25;v_valid boolea n not n ull:=true;begi nselect sysdate into vtotal from dual;end;上例中,如果没有这个SELECT语句,会如何?出错,说明必须有STATEMENTS如果:select sysdate from dual into vtotal ;同样,也不行。而且变量与赋值 的类型要匹配。三、TYPE的属性声明一个变量使之与数据库某个列的定义相同或与另一个
47、已经定义过的变 量相同所以%TYPE要作为列名的后缀:如:v_last_ name s_emp.last_ name%TYPE;v_first_name s_emp.first_name%TYPE;-这样做的好处是我们不必去知晓此 列的类型与定义一 一或:v_balanee NUMBER(7,2);v_minimum_balanee v_balance%TYPE :=10;四、声明一个布尔类型的变量1只有TRUE、FALSE、NULL可以赋值给 BOOLEAN变量2此变量可以接逻辑运算符 NOT、AND、OR。3变量只能产生TRUE、FALSE、NULL。实例:=(VSAL1 variable
48、 n nu mberSQL print n:n=v_sal /12;:n这个加了:前缀的变量不是 PLSQL变量,而是HOST。七、以下几个PLSQL声明变量,哪个不合法?A、DECLAREV_ID NUMBER(4);B、DECLAREV_X,V_Y,V_Z VARCHAR2(9);C、DECLAREV_BIRTH DATE NOT NULL ;D、DECLAREV_IN_STOCK BOOLEAN : =1;E、DECLARETYPE NAME_TAB IS TABLE OF VARCHAR2(20)INDEX BY BINARY_INTEGER ;DEPT_NAME NAME_TAB ;
49、上面的习题我会在下章给出答案,这也正是声明变量的规则和难点课程十写执行语句本课重点:1、了解PLSQL执行区间的重要性2、写执行语句3、描述嵌套块的规则4、执行且测试PLSQL块5、使用代码惯例注意:以下实例中标点均为英文半角一、PLSQL块的语法规则:1、语句可以跨跃几行。2、词汇单元可以包括:分隔符、标识符、文字、和注释内容3、分隔符:-*/=v|.4、标识符:最多30个字符,不能有保留字除非用双引号引起。字母开头,不与列同名。5、文字串:如 V_ENAME:=FANCY;要用单引号括起来。 数值型可以用简单记数和科学记数法。6、注释内容:单行时用- 多行用/*/ 与C很相似二、SQL函数
50、在PL/SQL的使用:1、可用的:单行数值型、字符型和转换型,日期型。2、不可用的:最大、最小、DECODE、分组函数。实例:BEGINSELECT TO_CHAR(HIREDATE,MON,DD,YYYY) FROM EMP;END;V_comme nt:=user|:|sysdate;-会编译出错V_comme nt:=user|:|to_char(sysdate);正确如果有可能,PLSQL都会进行数据一致性的转换,但 ORACLE推荐你应该 进行显示的转换,因为这样会提高性能。三、嵌套块和变量作用区域1、执行语句允许嵌套时嵌套。2、嵌套块可以看作正常的语句块。3、错误处理模块可以包括一
51、个嵌套块4、exponential指数逻辑、算数、连接、小括号5、看正面实例:declarejob varchar(9);_count nu mber:=0;total date:=sysdate +7;_tax con sta nt nu mber(3,2):=8.25;_valid boolea n not nu ll:=true;tt vtotal%type;begi n-select sysdate into vtotal from dual;-体会有无此句与结果的影响 dbms_output.put_li ne (vtotal);end;/注意:在执行块之前,要在 SQL PLUS中执行:SET SERVE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南省建筑安全员-B证(项目经理)考试题库
- 2025广东省安全员B证考试题库
- 广州应用科技学院《建筑设计专题》2023-2024学年第一学期期末试卷
- 广州铁路职业技术学院《住宅室内设计》2023-2024学年第一学期期末试卷
- 广州铁路职业技术学院《采矿工程》2023-2024学年第一学期期末试卷
- 2025年浙江省安全员B证(项目经理)考试题库
- 2025黑龙江省安全员考试题库附答案
- 2025年-河北省安全员《B证》考试题库
- 《电影天堂》课件
- 植物的逆境生理-课件
- 矿山隐蔽致灾普查治理报告
- 零星维修工程 投标方案(技术方案)
- 护理基础测试题+参考答案
- 副总经理招聘面试题与参考回答(某大型国企)2024年
- 2024年SATACT家教培训合同
- 《ESPEN重症病人营养指南(2023版)》解读课件
- 智慧茶园监控系统的设计
- 2024年宜宾发展产城投资限公司第三批员工公开招聘高频难、易错点500题模拟试题附带答案详解
- 2024年省宿州市“宿事速办”12345政务服务便民热线服务中心招考15名工作人员高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024年安徽省行政执法人员资格认证考试试题含答案
- 中国2型糖尿病运动治疗指南 (2024版)
评论
0/150
提交评论