PLSQL Language Reference-PL/SQL子程序-子程序参数-形参和实参
子程序参数形参和实参如果想子程序拥有参数,需要在子程序的头部声明形参。在每个形参的声明中需要指定名称和数据类型,指定模式和默认值。后2者是可选的。在子程序的执行部分通过名称来引用形参。 当调用子程序时指定实参,它的值被赋值给形参。对应的形参和实参必须有兼容的数据类型。技巧:为了避免混...
PLSQL Language Referenc-PL/SQL子程序-前向声明
前向声明如果在相同PL/SQL块的嵌套子程序相互调用,则一个需要前向声明。因为只有在它之前声明的子程序才可以被调用。前向声明,声明一个嵌套子程序,但不定义它。必须在相同块的后面定义它。前向声明和定义必须具有相同的子程序头部。-- 前向声明 ...
PLSQL Language Referenc-PL/SQL子程序-子程序的组成-RETURN语句
RETURN语句RETURN语句立即结束子程序或匿名块的执行。子程序或匿名块可以包含多个RETURN语句。(1)函数中的RETURN每个执行路径必须到达RETURN语句,每个RETURN语句必须指定表达式。RETURN语句将表达式的值赋值给函数的标识符,并将控制权返回给调用者,在那里调用结束之后立即继续执行。...
PLSQL Language Referenc-PL/SQL子程序-子程序的组成-函数额外的组成部分
函数额外的组成部分函数与过程具有相同的结构,除了:n 函数的头部必须包含一个RETURN子句,指定函数返回的数据类型。n 在函数的执行部分,每个执行路径必须通向RETURN语句,否则编译器产生警告。(在过程中RETURN语句是可选的,并且不建议。)n 只有函数头部可以包括如下选项...
PLSQL Language Referenc-PL/SQL子程序-子程序的组成
子程序的组成子程序以子程序头开始,在头部定义了名称和可选的参数列表。声明部分--(可选 主要是声明和定义局部类型、光标、常量、变量、异常和嵌套子程序 指定编译指示 当子程序线束执行后,这些成员不在存在 注意...
PLSQL Language Referenc-PL/SQL子程序-子程序调用
子程序调用[([parameter[,parameter 如果子程序没有参数,或为每个参数指定了默认值,则你可以忽略参数列表或指定空的参数列表。 PL/SQL语句raise_salaryemployee_id amount:=();IF(,)THEN......
PLSQL Language Referenc-PL/SQL子程序-嵌套、包和独立的存储子程序
嵌套、包和独立的存储子程序 可以在PL/SQL块、包或方案层次上创建子程序。 嵌套子程序,在PL/SQL块中创建的子程序。可以先声明后定义,也可以同时声明和定义。 只有当嵌套的子程序是嵌套于独立的或包子程序的时候,它才被存储在数据库中。 包子程序,在包中创建的子程序。在包规范中声明它,在包体中定义...
PLSQL Language Referenc-PL/SQL子程序-使用子程序的原因
PL/SQL子程序 PL/SQL子程序是命名的PL/SQL块,可以被重复调用。如果子程序有参数,则每次调用时它们的值可以不同。子程序可以是过程或函数。通常使用过程来执行处理,使用函数来计算并返回一个值。 使用子程序的原因 子程序支持开发和可维护性,通过下面的功能来重用代码: n 模块化,子程序允许将...
PLSQL Language Referenc-PL/SQL动态SQL-SQL注入-防卫SQL注入-显式格式化模型
n 显式格式化模型 如果使用日期或数值连接到SQL或PL/SQL的文本中,并且不能使用绑定变量来传递它们, 则可以使用显式的格式化模型来把它们转换成文本,这是独立于运行的会话的NLS参数设置的。 可以确保转换后的值具有日期或数字的字面量的格式。 建议使用显式的独立于本地的格式化模型...
PLSQL Language Referenc-PL/SQL动态SQL-SQL注入-防卫SQL注入-验证检查
n 验证检查 通常应用程序应该验证用户的输入,以确保输入的内容是所希望的。 例,如果用户为delete语句传入部门编号,可以从departments表中做查询来验证输入的部门编号; 如果用户输入删除的表名,则可以查询all_tables来验证表名的存在。 在有效性检查代码中,DBMS_ASSERT包中的子程序是有用的。...
PLSQL Language Referenc-PL/SQL动态SQL-SQL注入-SQL注入技术-语句修改
SQL注入 SQL注入是在SQL语句中对使用客户端提供数据的应用程序的一种恶意的探测, 目的是获取对数据库的非授权的访问来查看或操纵限制的数据。 HR方案下创建 secret_records secret_records VARCHAR29 ...
PLSQL Language Referenc-PL/SQL动态SQL-DBMS_SQL包-DBMS_SQL.TO_CURSOR_NUMBER()函数
DBMS_SQL.TO_CURSOR_NUMBER()函数 将一个强或弱的REF CURSOR变量 转换成SQL光标数字,这个SQL光标数字可以被传递给DBMS_SQL子程序。 将REF CURSOR传递给DBMS_SQL.TO_CURSOR_NUMBER()函数之前需要先OPEN。 在把REF CURSOR变量转换为SQL光标数字之后,本地动态SQL语句不能再访问它。 练习:从本...
PLSQL Language Referenc-PL/SQL动态SQL-DBMS_SQL包-DBMS_SQL.TO_REFCURSOR()函数
DBMS_SQL包 该包中定义了一个叫做SQL光标数的实体,它是一个整数,可以在调用边界传递它,也可以存储它。 你必须使用DBMS_SQL来执行动态SQL语句,当你不知道下面的信息之一时: n 查询列表 n 在一个SELECT或DML语句中什么占位符必须绑定 在下面的情形下你必须使用本地动态SQL...
PLSQL Language Referenc-PL/SQL动态SQL-动态SQL中重复的占位符名名称
动态SQL中重复的占位符名名称 如果在动态SQL中重复使用占位符名,必须清楚占位符与绑定变量关联的方式是依赖于动态SQL的类型的。 n 动态SQL语句不是匿名块或调用语句 则占位符名重复是无关紧要的。在USING子句中的占位符与绑定变量的关联是通过位置,而不是名字。 :='INSERT INT...
PLSQL Language Referenc-PL/SQL动态SQL-OPEN FOR、FETCH和CLOSE语句
OPEN FOR、FETCH和CLOSE语句 如果一个动态SQL语句是一个返回多行结果的SQL语句,可以如下使用本地动态SQL: n 使用OPEN FOR语句把一个光标变量和动态SQL语句关联。在OPEN FOR语句中使用USING子句为动态SQL语句中的占位符绑定变量。 USING子句中不能使用文本NULL,(可以参考练习11g12_07_03来解决...
PLSQL Language Referenc-PL/SQL动态SQL-练习:在USING子句中未初始化的变量表示NULL
练习:在USING子句中未初始化的变量表示NULL (11g12_07_03.sql, 11g12_07_03.tst) CREATETABLEASSELECT*FROM;-- 1执行EmployeeTemp EmployeeTemp 11g12_07_03.tst -- 11g12_07_03.tst -- 在运行时自动设...
PLSQL Language Referenc-PL/SQL动态SQL-练习:本地动态SQL不支持的数据类型
练习:本地动态SQL不支持的数据类型 (11g12_07_02.tst) DECLARE dynStmt (); b1 ; -- 子程序 fun x ) AS &n...
PLSQL Language Referenc-PL/SQL动态SQL-练习:在动态SQL块中调用子程序。
练习:在动态SQL块中调用子程序。(使用HR方案) -- 1. 查看 Departments CreateDept存储过程-- 3. 执行 Departments表中的数据-- 11g12_07_01.prc CreateDept INOUTNUMBER INVARCHAR2 ...
PLSQL Language Referenc-PL/SQL动态SQL-本地动态SQL(EXECUTE IMMEDIATE语句)
本地动态SQL 本地动态SQL可以使用EXECUTE IMMEDIATE语句处理大多数的动态SQL语句。 如果动态SQL语句是一个返回多行结果的SELECT语句,本地动态SQL给你如下选择: n 使用带BULK COLLECT INTO子句的EXECUTE IMMEDIATE子句。 n 使用OPEN FOR、FETCH和CLOSE语句。 SQL光标属性在...
PLSQL Language Referenc-PL/SQL动态SQL-何时需要动态SQL
PL/SQL动态SQL 动态SQL:是在运行时产生和执行SQL语句的编程方法。 在下列情况下动态SQL是非常有用的: n 编写像ad hoc查询系统一样的通用目的的和灵活的应用程序。 n 编写必须运行DDL语句的应用程序 n 在编译时并不知道SQL语句的全部文本 n 在编译时并不知道输入、输...