base de datos Oracle para crear procedimientos almacenados, funciones, paquetes (seis)

En primer lugar, los procedimientos almacenados

  1. Introducción procedimiento almacenado
    a, almacenada en Oracle También conocido como procedimiento de subrutina;
    B, llamado bloque PL / SQL, compilado y almacenado en una base de datos;
    cada parte C, procedimiento almacenado:

    声明部分;
    可执行部分;
    异常处理部分(可选)。
    

    d, procedimiento de clasificación almacenado:

    过程-执行某些操作;
    函数-执行操作并返回值;
    
  2. La ventaja de los procedimientos almacenados
    a, modular: el programa dividido en módulo lógico;
    B, reutilización: pueden ser cualquier número de llamadas de procedimiento;
    C, mantenibilidad: operaciones de mantenimiento Simplificar;
    D, de seguridad: establecer permisos, por lo datos más seguros.

  3. Sintaxis para crear un procedimiento almacenado

--创建存储过程:
create [or replace] procedure 存储过程名称 [(参数名称 参数类型,参数名称 参数类型)]
is|as
局部变量声明区
begin
[可执行SQL语句;]
[exception
异常处理语句]
end 过程名称;

--调用存储过程
begin
过程名称[(参数名称 参数类型,参数名称 参数类型)];
end;

Ejemplos:
en los parámetros de procedimiento almacenado:

--3. 创建一个带参数的存储过程,根据制定的参数删除一个员工。
--创建存储过程:
create or replace procedure emp2(theEmpNo emp.empNo%type)
as
begin
delete from emp where empNo = theEmpNo;
dbms_output.put_line('删除成功!');
end;

--调用存储过程:
declare
theEmpNo emp.empNo%type;
begin
theEmpNo:='&请输入员工编号';
emp2(theEmpNo);
end;

parámetros out procedimiento almacenado:

--4.创建一个带输出参数的存储过程,在这个过程中首先调用上面的那个存储过程,然后用输出参数返回剩下的员工人数
--创建存储过程:
create or replace procedure emp3(
theDeptNo emp.deptNo%type,   --员工编号
peopleNumber out number    --人数
)
as
begin
emp2(theDeptNo);
select count(*) into peopleNumber from emp;
dbms_output.put_line(peopleNumber);
end;

--调用存储过程:
declare 
theDeptNo emp.empNo%type;   --员工编号
peopleNumber number;    --人数
begin
theDeptNo:='&请输入员工编号';
emp3(theDeptNo,peopleNumber);
end;
  1. independiente de las transacciones
    a, el procesamiento de transacciones independiente

    主事务处理启动独立事务处理;
    主事务处理启动独立事务处理;
    自主事务处理存储过程内的SQL操作;
    然后终止自主事务处理;
    然后终止自主事务处理。
    

    b, PRAGMA AUTO NO MOUS almacenamiento etiqueta de transacción para procedimiento de procesamiento de transacciones Para personalizar
    c, en la que independiente de transacciones:

    与主事务处理的状态无关;
    提交或回滚操作不影响主事务处理;
    自主事务处理的结果对其他事务是可见的;
    能够启动其他自主事务处理。
    

En segundo lugar, la función

  1. La creación de sintaxis de la función
grant or replace function 函数名称 [(参数名称 参数类型,参数名称 参数类型)] return 返回类型
is|as
[局部变量声明]
begin
执行语句;
return 返回值;
[exception 
异常处理;]
end;

Ejemplos:

--2.定义一个函数,用来求一个数的N次幂的结果并返回,底数和幂数在调用函数的时候作为参数传递过来
--创建函数:
create or replace function power(
a int, --变量值
b int  --次幂
)
return int
as
c int;
begin
for i in 1..b
loop
c:=c*a;
end loop;
return c;
end;

--调用函数:
declare
a int;
b int;
c int;
begin
a:='&请输入一个数字';
b:='&请输入次幂';
c:=power(a,b)
dbms_output.put_line(c);
end;
  1. funciones definidas y funciones de acceso
    a la función, las restricciones definidas:

    形参不能是PL/SQL类型
    函数的返回类型也必须是数据库类型
    

    b, funciones de acceso de dos maneras:

    使用PL/SQL块
    使用SQL语句
    
  2. procedimientos almacenados y funciones

proceso función
Implementado como PL / SQL Como parte de la expresión de llamada
En la memoria no contiene un RETURN cláusula Debe ser incluido en las especificaciones establecidas en la cláusula RETURN
se devuelve ningún valor Debe devolver un solo valor
sentencia RETURN puede comprender, pero con una función diferente, que no puede ser utilizado para devolver el valor Debe contener al menos una sentencia RETURN

En tercer lugar, el paquete

  1. Crear una sintaxis de cabecera
create or replace package 包名称
is|as
[定义存储过程;]
[定义函数;]
end 包名;
  1. La definición de cuerpo de embalaje
create or replace package body 包名
is|as
实现包头中定义的过程或函数:
end 包名;
  1. ejemplo
--创建包头
create or replace package power_package
is
procedure addPower(powerName varchar2,powerPic varchar2,del number);   --向表中添加数据
function getSum(beginNumber int,endNumber int) return int;       --求数字a到数字b的和
end power_package;

--程序包主体定义
create or replace package body power_package
as
procedure addPower(powerName varchar2,powerPic varchar2,del number)
as
begin
insert into tb_power values(zb.nextval,powerName,powerPic,del);
end addPower;

function getSum(beginNumber int,endNumber int) return int
as
b int:=0;    --存储结果
begin
for i in beginNumber..endNumber
loop
b:=b+i;
end loop;
return b;
end getSum;
end power_package;

/* 添加权限数据 */
begin
power_package.addPower('VIP','sac/casca/aaa.png',null);
end;

/*求beginNumber到endNumber的和并返回*/
	--调用包中的函数:
		declare
		beginNumber int;
		endNumber int;
		a int;
		begin
		beginNumber:='&请输入一个起始数字';
		endNumber:='&请输入一个结束数字';
		a:=power_package.getSum(beginNumber,endNumber);
		dbms_output.put_line(a);
		end;
  1. Ventaja del paquete de
    un modular
    b, más fácil aplicación de diseño
    c, ocultación de información
    d, nuevas funciones
    de correo, un mejor rendimiento

En cuarto lugar, la incorporada en el paquete

Nombre del paquete explicación
SALIDA DBMS_ rutina de salida del bloque de depuración y tratamiento de la información PL / SQL
DBMS_ LOB datos LOB función del tipo de operación que proporcionan
DBMS_ XMLQUERY Proporcionado para convertir los datos en función del tipo XML
DBMS AZAR Proporcionar un generador de números aleatorios
ARCHIVO UTL_ Con los programas de PL / SQL para leer y archivos de texto del sistema operativo de escritura
  1. SALIDA DBMS_
    Aquí Insertar imagen Descripción
  2. DBMS_ LOB
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción
  3. DBMS_ XMLQUERY
    Aquí Insertar imagen Descripción
  4. DBMS AZAR
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción
  5. ARCHIVO UTL_
    Aquí Insertar imagen Descripción
    Aquí Insertar imagen Descripción
Publicado 36 artículos originales · ganado elogios 7 · vistas 2061

Supongo que te gusta

Origin blog.csdn.net/q_2540638774/article/details/103901255
Recomendado
Clasificación