




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PL/SQL 简明教程什么是PL/SQL 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可。 例:delete from students where major=Nutrition; 然而,对于有些复杂的业务流程又要求相应的程序来描述,那么4GL就有些无能为力了。 PL/SQL通过增加了用在其它过程性语言中的结构来对SQL进行了扩展,使得它不仅仅是一个数据库查询语言,而且也是一个编程语言。课程内容 一 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_id2 FROM s_emp;2:SQL SELECT last_name, salary * 12, commission_pct2 FROM s_emp;对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。SQL SELECT last_name, salary, 12 * (salary + 100)2 FROM s_emp;三、列的别名ALIASES:计算的时候特别有用;紧跟着列名,或在列名与别名之间加“AS”;如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。例(因字体原因,读者请记住:引号为英文双引号Double Quotation):SQL SELECT last_name, salary,2 12 * (salary + 100) ”Annual Salary”3 FROM s_emp;四、连接符号:|连接不同的列或连接字符串使结果成为一个有意义的短语:SQL SELECT first_name | | last_name2 | , | title ”Employees”3 FROM s_emp;五、管理NULL 值:SQL SELECT last_name, title,2 salary * NVL(commission_pct,0)/100 COMM3 FROM s_emp;此函数使NULL 转化为有意义的一个值,相当于替换NULL。六、SQL PLUS 的基本内容,请参考七、ORDER BY 操作:与其它SQL92 标准数据库相似,排序如:SELECT exprFROM tableORDER BY column,expr ASC|DESC;从Oracle7 release 7.0.16 开始,ORDER BY 可以用别名。另:通过位置判断排序:SQL SELECT last_name, salary*122 FROM s_emp3 ORDER BY 2;这样就避免了再写一次很长的表达式。另:多列排序:SQL SELECT last name, dept_id, salary2 FROM s_emp3 ORDER BY dept_id, salary DESC;八、限制选取行:SELECT exprFROM tableWHERE condition(s)ORDER BY expr;例1:SQL SELECT first_name, last_name, start_date2 FROM s_emp3 WHERE start_date BETWEEN 09-may-914 AND 17-jun-91;例2:SQL SELECT last_name2 FROM s_emp3 WHERE last_name LIKE _a%; /显示所有第二个字母为 a 的last_name例3:如果有列为NULLSQL SELECT id, name, credit_rating2 FROM s_customer3 WHERE sales_rep_id IS NULL;优先级:Order Evaluated Operator1 All comparison operators (=, , , =, , SELECT first_name, last_name2 FROM s_emp3 WHERE UPPER(last_name) = PATEL;FIRST_NAME LAST_NAME- -Vikram PatelRadha Patel三、数学运算函数1、ROUND四舍五入:ROUND(45.923,2) = 45.92ROUND(45.923,0) = 46ROUND(45.923,-1) = 502、TRUNC截取函数TRUNC(45.923,2)= 45.92TRUNC(45.923)= 45TRUNC(45.923,-1)= 403、MOD 余除MOD(1600,300)实例:SQL SELECT ROUND(45.923,2), ROUND(45.923,0),2 ROUND(45.923,-1)3 FROM SYS.DUAL;四、ORACLE 日期格式和日期型函数:1、默认格式为DD-MON-YY.2、SYSDATE 是一个求系统时间的函数3、DUALdju:el 是一个伪表,有人称之为空表,但不确切。SQL SELECT SYSDATE2 FROM SYS.DUAL;4、日期中应用的算术运算符例:SQL SELECT last_name, (SYSDATE-start_date)/7 WEEKS2 FROM s_emp3 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)TRUNC(date,fmt)解释下面的例子:SQL SELECT id, start_date,2 MONTHS_BETWEEN (SYSDATE,start_date) TENURE, (这句尚未明白!)3 ADD_MONTHS(start_date,6) REVIEW4 FROM s_emp5 WHERE MONTHS_BETWEEN (SYSDATE,start_date)48;我们看到: MONTHS_BETWEEN (SYSDATE,start_date) select round(sysdate,MONTH) from dualROUND(SYSD-01-11 月-01round(sysdate,YEAR) = 01-1 月 -02ROUND 之后的值比基值大的最小符合值,大家可以用更改系统时间的方法测试,以15 天为分界线,也是非常形象的四舍五入,而TRUNC 恰好相反,是对现有的日期的截取。五、转换函数:1、TO_CHAR使一个数字或日期转换为CHAR2、TO_NUMBER把字符转换为NUMBER3、TO_DATE字符转换为日期这几个函数较为简单,但要多多实践,多看复杂的实例。SQL SELECT ID,TO_CHAR(date_ordered,MM/YY) ORDERED2 FROM s_ord3 WHERE sales_rep_id = 11;转换时,要注意正确的缺省格式:SELECT TO_DATE(03-MAR-92) CORRECT FROM DUAL;/正确SELECT TO_DATE(031092) CORRECT FROM DUAL;/不正确SELECT TO_DATE(031095,MMDDYY) ERRORR FROM DUAL输出 3 月10 日SELECT TO_DATE(031095,DDMMYY) ERRORR FROM DUAL输出 10 月3 日4、实例:select to_char(sysdate,fmDDSPTH of MONTH YYYY AM) TODAYS FROM DUAL;TODAYS-SIXTEENTH of 11 月 2001 下午大小写没有什么影响,引号中间的是不参与运算。实例 :SELECT ROUND(SALARY*1.25) FROM ONE_TABLE;意义:涨25%工资后,去除小数位。在现实操作中,很有意义。5、混合实例:SQL SELECT last_name, TO_CHAR(start_date,2 fmDD ”of” Month YYYY) HIREDATE3 FROM s_emp4 WHERE start_date LIKE %91;LAST_NAME HIREDATE- -Nagayama 17 of June 1991Urguhart 18 of January 1991Havel 27 of February 1991这里要注意:fmDD 和 fmDDSPTH 之间的区别。SQL SELECT id, total, date_ordered2 FROM s_ord3 WHERE date_ordered =4 TO_DATE(September 7, 1992,Month dd, YYYY);六、独立的函数嵌套SQL SELECT CONCAT(UPPER(last_name),2 SUBSTR(title,3) ”Vice Presidents”3 FROM s_emp4 WHERE title LIKE VP%;* 嵌套可以进行到任意深度,从内向外计算。例:SQL SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS2 (date_ordered,6),FRIDAY),3 fmDay, Month ddth, YYYY)4 ”New 6 Month Review”5 FROM s_ord6 ORDER BY date_ordered;SQL SELECT last_name,2 NVL(TO_CHAR(manager_id),No Manager)3 FROM s_emp4 WHERE manager_id IS NULL;PL/Sql 循序渐进全面学习教程-Oracle(2)课程 三 从多个表中提取数据本课重点:1、SELECT FROM 多个表,使用等连接或非等连接2、使用外连接OUTER JOIN3、使用自连接注意:以下实例中标点均为英文半角一、连接的概念:是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。连接类型:等连接、不等连接、外连接、自连接二、Cartesian product :指的是当JOIN 条件被省略或无效时,所有表的行(交叉)都被SELECT 出来的现象。Cartesian product 可以产生大量的记录,除非是你有意如此,否则应该加上某种条件限制。SQL SELECT name, last_name2 FROM s_dept, s_emp;300 rows selected. 其中一个表12 行,一个表25 行。三、简单连接查询:SELECT table.column, table.column.FROM table1, table2WHERE table1.column1 = table2.column2;如:SQL SELECT s_emp.last_name, s_emp.dept_id,2 s_3 FROM s_emp, s_dept4 WHERE s_emp.dept_id = s_dept.id;注意:表前缀的重要性:SQL SELECT s_dept.id ”Department ID”,2 s_region.id ”Region ID”,3 s_ ”Region Name”4 FROM s_dept, s_region5 WHERE s_dept.region_id = s_region.id;在WHERE 段中,如果没有前缀,两个表中都有ID 字段,就显得的模棱两可,AMBIGUOUS。这在实际中应该尽量避免。WHERE 字段中,还可以有其它的连接条件,如在上例中,加上:INITCAP(s_dept.last_name) = Menchu;再如:WHERE s_emp.dept_id = s_dept.id AND s_dept.region_id = s_region.id ANDs_mission_pct 0;四、表别名ALIAS:1、使用别名进行多表查询 。2、仅在这个查询中生效,一旦用了表别名,就不能再用表的原有的名字进行连接。实例:SQL SELECT ”Customer Name”,2 c.region_id ”Region ID”,3 ”Region Name”4 FROM s_customer c, s_region r5 WHERE c.region_id = r.id;别名最多可以30 个字符,但当然越少越好。最好也能容易识别。五、非等连接非等连接一般用在没有明确的等量关系的两个表;最简单的说:非等连接就是在连接中没有“=”出现的连接。SQL SELECT e.ename, e.job, e.sal, s.grade2 FROM emp e, salgrade s3 WHERE e.sal BETWEEN s.losal AND s.hisal;说明:Create a non-equijoin to evaluate an employees salary grade. The salary 必须在另一个表中最高和最低之间。其它操作符= 也可以实现,但是BETWEEN 是非常简单实用的。BETWEEN .AND 是指闭区间的,这点要注意 ,请大家测试。六、外连接语法结构:SELECT table.column, table.columnFROM table1, table2WHERE table1.column = table2.column(+);实例:SQL SELECT e.last_name, e.id, 2 FROM s_emp e, s_customer c3 WHERE e.id (+) = c.sales_rep_id4 ORDER BY e.id;显示.,即使有的客户没有销售代表。* 可以理解为有+号的一边出现了NULL,也可以做为合法的条件。外连接的限制:1、外连接符只能出现在信息缺少的那边。2、在条件中,不能用 IN 或者 OR 做连接符。七、自连接同一个表中使用连接符进行查询;FROM 的后面用同一个表的两个别名。实例:SQL SELECT worker.last_name| works for |2 manager.last_name3 FROM s_emp worker, s_emp manager4 WHERE worker.manager_id = manager.id;意味着:一个员工的经理ID 匹配了经理的员工号,但这个像绕口令的连接方式并不常用。以后我们会见到一种 子查询:select last_name from s_emp where salary=(select max(salary) from s_emp)也可以看作是一种变向的自连接,但通常我们将其课程 四 组函数本课重点:1、了解可用的组函数2、说明每个组函数的使用方法3、使用GROUP BY4、通过HAVING 来限制返回组注意:以下实例中标点均为英文半角一、概念:组函数是指按每组返回结果的函数。组函数可以出现在SELECT 和HAVING 字段中。GROUP BY 把SELECT 的结果集分成几个小组。HAVING 来限制返回组,对RESULT SET 而言。二、组函数:(#号的函数不做重点)1、AVG2、COUNT3、MAX4、MIN5、STDDEV #6、SUM7、VARIANCE #语法:SELECT column, group_functionFROM tableWHERE conditionGROUP BY group_by_expressionHAVING group_conditionORDER BY column;实例1:一个混合实例,说明所有问题:SQL SELECT AVG(salary), MAX(salary), MIN(salary),2 SUM(salary)3 FROM s_emp4 WHERE UPPER(title) LIKE SALES%;AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)- - - -1476 1525 1400 7380说明:很多函数,我们在讲函数的已经向大家介绍过,但在此为何叫分组函数呢,主要是因为它们可以与GROUP BY 来形成对不同组的计算,相当于在很多值中进行挑选。* MIN MAX 函数可以接任何数据类型。如果是MIN(last_name), MAX(last_name),返回的是什么呢?千万记住,不是指LAST_NAME 的长度,而是指在FIRST 字母的前后顺序,第一个相同,然后比较第二个,如:xdopt cssingkdkdk adopt acccc实例2:SQL SELECT COUNT(commission_pct)2 FROM s_emp3 WHERE dept_id = 31;返回所有非空行个数三、GROUP BY 的应用:先看一个简单实例:SQL SELECT credit_rating, COUNT(*) ”# Cust”2 FROM s_customer3 GROUP BY credit_rating;注意这里别名的应用,复习一下从前的课程,加了引号后,就可以用特殊字符,但也仅有三个:#$_,什么对象的名字都如此。当然空格也是可以的。复杂实例:SQL SELECT title, SUM(salary) PAYROLL2 FROM s_emp3 WHERE title NOT LIKE VP%4 GROUP BY title5 ORDER BY SUM(salary);这里要注意一下几个CLAUSE 的先后次序。WHERE 在这里主要是做参与分组的记录的限制。*另外,如果要选取出来一个不加组函数的列,如上面的TITLE,就要把这个列GROUP BY !否则要出错的!信息为:ERROR at line 1:ORA-00937: not a single-group group function理论很简单,如果不GROUP BY TITLE,显示哪一个呢?这个在试题中经常出现。结论:不加分组函数修饰的列必定要出现在GROUP BY 里。错误实例:SQL SELECT dept_id, AVG(salary)2 FROM s_emp3 WHERE AVG(salary) 20004 GROUP BY dept_id;WHERE AVG(salary) 2000*ERROR at line 3:ORA-00934: group function is not allowed here应在GROUP BY 后面加上HAVING AVG(salary) 2000;因为是用来限制组的返回。多级分组实例:SQL SELECT dept_id, title, COUNT(*)2 FROM s_emp3 GROUP BY dept_id, title;就是先按照DEPT_ID 分组,当DEPT_ID 相同的时候,再按TITLE 分组,而COUNT(*)以合成的组计数。顺序对结果有决定性的影响。课程 五 子查询本课重点:1、在条件未知的情况下采用嵌套子查询2、用子查询做数据处理3、子查询排序注意:以下实例中标点均为英文半角一、概述:子查询是一种SELECT 句式中的高级特性,就是一个SELECT 语句作为另一个语句的一个段。我们可以利用子查询来在WHERE 字段中引用另一个查询来攻取值以补充其无法事先预知的子结果。子查询可以用在WHERE 子句,HAING 子句,SELECT 或DELETE 语句中的FROM 子句。注意:1、子查询必须在一对圆括号里。2、比较符号:, =, 或者 IN.3、子查询必须出现在操作符的右边4、子查询不能出现在ORDER BY 里 (试题中有时出现找哪行出错)二、子查询的执行过程:NESTED QUERY MAIN QUERYSQL SELECT dept_id SQL SELECT last_name, title2 FROM s_emp 2 FROM s_emp3 WHERE UPPER(last_name)=BIRI; 3 WHERE dept_id =这里 ,每个查询只运行一次。当然,子查询要首先被执行,大家设想一下,如果子查询中有一个以上的人的LASTNAME 为BIRI,会如何?-会出错,因为不能用=来连接。ORA-1427: single-row subquery returns more thanone row以上的查询也被称之为 单行子查询。DELECT 子查询实例:delete from new_table where cata_time to_date(19990901,yyyymmdd) and pro_name=(select pro_name from new_product where pro_addr in (bj,sh)三、子查询中的GROUP 函数的应用实例 1:SQL SELECT last_name, title, salary2 FROM s_emp3 WHERE salary SELECT dept_id, AVG(salary)2 FROM s_emp3 GROUP BY dept_id4 HAVING AVG(salary) 5 (SELECT AVG(salary)6 FROM s_emp7 WHERE dept_id = 32);子查询被多次执行,因为它出现在HAVING 子句中。SQL SELECT title, AVG(salary)2 FROM s_emp3 GROUP BY title4 HAVING AVG(salary) =5 (SELECT MIN(AVG(salary)6 FROM s_emp7 GROUP BY title);对子查询,我们了解这么多在理论上已经覆盖了所有的知识点,对于UPDATE 和DELETE 的子查询,不作为重点,但也要练习掌握。今天到这,谢谢大家。课程 六 运行时应用变量本课重点:1、创建一个SELECT 语句,提示USER 在运行时先对变量赋值。2、自动定义一系列变量,在SELECT 运行时进行提取。3、在SQL PLUS 中用ACCEPT 定义变量注意:以下实例中标点均为英文半角一、概述:变量可以在运行时应用,变量可以出现在WHERE 字段元,文本串,列名,表名等。1、我们这里的运行时,指的是在SQL PLUS 中运行。2、ACCEPT :读取用户输入的值并赋值给变量3、DEFINE:创建并赋值给一个变数4、在做REPORT 时经常使用,比如对某个部门的销售信息进行统计,部门名称可以以变量代替。SQL PLUS 不支持对输入数据的有效性检查,因此提示要简单且不模棱两可。二、应用实例:1、SQL SELECT id, last_name, salary2 FROM s_emp3 WHERE dept_id = &department_number;2、可以在赋值前后进行比较:SET VERIFY ON.1* select * from emp where lastname=&last_name输入 last_name 的值: adopt原值 1: select * from emp where lastname=&last_name新值 1: select * from emp where lastname=adopt-如果在原语句中没有单引号,那么在输入值的时候要手工加上单引号。一般字符和日期型要在语句中加上单引号。SET VERIFY OFF 之后,原值和新值这两句消失。这在ORACLE8I 中是默认为ON。3、子句为变数:WHERE &condition; 要注意引号三、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.region_id = r.idAND UPPER() LIKE UPPER(%&p_dname%)/SET ECHO ON存为文件:l7prompt.SQLSQL START l7promptProvide the department name: sales2、SQL DEFINE dname = salesSQL DEFINE dnameDEFINE dname = ”sales” (CHAR)SQL SELECT name2 FROM s_dept3 WHERE lower(name) = &dname;可以正常执行了。SQL DEFINE dname 主要是显示当前的变量是否赋值,值是什么。当然,我们可以用UNDEFINEGO 来使变量恢复初始,不然它会一直保持下去。3、如果变量在SQL SCRIPT 文件中确定 :可以SQL START l7param President 来赋值。总结:本课主要针对较古老的SQLPLUS 方法,在REPORT 和结果集生成方面使用变量,达到方便操作,动态修改的目的。14:39 | 添加评论 | 固定链接 | 引用通告 (0) | 写入日志 | 计算机与 InternetPL/Sql 循序渐进全面学习教程-Oracle(3)课程 七 其它数据库对象SEQUENCE创建实例:SQL CREATE SEQUENCE s_dept_id2 INCREMENT BY 13 START WITH 514 MAXVALUE 99999995 NOCACHE6 NOCYCLE;Sequence created.1、NEXTVAL 和CURRVAL 的用法只有在INSERT 中,才可以作为子查询出现。以下几个方面不可用子查询:SELECT 子句OF A VIEW有DISTINCT 的出现的SELECT。有GROUP BY,HAVING,ORDER BY 的SELECT 子句。SELECT 或DELETE,UPDATE 中的子查询。DEFAULT 选项中不能用。2、编辑SEQUENCE只有OWNER 或有ALTER 权限的用户才能修改SEQUENCE未来的NUMBER 受修改的影响。不能修改START WITH,如果变,则要RECREATE。修改会受到某些有效性检验的限制,如MAXVALUE3、删除:DROP SEQUENCE sequence;ORACLE 对象之INDEX一、INDEX 概述:是ORACLE 的一种数据对象,用POINTER 来加速查询行。通过快速路径存取方法定位数据并减少I/O。 INDEX 独立于表。INDEX 由ORACLE SERVER 来使用和保持。二、索引如何建立?1、自动:通过PRIMARY KEY 和UNIQUE KEY 约束来建立。2、用户手工建立非唯一性索引。三、创建方法:语法:CREATE INDEX indexON table (column, column.);何时建立INDEX:此列经常被放到WHERE 字段或JOIN 来作条件查询。此列含有大量的数据。此列含有大量的空值。两个或几个列经常同时放到WHERE 字段进行组合查询表很大而且只有少于2-4% 的ROW 可能被查询的时候。以下情况不要建立索引:表很小;表被更新频繁。四、查看已经存在的索引:1、USER_INDEXES 可以查询索引名和类型。2、USER_IND_COLUMNS 包含索引名、表名、列名。实例:SQL SELECT ic.index_name, ic.column_name,2 ic.column_position col_pos, ix.uniqueness3 FROM user_indexes ix, user_ind_columns ic4 WHERE ic.index_name = ix.index_name5 AND ic.table_name = S_EMP;五、删除索引:DROP INDEX index;SYNONYMS 同义词语法:CREATE PUBLIC SYNONYM synonym for object;注意:此对象不能包含在一个包里;一个私有的同义词不能与同一USER 的其它对象重名。DROP SYNONYM D_SUM;课程 八 用户访问控制本课重点:1、创建用户2、创建角色来进行安全设置3、使用GRANT 或REVOKE 来控制权限注意:以下实例中标点均为英文半角一、概述:ORACLE 通过用户名和密码进行权限控制。数据库安全:系统安全和数据安全系统权限:使用户可以访问数据库对象权限:操纵数据库中的对象SCHEMA:各种对象的集合二、系统权限:1、超过80 个权限可用。2、DBA 有最高的系统权限:CREATE NEW USERREMOVE USERSREMOVE ANY TABLEBACKUP ANY TABLE三、创建用户1、CREATE USER user IDENTIFIED BY password;2、系统权限:CREATE SESSION Connect to the database.CREATE TABLE Create tables in the users schema.CREATE SEQUENCE Create a sequence in the users schema.CREATE VIEW Create a view in the users schema.CREATE PROCEDURE Create a stored procedure, function, or package inthe users schema.3、授权用户系统权限:GRANT privilege , privilege. TO user , user.;GRANT CREATE TABLE TO SCOTT;四、角色的使用1、概念:角色是一组权限的命名,可以授予给用户。这样就如同给了某个用户一个权限包。2、创建、授予给角色:CREATE 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 select2 ON s_emp3 TO sue, rich;稍复杂:SQL GRANT update (name, region_id)2 ON s_dept3 TO scott, manager;SQL GRANT select, insert2 ON s_dept3 TO scott4 WITH GRANT OPTION;课程 九 声明变数本课重点:1、了解基本的PLSQL 块和区域2、描述变量在PLSQL 中的重要性3、区别PLSQL 与非PLSQL 变数4、声明变数5、执行PLSQL 块注意:以下实例中标点均为英文半角一、概述:1、PLSQL 块结构:DECLARE - 可选变量声明定义BEGIN - 必选SQL 和PLSQL 语句EXCEPTION - 可选错误处理END;- 必选二、实例:declarevjob varchar(9);v_count number:=0;vtotal date:=sysdate +7;c_tax constant number(3,2):=8.25;v_valid boolean not null:=true;beginselect sysdate into vtotal from dual;end;/上例中,如果没有这个SELECT 语句,会如何?出错,说明必须有STATEMENTS如果: select sysdate from dual into vtotal ;同样,也不行。而且变量与赋值的类型要匹配。三、%TYPE 的属性声明一个变量使之与数据库某个列的定义相同或与另一个已经定义过的变量相同所以%TYPE 要作为列名的后缀:如:v_last_name s_emp.last_name%TYPE;v_first_name s_emp.first_name%TYPE; -这样做的好处是我们不必去知晓此列的类型与定义或:v_balance NUMBER(7,2);v_minimum_balance v_balance%TYPE := 10;四、声明一个布尔类型的变量1 只有TRUE、FALSE、NULL 可以赋值给BOOLEAN 变量2 此变量可以接逻辑运算符NOT、AND、OR。3、变量只能产生TRUE、FALSE、NULL。实例:VSAL1:=50000;VSQL2:=60000;VCOMMSAL BOOLEAN:=(VSAL1 variable n numberSQL 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;上面的习题我会在下章给出答案,这也正是声明变量的规则和难点。课程 十 写执行语句本课重点:1、了解PLSQL 执行区间的重要性2、写执行语句3、描述嵌套块的规则4、执行且测试PLSQL 块5、使用代码惯例注意:以下实例中标点均为英文半角一、PLSQL 块的语法规则:1、语句可以跨跃几行。2、词汇单元可以包括:分隔符号、标识符、文字、和注释内容。3、分隔符号:+-*/=|.4、标识符:最多30 个字符,不能有保留字除非用双引号引起。字母开头,不与列同名。5、文字符串:如 V_ENAME:=FANCY;要用单引号括起来。数值型可以用简单记数和科学记数法。6、注释内容:单行时用- 多行用/* */与C 很相似二、SQL 函数在PL/SQL 的使用:1、可用的:单行数值型、字符型和转换型,日期型。2、不可用的:最大、最小、DECODE、分组函数。实例:BEGINSELECT TO_CHAR(HIREDATE,MON,DD,YYYY) FROM EMP;END;V_comment:=user|:|sysdate; - 会编译出错V_comment:=user|:|to_char(sysdate); -正确如果有可能,PLSQL 都会进行资料一致性的转换,但ORACLE 推荐你应该进行显示的转换,因为这样会提高性能。三、嵌套块和变量作用区域1、执行语句允许嵌套时嵌套。2、嵌套块可以看作正常的语句块。3、错误处理模块可以包括一个嵌套块4、exponential 指数 逻辑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年化工园区安全环保提升项目社会稳定风险评估报告:风险评估与环保产业风险控制技术
- 2025年音乐产业版权运营策略:科技创新驱动下的产业变革分析
- 初中校长2025年秋季“开学第一课”主题讲话:向下扎根向上开花
- 2025年在线教育平台教师培训与教学质量提升满意度研究报告
- 2025年新能源行业安全生产标准化建设与安全文化推广报告
- 海洋能发电与海岛海洋经济发展结合的创新模式报告
- 2025《公共基础知识》试题库(附答案)
- 数字人民币跨境支付技术集成与兼容性挑战报告
- 2025火力电厂安全试题及答案
- 工业机器人柔性制造系统2025年应用前景与挑战研究报告
- 2025河北保定市市直事业单位选调58人考试备考试题及答案解析
- 2025版机电安装监理服务合同
- 肩关节运动康复新策略-洞察及研究
- 新能源卡车修理知识培训课件
- 神奇的艾草教学课件
- 《耳念珠菌医院感染预防与控制专家共识(2025)》解读 2
- 环保废气基础知识培训课件
- 2026届广州市高三年级阶段训练(8月市调研摸底) 语地理试卷(含答案)
- 网络安全测验题目及答案
- 2025至2030中国密封圈行业项目调研及市场前景预测评估报告
- 2025苏教版三年级上册数学教学计划 (三篇)
评论
0/150
提交评论