您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > Oracle数据库-SQL+PLSQL-Less14-声名变量
1,编写一个匿名块,查询smith员工的工号,并将其展示在控制台2.请指出下列的表达式声明中,错误的是那一项?并说明理由:a.DECLAREv_idNUMBER(4);b.DECLAREv_x,v_y,v_zVARCHAR2(10);c.DECLAREv_birthdateDATENOTNULL;d.DECLAREv_in_stockBOOLEAN:=1;3.将selectename,sal,empnofromempwhereempno=7788;这个select语句的查询条件绑定变量,以提高性能3的优点变量的类型PL/SQL变量的声明标量的类型和声明绑定变量4–PL/SQL是SQL语句的扩展,它具有编程语言的设计特征.–进行数据操纵和查询的SQL语句作为过程化单元,包含在代码当中.5的优点•集成性应用程序Oracle服务器共享库6的优点•提高性能应用其它DBMS应用OraclePL/SQLSQLSQLSQLSQLSQLIF...THENSQLELSESQLENDIF;SQL7集成性:存储过程能将一些列增删改查的业务放在一起提高性能:存储过程因为oracle已经正常编译之后,应用程序调用存储过程的时候,不用进行语法,语义的检查,所以会节省时间,提高性能PL/SQL的优点8语句块结构•DECLARE–可选项–变量、游标、用户定义异常•BEGIN–必须的–SQL语句–PL/SQL语句•EXCEPTION–可选–当错误发生时的处理动作•END;–必须有的DECLAREBEGINEXCEPTIONEND;9语句块结构DECLAREv_variableVARCHAR2(5);BEGINSELECTcolumn_nameINTOv_variableFROMtable_name;EXCEPTIONWHENexception_nameTHEN...END;DECLAREBEGINEXCEPTIONEND;10块类型•匿名过程函数[DECLARE]BEGIN--statements[EXCEPTION]END;PROCEDUREnameISBEGIN--statements[EXCEPTION]END;FUNCTIONnameRETURNdatatypeISBEGIN--statementsRETURNvalue;[EXCEPTION]END;匿名存储过程函数11变量的使用•变量的作用:–存放暂时的数据–操纵存储的值–可重用–简化维护12中操纵变量–在声明部分声明和创建变量.–在可执行部分为变量赋值.–通过参数为PL/SQL块传送值.–通过输出变量查看结果.13变量类型–PL/SQL变量:•标量•复合变量•参考变量•LOB(大对象)–非PL/SQL变量:Bind和host变量14变量identifier[CONSTANT]datatype[NOTNULL][:=|DEFAULTexpr];Declarev_hiredateDATE;v_deptnoNUMBER(2)NOTNULL:=10;v_locationVARCHAR2(13):='Atlanta';c_commCONSTANTNUMBER:=1400;语法:实例:15变量•指导:–要遵从命名习惯.–以NOTNULL和CONSTANT约束来初始化变量.–使用赋值操作符(:=)或者DEFAULT保留字来初始化变量.–每行只声明一个变量是一个好习惯.16为一个变量赋值•identifier:=expr;v_ename:='Maduro';v_hiredate:='31-DEC-98';语法例如:为一个新雇员设定一个雇佣日期把雇员名字设为Maduro17变量初始化和关键字•使用方法:–赋值操作符(:=)–DEFAULT关键字–NOTNULL约束18基本标量类型–VARCHAR2(maximum_length)–NUMBER[(precision,scale)]–DATE–CHAR[(maximum_length)]–LONG–LONGRAW–BOOLEAN–BINARY_INTEGER–PLS_INTEGER19标量变量声明•例子:v_jobVARCHAR2(9);v_countBINARY_INTEGER:=0;v_total_salNUMBER(9,2):=0;v_orderdateDATE:=SYSDATE+7;c_tax_rateCONSTANTNUMBER(3,2):=8.25;v_validBOOLEANNOTNULL:=TRUE;20属性–可以参照下列类型来声明一个变量:•一个数据库表的列定义•其它以前所定义的变量–声明下列类型,可以使用%TYPE前缀:•一个数据库表的列定义•其它以前所定义的变量21使用%TYPE属性来声明变量•例子:...v_enameemp.ename%TYPE;v_balanceNUMBER(7,2);v_min_balancev_balance%TYPE:=10;...22声明布尔变量–只有TRUE,FALSE,和NULL可以赋给一个布尔变量.–布尔变量可以用AND,OR,和NOT逻辑操作符来连接.–变量的值只能是TRUE,FALSE,或NULL其中之一.–数字、字符、表达式可以用来返回一个布尔型值.23数据类型书籍(CLOB)图片(BLOB)电影(BFILE)NCLOB24(绑定)Bind变量ServerO/S绑定变量25变量在主机环境中定义,向PL/SQL块传递运行时数值的变量。例如:可以在SQL*plus中定义Bind变量而在PL/SQL中使用变量。例如:在SQL*plus中可以定义如下Bind变量:SQLvariableempno_idvarchar2(10);SQLexec:empno_id:='7369';SQLselect*fromempwhereempno=:empno_id;26变量•将年薪保存到一个SQL*Plus宿主变量中.–以宿主变量的形式来引用PL/SQL变量.–在变量名前面要以冒号(:)作为前缀.:g_monthly_sal:=v_sal/12;27–这是一个Oracle所提供的一个打包过程–可以代替PL/SQL块来完成数据的显示–在SQL*Plus中必须执行SETSERVEROUTPUTON语句以激活该功能–例如:DECLAREv_salNUMBER(9,2):=&p_annual_sal;BEGINv_sal:=v_sal/12;DBMS_OUTPUT.PUT_LINE('Themonthlysalaryis'||TO_CHAR(v_sal));END;/28语句的条件中使用变量而不是常量。比如sharedpool里有两条sql语句,select*fromempwhereempno=7788;select*fromempwhereempno=7789;对oracle数据库来说,这是两条完全不同的SQL,对这两条语句都需要进行hardparse。因为oracle会根据sql语句的文本去计算每个字符在内存里的hash值,因此虽然上述两条SQL只有一个字符不一样,oracle根据hash算法在内存中得到的hash地址就不一样,所以oracle就会认为这是两条完全不同的语句。而如果将上述SQL改写成select*fromempwhereempno=:var1;,然后通过对变量var1的赋值去查询,那么oracle对这条语句第一次会进行hardparse,以后就只进行softparse。假设某条语句被重复执行了几十万次,那么使用bindvar带来的好处是巨大的,优点是减少硬解析,降低CPU的争用,节省shared_pool。29,编写一个匿名块,查询smith员工的工号,并将其展示在控制台SQLsetserveroutputon;SQLDECLARE2empnoNUMBER(4);3BEGIN4SELECTempnoINTOempnoFROMempWHEREename='SMITH';5dbms_output.put_line(empno);6END;7/7369PL/SQLproceduresuccessfullycompleted.练习案例30请指出下列的表达式声明中,错误的是那一项?并说明理由:a.DECLAREv_idNUMBER(4);b.DECLAREv_x,v_y,v_zVARCHAR2(10);c.DECLAREv_birthdateDATENOTNULL;d.DECLAREv_in_stockBOOLEAN:=1;选D因为不可以将数字类型的值,赋给布尔类型的值练习案例31=7788;这个select语句的查询条件绑定变量,以提高性能SQLvariableempno_idvarchar2(10);SQLexec:empno_id:='7369';SQLselectename,sal,empnofromempwhereempno=:empno_id;练习案例
本文标题:Oracle数据库-SQL+PLSQL-Less14-声名变量
链接地址:https://www.777doc.com/doc-7534800 .html