21.Oracle的程序包(Package)
Oracle的程序包Package
- 一、Package的概述
- 1、什么是Oracle11g的Package
- 2、Package的作用是什么
- 3、常见的系统内置Package
- 二、创建Package的相关语法
- 1、Package的创建语法
- 2、Package的删除
- 3、具体案例
- 4、Package的使用
- 5、与Package相关的其他语法
- 三、常见内置程序包的使用
- 1、DBMS_OUTPUT包
- 2、DBMS_XMLQUERY包
- 3、DBMS_RANDOM包
- 4、UTL_FILE包
- 5、DBMS_JOB包
- 6、DBMS_LOB包
- 点击此处可以跳转至:Oracle常见内置程序包的使用
一、Package的概述
1、什么是Oracle11g的Package
Oracle11g的package是一种封装了一组相关的过程、函数、变量和常量的数据库对象。它是一种可重用的程序模块,可以在不同的应用程序中使用。Package是Oracle数据库中的一种高级编程技术,它可以让程序员将相关的代码封装在一起,提高代码的可重用性、可维护性和安全性。
- 程序包是对相关过程、函数、变量、游标和异常等对象的封装
- 程序包由规范和主体两部分组成
2、Package的作用是什么
Package的作用是将相关的过程、函数、变量和常量封装在一起,提供一种组织代码的方式。通过使用Package,可以将代码分组,使得代码更加易于管理和维护。Package还可以提供一些公共的接口,使得其他程序可以调用其中的过程和函数,从而实现代码的复用。
- 模块化
- 更轻松的应用程序设计
- 信息隐藏
- 新增功能
- 性能更佳
3、常见的系统内置Package
Oracle数据库中有很多常见的系统Package,包括:
Package | 作用 | 常用函数 | 函数作用 |
---|---|---|---|
DBMS_OUTPUT | 向控制台输出信息 | PUT_LINE, PUT | 输出信息到控制台 |
DBMS_SQL | 动态执行SQL语句 | OPEN_CURSOR, PARSE, BIND_VARIABLE, EXECUTE, FETCH_ROWS | 执行SQL语句,绑定变量,获取结果集 |
DBMS_JOB | 创建和管理作业 | SUBMIT, REMOVE, NEXT_DATE | 创建、删除和管理作业 |
DBMS_LOCK | 管理锁 | REQUEST, RELEASE | 请求和释放锁 |
DBMS_CRYPTO | 加密和解密数据 | ENCRYPT, DECRYPT | 加密和解密数据 |
UTL_FILE | 读写文件 | FOPEN, FCLOSE, PUT_LINE | 打开、关闭文件,写入文件 |
DBMS_METADATA | 获取数据库对象的元数据信息 | GET_DDL, GET_DEPENDENT_DDL | 获取对象的DDL,获取依赖对象的DDL |
DBMS_APPLICATION_INFO | 设置应用程序的信息 | SET_MODULE, SET_ACTION | 设置应用程序的模块和操作信息 |
这个表格展示了常见的系统内置Package的作用、常用函数以及这些函数的作用。这些包提供了丰富的功能,可以帮助开发人员处理各种不同的任务,如向控制台输出信息、动态执行SQL语句、管理作业、加密数据、读写文件等。
这些系统Package提供了很多常用的功能,可以帮助程序员更加方便地开发和管理数据库应用程序。同时,Oracle数据库还支持自定义Package,程序员可以根据自己的需求编写自己的Package,以实现更加灵活的功能。
二、创建Package的相关语法
1、Package的创建语法
在Oracle 11g中,创建Package的语法如下:
-- 创建Package的规范部分(包头)
CREATE OR REPLACE PACKAGE package_name
IS-- 声明变量variable_name datatype;-- 声明常量constant_name CONSTANT datatype := value;-- 声明过程PROCEDURE procedure_name (parameter_list);-- 声明函数FUNCTION function_name (parameter_list) RETURN return_datatype;
END package_name;
/
-- 创建Package的体部分(包体)
CREATE OR REPLACE PACKAGE BODY package_name
IS-- 实现过程PROCEDURE procedure_name (parameter_list) ISBEGIN-- 过程实现代码END procedure_name;-- 实现函数FUNCTION function_name (parameter_list) RETURN return_datatype ISBEGIN-- 函数实现代码END function_name;
END package_name;
/
在上面的语法中,首先使用CREATE OR REPLACE PACKAGE
语句创建包的规范部分,其中可以包括变量、常量、过程和函数的声明。然后使用CREATE OR REPLACE PACKAGE BODY
语句创建包的体部分,其中包含实际的过程和函数的实现。
2、Package的删除
在Oracle中,要删除一个Package,可以使用DROP PACKAGE
语句。下面是删除一个Package的示例代码:
-- 删除Package的规范部分
DROP PACKAGE package_name;-- 删除Package的体部分
DROP PACKAGE BODY package_name;
在上面的示例中,package_name
是要删除的Package的名称。如果要删除Package的规范部分,可以使用DROP PACKAGE
语句;如果要删除Package的体部分,可以使用DROP PACKAGE BODY
语句。
需要注意的是,删除Package会同时删除其规范部分和体部分,因此在删除之前请确保不再需要该Package中的任何对象。此外,删除Package需要有相应的权限,通常需要有DROP ANY PACKAGE
的系统权限或者对应Package的所有者权限。
3、具体案例
下面是一个具体的案例,创建一个包来计算圆的面积和周长:
CREATE OR REPLACE PACKAGE circle_package
IS-- 声明常量pi CONSTANT NUMBER := 3.14159;-- 声明函数FUNCTION calculate_area (radius NUMBER) RETURN NUMBER;FUNCTION calculate_circumference (radius NUMBER) RETURN NUMBER;
END circle_package;
/CREATE OR REPLACE PACKAGE BODY circle_package
IS-- 实现函数FUNCTION calculate_area (radius NUMBER) RETURN NUMBER ISBEGINRETURN pi * radius * radius;END calculate_area;FUNCTION calculate_circumference (radius NUMBER) RETURN NUMBER ISBEGINRETURN 2 * pi * radius;END calculate_circumference;
END circle_package;
/
在上面的例子中,我们创建了一个名为circle_package的包,其中包含了常量pi和两个函数calculate_area和calculate_circumference,分别用于计算圆的面积和周长。在包的体部分中,我们实现了这两个函数的具体计算逻辑。
4、Package的使用
在Oracle 11g中,使用已经创建好的Package可以通过以下步骤进行:
- 调用Package中的函数或过程
- 使用Package中的常量
下面是一个示例代码,展示了如何使用已经创建好的Package:
-- 调用Package中的函数
DECLAREradius NUMBER := 5;area NUMBER;circumference NUMBER;
BEGIN-- 调用Package中的函数来计算圆的面积和周长area := math_operations.calculate_area(radius);circumference := math_operations.calculate_circumference(radius);-- 输出计算结果DBMS_OUTPUT.PUT_LINE('The area of the circle is: ' || area);DBMS_OUTPUT.PUT_LINE('The circumference of the circle is: ' || circumference);
END;
/-- 使用Package中的常量
DECLAREradius NUMBER := 5;area NUMBER;
BEGIN-- 使用Package中的常量pi来计算圆的面积area := math_operations.pi * radius * radius;-- 输出计算结果DBMS_OUTPUT.PUT_LINE('The area of the circle is: ' || area);
END;
/
在上面的示例中,我们首先在PL/SQL块中调用了math_operations
包中的函数来计算圆的面积和周长,并输出计算结果。然后,在另一个PL/SQL块中,我们使用了math_operation
s包中的常量pi来计算圆的面积,并输出计算结果。
通过这样的方式,我们可以方便地使用已经创建好的Package中的函数、过程和常量,从而实现代码的复用和模块化。
5、与Package相关的其他语法
除了创建和删除包之外,还可以对包进行其他操作,例如修改包中的内容、重新编译包等。下面是一些对包的其他操作以及相应的代码示例:
-
修改包中的内容
可以使用CREATE OR REPLACE PACKAGE
和CREATE OR REPLACE PACKAGE BODY
语句来修改包中的内容。例如,如果要修改包中的函数或过程的实现,可以使用CREATE OR REPLACE PACKAGE BODY
语句重新定义函数或过程的实现。-- 修改包中的函数实现 CREATE OR REPLACE PACKAGE BODY package_name ISFUNCTION new_function RETURN NUMBER ISBEGIN-- 新的函数实现RETURN 0;END new_function; END package_name;
-
重新编译包
如果修改了包中的内容,可以使用ALTER PACKAGE
语句重新编译包,以确保修改生效。-- 重新编译包 ALTER PACKAGE package_name COMPILE;
-
查看包的内容
可以使用DESCRIBE
语句或者查询USER_OBJECTS
和USER_SOURCE
视图来查看包的结构和内容。-- 查看包的结构 DESC package_name;-- 查看包的源代码 SELECT text FROM USER_SOURCE WHERE name = 'PACKAGE_NAME';
-
查询当前用户已经创建的包
要查询当前用户已经创建的包,可以使用以下的SQL查询:
SELECT object_name FROM user_objects WHERE object_type = 'PACKAGE';
这条SQL查询会返回当前用户已经创建的所有包的名称。
user_objects
是Oracle系统表,包含了当前用户拥有的所有对象的信息,包括表、视图、索引、存储过程、函数和包等。我们在查询中加入了条件object_type = 'PACKAGE'
,以便只返回包的信息。另外,如果你想查看其他用户创建的包,可以使用
all_objects
或dba_objects
视图,前者包含了当前用户对其有访问权限的所有对象的信息,而后者包含了数据库中所有对象的信息。
通过这些操作,可以方便地对包进行修改、重新编译和查看,以满足不同的需求。
三、常见内置程序包的使用
下面是一些常见内置程序包的使用以及这些包中的一些常用的函数的示例代码:
-
DBMS_OUTPUT
- 作用:向控制台输出信息
- 常用函数:
PUT_LINE
,PUT
-- 使用DBMS_OUTPUT包向控制台输出信息 BEGINDBMS_OUTPUT.PUT_LINE('Hello, world!'); END;
-
DBMS_SQL
- 作用:动态执行SQL语句
- 常用函数:
OPEN_CURSOR
,PARSE
,BIND_VARIABLE
,EXECUTE
,FETCH_ROWS
-- 使用DBMS_SQL包动态执行SQL语句 DECLAREl_cursor INTEGER;l_status INTEGER; BEGINl_cursor := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(l_cursor, 'SELECT * FROM employees', DBMS_SQL.NATIVE);l_status := DBMS_SQL.EXECUTE(l_cursor);-- 其他操作...DBMS_SQL.CLOSE_CURSOR(l_cursor); END;
-
DBMS_JOB
- 作用:创建和管理作业
- 常用函数:
SUBMIT
,REMOVE
,NEXT_DATE
-- 使用DBMS_JOB包创建作业 DECLAREl_job NUMBER; BEGINDBMS_JOB.SUBMIT(l_job, 'my_procedure;', SYSDATE, 'SYSDATE + 1'); END;
-
DBMS_LOCK
- 作用:管理锁
- 常用函数:
REQUEST
,RELEASE
-- 使用DBMS_LOCK包管理锁 DECLAREl_lockhandle VARCHAR2(128); BEGINl_lockhandle := DBMS_LOCK.REQUEST(DBMS_LOCK.X_MODE, 'LOCK_NAME', 10, TRUE);-- 其他操作...DBMS_LOCK.RELEASE(l_lockhandle); END;
-
DBMS_CRYPTO
- 作用:加密和解密数据
- 常用函数:
ENCRYPT
,DECRYPT
-- 使用DBMS_CRYPTO包加密数据 DECLAREl_encrypted_data RAW(2000); BEGINl_encrypted_data := DBMS_CRYPTO.ENCRYPT('my_data', DBMS_CRYPTO.DES_CBC_PKCS5);-- 其他操作... END;
-
UTL_FILE
- 作用:读写文件
- 常用函数:
FOPEN
,FCLOSE
,PUT_LINE
-- 使用UTL_FILE包读写文件 DECLAREl_file UTL_FILE.FILE_TYPE; BEGINl_file := UTL_FILE.FOPEN('MY_DIR', 'my_file.txt', 'W');UTL_FILE.PUT_LINE(l_file, 'Hello, world!');UTL_FILE.FCLOSE(l_file); END;
-
DBMS_METADATA
- 作用:获取数据库对象的元数据信息
- 常用函数:
GET_DDL
,GET_DEPENDENT_DDL
-- 使用DBMS_METADATA包获取对象的DDL DECLAREl_ddl CLOB; BEGINl_ddl := DBMS_METADATA.GET_DDL('TABLE', 'EMPLOYEES');DBMS_OUTPUT.PUT_LINE(l_ddl); END;
-
DBMS_APPLICATION_INFO
- 作用:设置应用程序的信息
- 常用函数:
SET_MODULE
,SET_ACTION
-- 使用DBMS_APPLICATION_INFO包设置应用程序信息 BEGINDBMS_APPLICATION_INFO.SET_MODULE('HR', 'Data Import');DBMS_APPLICATION_INFO.SET_ACTION('Importing data from file...'); END;
这些示例代码展示了常见内置程序包的使用以及这些包中的一些常用的函数。这些包提供了丰富的功能,可以帮助开发人员处理各种不同的任务,包括输出信息、动态执行SQL语句、管理作业、加密数据等。
1、DBMS_OUTPUT包
当我们需要在存储过程或触发器中输出信息到控制台时,可以使用DBMS_OUTPUT包。下面是一个示例,演示了如何使用DBMS_OUTPUT包输出信息到控制台:
-- 创建一个存储过程,使用DBMS_OUTPUT输出信息
CREATE OR REPLACE PROCEDURE display_employee_info (employee_id NUMBER) ASl_employee_name employees.first_name%TYPE;l_employee_salary employees.salary%TYPE;
BEGIN-- 查询员工姓名和工资SELECT first_name, salary INTO l_employee_name, l_employee_salaryFROM employeesWHERE employee_id = employee_id;-- 使用DBMS_OUTPUT输出信息DBMS_OUTPUT.PUT_LINE('Employee Name: ' || l_employee_name);DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || l_employee_salary);
END;
/
在这个示例中,我们创建了一个存储过程display_employee_info
,该存储过程接受一个员工ID作为参数,并使用DBMS_OUTPUT包输出员工的姓名和工资信息到控制台。
接下来,我们可以调用这个存储过程,并查看输出的信息:
-- 调用存储过程,并查看输出信息
SET SERVEROUTPUT ON;
BEGINdisplay_employee_info(100);
END;
/
在执行这段代码后,我们会在控制台上看到输出的员工姓名和工资信息:
Employee Name: Steven
Employee Salary: 24000
2、DBMS_XMLQUERY包
通过这个示例,我们展示了如何使用DBMS_OUTPUT包在存储过程中输出信息到控制台,这对于调试和日志记录非常有用。
DBMS_XMLQUERY包用于执行XML查询和转换操作。它提供了一些函数,可以将XML文档转换为关系数据或将关系数据转换为XML文档。下面是一个示例,演示了如何使用DBMS_XMLQUERY包将XML文档转换为关系数据:
-- 创建一个XML类型的表
CREATE TABLE xml_data (xml_content XMLTYPE);-- 插入一条XML数据
INSERT INTO xml_data VALUES ('<employees><employee><id>100</id><name>Steven</name><salary>24000</salary></employee><employee><id>101</id><name>David</name><salary>20000</salary></employee>
</employees>');-- 使用DBMS_XMLQUERY将XML数据转换为关系数据
DECLAREl_ctx DBMS_XMLQUERY.ctxType;l_rows DBMS_XMLQUERY.resultsType;
BEGIN-- 初始化上下文l_ctx := DBMS_XMLQUERY.newContext('SELECT * FROM xml_data');-- 执行查询DBMS_XMLQUERY.getRows(l_ctx, l_rows);-- 输出结果FOR i IN 1..l_rows.count LOOPDBMS_OUTPUT.PUT_LINE(l_rows(i).id || ' ' || l_rows(i).name || ' ' || l_rows(i).salary);END LOOP;-- 清理上下文DBMS_XMLQUERY.closeContext(l_ctx);
END;
/
在这个示例中,我们创建了一个XML类型的表xml_data
,并向其中插入了一条XML数据。接下来,我们使用DBMS_XMLQUERY包将XML数据转换为关系数据,并输出结果到控制台。
在代码中,我们首先使用DBMS_XMLQUERY.newContext
函数初始化一个查询上下文,然后使用DBMS_XMLQUERY.getRows
函数执行查询并获取结果。最后,我们遍历结果集并使用DBMS_OUTPUT.PUT_LINE
函数输出每一行的数据。
执行这段代码后,我们会在控制台上看到输出的关系数据:
100 Steven 24000
101 David 20000
通过这个示例,我们展示了如何使用DBMS_XMLQUERY包将XML文档转换为关系数据,这对于处理XML数据非常有用。
3、DBMS_RANDOM包
DBMS_RANDOM包是Oracle数据库中用于生成随机数的包。它提供了一系列函数,可以用来生成不同类型的随机数。下面是一个示例,演示了如何使用DBMS_RANDOM包生成随机数:
-- 使用DBMS_RANDOM包生成随机数
DECLAREl_random_number NUMBER;
BEGIN-- 生成一个介于1和10之间的随机整数l_random_number := DBMS_RANDOM.value(low => 1, high => 10);DBMS_OUTPUT.PUT_LINE('Random Number: ' || l_random_number);-- 生成一个0到1之间的随机浮点数l_random_number := DBMS_RANDOM.value;DBMS_OUTPUT.PUT_LINE('Random Float Number: ' || l_random_number);
END;
/
在这个示例中,我们使用了DBMS_RANDOM包的value
函数来生成随机数。首先,我们使用DBMS_RANDOM.value
函数生成一个介于1和10之间的随机整数,并将结果输出到控制台。然后,我们使用相同的函数生成一个0到1之间的随机浮点数,并同样将结果输出到控制台。
执行这段代码后,我们会在控制台上看到生成的随机数。例如:
Random Number: 7
Random Float Number: 0.832741
通过这个示例,我们展示了如何使用DBMS_RANDOM包生成随机数,这对于需要在数据库中进行随机化操作的场景非常有用。
4、UTL_FILE包
UTL_FILE包是Oracle数据库中用于读写操作系统文件的包。它提供了一系列的过程和函数,可以让数据库程序访问操作系统文件系统。下面是一个示例,演示了如何使用UTL_FILE包读取和写入文件:
-- 创建一个目录对象,指向数据库服务器上的一个目录
CREATE OR REPLACE DIRECTORY data_files AS '/u01/data_files';-- 创建一个表,用于存储文件内容
CREATE TABLE file_content (file_name VARCHAR2(100), file_data CLOB);-- 创建一个存储过程,使用UTL_FILE包读取文件内容并存储到表中
CREATE OR REPLACE PROCEDURE read_and_store_file(file_name IN VARCHAR2) ISfile_handle UTL_FILE.FILE_TYPE;file_buffer VARCHAR2(32767);file_data CLOB;
BEGIN-- 打开文件file_handle := UTL_FILE.FOPEN('DATA_FILES', file_name, 'R');-- 读取文件内容LOOPBEGINUTL_FILE.GET_LINE(file_handle, file_buffer);file_data := file_data || file_buffer;EXCEPTIONWHEN NO_DATA_FOUND THENEXIT;END;END LOOP;-- 关闭文件UTL_FILE.FCLOSE(file_handle);-- 将文件内容存储到表中INSERT INTO file_content (file_name, file_data) VALUES (file_name, file_data);COMMIT;
END;
/-- 调用存储过程,读取文件内容并存储到表中
BEGINread_and_store_file('example.txt');
END;
/
在这个示例中,我们首先创建了一个目录对象data_files
,并指向了数据库服务器上的一个目录/u01/data_files
。然后,我们创建了一个表file_content
,用于存储文件内容。接下来,我们创建了一个存储过程read_and_store_file
,该存储过程使用UTL_FILE包打开、读取和关闭文件,并将文件内容存储到表中。
在存储过程中,我们使用UTL_FILE.FOPEN
函数打开文件,然后使用UTL_FILE.GET_LINE
函数逐行读取文件内容,并使用CLOB类型的变量file_data
存储文件内容。最后,我们使用UTL_FILE.FCLOSE
函数关闭文件,并将文件内容插入到表中。
通过这个示例,我们展示了如何使用UTL_FILE包读取文件内容并存储到数据库表中,这对于需要在数据库中处理文件数据的场景非常有用。
5、DBMS_JOB包
在Oracle数据库中,DBMS_JOB包用于管理和调度作业(jobs)。作业是在后台运行的一系列数据库操作,可以周期性地执行或者在特定时间执行。DBMS_JOB包提供了一系列的过程和函数,用于创建、调度、修改和删除作业。下面是一个示例,演示了如何使用DBMS_JOB包创建和调度一个作业:
-- 创建一个存储过程,用于作为作业的执行内容
CREATE OR REPLACE PROCEDURE my_job_procedure IS
BEGIN-- 在这里定义作业需要执行的数据库操作-- 例如:INSERT INTO my_table VALUES (1, 'Hello, World!');NULL;
END;
/-- 使用DBMS_JOB包创建一个作业,并调度作业的执行
DECLAREl_job_number NUMBER;
BEGIN-- 创建一个作业,每天凌晨1点执行DBMS_JOB.SUBMIT(job => l_job_number,what => 'BEGIN my_job_procedure; END;',next_date => TRUNC(SYSDATE) + 1,interval => 'TRUNC(SYSDATE) + 1');COMMIT;
END;
/
在这个示例中,我们首先创建了一个存储过程my_job_procedure
,该存储过程定义了作业需要执行的数据库操作。然后,我们使用DBMS_JOB包的SUBMIT
过程创建了一个作业,并调度了作业的执行时间。在SUBMIT
过程中,我们指定了作业的执行内容(即调用my_job_procedure
存储过程),作业的下次执行时间(每天凌晨1点),以及作业的执行间隔(每天执行一次)。
通过这个示例,我们展示了如何使用DBMS_JOB包创建和调度一个作业,这对于需要在数据库中定期执行特定操作的场景非常有用。
6、DBMS_LOB包
DBMS_LOB包是Oracle数据库中用于管理大型对象(LOB,Large Objects)的包,提供了一系列的存储、读取、修改和删除LOB数据的功能。LOB数据类型包括CLOB(Character Large Object)、BLOB(Binary Large Object)和BFILE(Binary File)。下面是一个具体的代码案例,演示了DBMS_LOB包的一些常见用法:
-- 创建一个包含CLOB字段的表
CREATE TABLE my_table (id NUMBER,clob_data CLOB
);-- 插入LOB数据
DECLAREl_clob CLOB;
BEGIN-- 创建一个CLOB对象DBMS_LOB.CREATETEMPORARY(l_clob, TRUE);-- 向CLOB对象写入数据DBMS_LOB.WRITEAPPEND(l_clob, 10, 'Hello, ');DBMS_LOB.WRITEAPPEND(l_clob, 5, 'World');-- 将CLOB对象插入到表中INSERT INTO my_table (id, clob_data) VALUES (1, l_clob);-- 释放CLOB对象DBMS_LOB.FREETEMPORARY(l_clob);
END;
/-- 读取LOB数据
DECLAREl_clob_data CLOB;
BEGIN-- 从表中读取CLOB数据SELECT clob_data INTO l_clob_data FROM my_table WHERE id = 1;-- 输出CLOB数据DBMS_OUTPUT.PUT_LINE(l_clob_data);
END;
/-- 更新LOB数据
DECLAREl_clob_data CLOB;
BEGIN-- 从表中读取CLOB数据SELECT clob_data INTO l_clob_data FROM my_table WHERE id = 1;-- 修改CLOB数据l_clob_data := l_clob_data || '!';-- 更新表中的CLOB数据UPDATE my_table SET clob_data = l_clob_data WHERE id = 1;
END;
/-- 删除LOB数据
DECLAREl_clob_data CLOB;
BEGIN-- 从表中读取CLOB数据SELECT clob_data INTO l_clob_data FROM my_table WHERE id = 1;-- 删除表中的CLOB数据DELETE FROM my_table WHERE id = 1;-- 释放CLOB对象DBMS_LOB.FREETEMPORARY(l_clob_data);
END;
/
在这个代码案例中,我们首先创建了一个包含CLOB字段的表my_table
,然后演示了DBMS_LOB包的几个常见用法:
- 插入LOB数据:使用
DBMS_LOB.CREATETEMPORARY
创建一个临时的CLOB对象,然后使用DBMS_LOB.WRITEAPPEND
向CLOB对象中写入数据,最后将CLOB对象插入到表中。 - 读取LOB数据:使用
SELECT
语句从表中读取CLOB数据,并使用DBMS_OUTPUT.PUT_LINE
输出到控制台。 - 更新LOB数据:使用
UPDATE
语句修改表中的CLOB数据。 - 删除LOB数据:使用
DELETE
语句删除表中的CLOB数据,并使用DBMS_LOB.FREETEMPORARY
释放临时的CLOB对象。
通过这个代码案例,我们演示了DBMS_LOB包的一些常见用法,包括插入、读取、更新和删除LOB数据,展示了DBMS_LOB包在管理大型对象时的作用。
点击此处可以跳转至:Oracle常见内置程序包的使用
相关文章:

21.Oracle的程序包(Package)
Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…...

Spring 日志
日志的作用: 1.定位和发现问题 2.系统监控 3.数据采集 观察日志 先写一段打印日志的代码 日志内容 日志级别分类 默认日志级别是Info,级别一下的就不打印了 Spring 帮我们集成了日志框架,我们直接使用即可 我们测试一下用日志框架打印日志是如何 我们就会发现打印的结果跟…...

webpack如何处理浏览器的样式兼容问题postcss
一、准备工作 css/index.css添加样式 .word {color: red;user-select: none; } 为了兼容不同的浏览器我们需要添加前缀比如: -webkit-user-select: none; 这个工作可以通过postcss的插件postcss-preset-env处理 二、安装依赖 pnpm i -D postcss postcss-loader…...

idea方法注释模版设置
方法上面的注释模版: Template text: ** Description $desc$ $param$ $return$* Aauthor yimeng* date $DATE$ $TIME$ **/param: groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toLis…...

NX二次开发UF_CURVE_create_isocline 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_isocline Defined in: uf_curve.h int UF_CURVE_create_isocline(int face_cnt, tag_t faces [ ] , double direction [ 3 ] , const char * start_angle, const ch…...

从0开始学习JavaScript--JavaScript 模板字符串的全面应用
JavaScript 模板字符串是 ES6 引入的一项强大特性,它提供了一种更优雅、更灵活的字符串拼接方式。在本文中,将深入探讨模板字符串的基本语法、高级用法以及在实际项目中的广泛应用,通过丰富的示例代码带你领略模板字符串的魅力。 模板字符串…...
开源 vs 闭源:数字化时代的技术选择
开源 vs 闭源:数字化时代的技术选择 近期,特斯拉CEO马斯克的一番言论引起了广泛关注:OpenAI不该闭源,自家首款聊天机器人将开源。这引发了人们对于开源与闭源软件的辩论,这一话题在技术界一直是热门的讨论焦点。在数字…...
Spring Boot项目Service类单元测试自动生成
在Spring Boot项目中,对Service类进行单元测试对于开发工程师而言具有重大意义和作用: 验证业务逻辑的正确性和完整性 核心业务逻辑的准确实现:Service类通常包含核心业务逻辑。单元测试确保这些逻辑被正确实现,满足业务需求。处…...
Typescript中 interface 和 type 的区别是什么?
在 TypeScript 中,interface 和 type 都用于定义类型,但它们有一些区别。 1. 语法差异: interface 关键字用于声明接口,使用 interface 可以定义对象的形状、函数的签名等。 type 关键字用于声明类型别名,可以给一个…...

W2311294-万宾科技可燃气体监测仪怎么进行数据监测
万宾科技可燃气体监测仪怎么进行数据监测 燃气是现代城市之中重要的能源,它已经渗透到城市生活的方方面面,对燃气管网的管理也在考验着政府人员的工作能力。燃气管网的安全运行和城市的安全和人民的生活直接挂钩。为了及时掌握燃气管网的运行状态&#x…...

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版
作者:Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户,请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…...
704 二分查找 day1
class Solution { public: int search(vector<int>& nums, int target) { int left 0; int right nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right] while (left < right) { // 当leftright,区间[left, right]依然有效&…...

Python面试破解:return和yield的细腻差别
更多Python学习内容:ipengtao.com 大家好,我是涛哥,今天为大家分享 Python面试破解:return和yield的细腻差别,全文3000字,阅读大约10钟。 在Python的函数编程中,return和yield是两个常用的关键词…...

云时空社会化商业 ERP 系统 service SQL 注入漏洞复现
0x01 产品简介 时空云社会化商业ERP(简称时空云ERP) ,该产品采用JAVA语言和Oracle数据库, 融合用友软件的先进管理理念,汇集各医药企业特色管理需求,通过规范各个流通环节从而提高企业竞争力、降低人员成本…...

Vue3-Pinia
Pinia是什么 Pinia是Vue的最新状态管理工具,是Vuex的替代品 比Vuex更大的优势在于: 1.提供更加简单的API(去掉了mutation) 2.提供符合,组合式风格的API(和Vue3新语法统一) 3.去掉了modules…...

数据挖掘之时间序列分析
一、 概念 时间序列(Time Series) 时间序列是指同一统计指标的数值按其发生的时间先后顺序排列而成的数列(是均匀时间间隔上的观测值序列)。 时间序列分析的主要目的是根据已有的历史数据对未来进行预测。 时间序列分析主要包…...

iOS NSDate的常用API
目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…...

谱方法学习笔记-下(超详细)
谱方法学习笔记📒 谱方法学习笔记-上(超详细) 声明:鉴于CSDN使用 K a T e X KaTeX KaTeX 渲染公式, KaTeX \KaTeX KATEX 与 L a T e X LaTeX LaTeX 不同,不支持直接的交叉引用命令,如\label和\eqref。 KaTeX \KaT…...

iOS--UIPickerView学习
UIPickerView 使用场景和功能UIPickerView遵循代理协议和数据源协议创建对象,添加代理必须实现的代理方法非必要实现的方法demo用到的其他函数提示 效果展示 使用场景和功能 UIPickerView 最常见的用途是作为选项选择器,允许用户从多个选项中选择一个。…...

Docker安装Elasticsearch以及ik分词器
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析ÿ…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...