初步学习Oracle之PL/SQL

2023-10-26

PL/SQL简介

PL/SQL(Procedure Language/SQL) 程序语言是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如分支、循环等),使 SQL 语言具有过程处理能力。把SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来,使得 PLSQL 面向过程但比过程语言简单、高效、灵活和实用。

PL/SQL语法结构

PL/SQL块有四个关键字:

  • DECLARE:声明部分。
  • BEGIN:可执行部分。
  • EXCEPTION:异常处理部分。
  • END:以关键字END结束。
DECLARE
     -- 声明变量、游标。 
     I INTEGER; 
BEGIN
     -- 执行语句
     --[异常处理]
EXCEPTION
  when NO_DATA_FOUND then
    raise_application_error(-20000, 'No Data Found!');
END;

例子:打印Hello World

BEGIN
     --打印hello world
    DBMS_OUTPUT.PUT_LINE('hello world');
END;

其中DBMS_OUTPUT 为oracle内置程序包,相当于Java中的System.out,而PUT_LINE()是调用的方法,相当于println()方法。

变量

说明:

1、变量命名建议遵循通用规则,比如v_name表示一个变量,c_name表示一个常量;

2、一般建议每一行声明一个变量,这样程序的可读性比较好;

3、如果声明了变量,但未进行初始化,则在没有赋值之前该变量的值为NULL; 一个好的编程习惯是对所有声明的变量进行初始化赋值。

普通数据变量

(char,varchar2, date, number, boolean, long)

例子:声明一些普通变量

DECLARE
	v_job VARCHAR2(9);
	v_count BINARY_INTEGER := 0;
	v_total_sal NUMBER(9,2) := 0;
	v_orderdate DATE := SYSDATE + 7;
	c_tax_rate CONSTANT NUMBER(3,2) := 8.25;
	v_valid BOOLEAN NOT NULL := TRUE;

特殊变量类型

引用型变量

1、利用直接赋值语句赋值  :=  比如:v_name := 'hans'
2、利用select...into...语句赋值:(语法 select 值 into 变量)
         select 'name' 
          into v_name
          from student;
//将student表查的name的值赋值给v_name

注:PLSQL利用特有的%TYPE属性来声明与XX类型一致的变量类型

例如:声明员工姓名、员工薪水两个字段,可以用以下的语法
DECLARE
	v_name emp.ename%TYPE;          	
	v_salary emp.esalary%TYPE;
BEGIN
	  SELECT ENAME,ESALARY
	  into v_name,v_salary
	  FROM EMP
	  WHERE ROWNUM=1;
 END;

记录型变量

接受表中的一整行记录,相当于Java中的一个对象
语法:变量名称 表名%ROWTYPE,

v_emp emp%ROWTYPE;
SELECT *
  into v_emp
  FROM EMP
  WHERE ROWNUM=1 ;
  DBMS_OUTPUT.put_line(v_emp.ename||','||v_emp.esalary); 

--可以用我们定义地记录变量名直接点出来
-- || 是字符串连接的意思
--如果有一个表,有100个字段,那么你程序如果要使用这100个字段话,如果你使用引用型变量一个个声明,会特别麻烦,记录型变量可以方便的解决这个问题。
--记录型变量只能存储一个完整的行数据,只能一行,多行就报错
--例子:type  numbers  is table of number index by binary_integer
--加了”index by binary_integer ”后,numbers类型的下标就是自增长,可以自动根据下标找到对应的值。
--numbers类型在插入元素时,不需要初始化,不需要每次extend增加一个空间。
DECLARE
	TYPE emp_table_type is table of
		employees%ROWTYPE INDEX BY BINARY_INTEGER;
	my_emp_table emp_table_type; --重命名
	v_count NUMBER(3):= 104; 
BEGIN
	FOR i IN 100..v_count --i不需定义,从100递增到v_count
	--(IN后面加REVERSE可表示倒序)
	LOOP
		SELECT * INTO my_emp_table(i) FROM employees --自动根据下标找到对应的值
		WHERE employee_id = i;
	END LOOP;
	FOR i IN my_emp_table.FIRST..my_emp_table.LAST
	LOOP
		DBMS_OUTPUT.PUT_LINE(my_emp_table(i).last_name);
	END LOOP;
END;

流程控制

1、条件分支
begin
     IF    条件1   THEN   执行1
     ELSIF    条件2    THEN   执行2
     ELSE    执行3
     END IF;
 end;
    --注意关键字:ELSIF

2、循环

  BEGIN
	      LOOP
	      EXIT WHEN 退出循环条件
	      END LOOP;
    END;
   -- exit when是退出循环的条件
  例子:
  【示例】打印数字1-10
    DECLARE
        -- 声明循环变量
        V_NUM NUMBER := 1;  --普通变量,直接使用:=赋值
    BEGIN
        LOOP --循环的关键字,循环开始
            EXIT WHEN V_NUM > 10; --退出循环的条件
            DBMS_OUTPUT.PUT_LINE(V_NUM); --打印变量
            -- 循环变量的自增
            V_NUM := V_NUM + 1;
        END LOOP; --循环结束
    END;

SQL语句

INSERT、UPDATE、DELETE 、MERGE语句: 在PLSQL中执行这些SQL语句和直接执行这些语句差不多,只不过可以在SQL语句中使用PLSQL声明的变量;

--例子
DECLARE
	v_sal_increase employees.salary%TYPE := 800; 
BEGIN
	UPDATE employees
	SET salary = salary + v_sal_increase
	WHERE job_id = 'ST_CLERK';
END;

注:SQL函数在PLSQL的过程语句中的使用:

大多数SQL函数都可以在 PLSQL的过程语句中使用,比如:

单行的数值和字符串函数、数据类型转换函数、日期函数、时间函数、求最大、最小值的 GREATEST, LEAST函数等;

但有些函数在PLSQL的过程语句中是不能使用的,比如:

Decode函数、分组函数(AVG, MIN, MAX, COUNT, SUM, STDDEV, and VARIANCE)等;

游标

用于临时存储一个查询返回的多行数据(结果集,类似于Java的Jdbc连接返回的ResultSet集合),通过遍历游标,可以逐行访问处理该结果集的数据。

游标的使用方式:声明—>打开—>读取—>关闭 语法

游标声明: CURSOR 游标名[(参数列表)] IS 查询语句;

游标的打开: OPEN 游标名;

游标的取值: FETCH 游标名 INTO 变量列表;(游标的数据放变量列表里)

游标的关闭;CLOSE 游标名;

游标的属性 游标的属性————返回值类型————说明

%ROWCOUNT-----------整型----------获得FETCH语句返回的数据整行

%FOUND------------布尔型---------------最近的FETCH语句返回一行数据则为真,否则为假(能拿到数据并且能返回一条数据,则真)

%NOTFOUND--------------布尔型-----------与%FOUND属性返回值相反(一般用于退出循环的判断)

%ISOPEN----------------布尔值-------------游标已经打开时值为真,否则为假

其中%NOTFOUND是在游标中找不到元素的时候返回TRUE,通常用来判断退出循环。

【例子】:使用游标查询emp表中所有员工的姓名和工资,并将其依次打印出来。

  DECLARE
 -- 声明游标  --没有参数的游标
CURSOR C_EMP IS  --定义游标的名字
SELECT ENAME, ESALARY FROM EMP;  --查询语句
        -- 声明变量接受游标中的数据
        V_ENAME  EMP.ENAME%TYPE;
        V_SALARY EMP.ESALARY%TYPE;
    BEGIN
        -- 打开游标
        OPEN C_EMP;
        -- 遍历游标
        LOOP
            -- 获取游标中的数据
            FETCH C_EMP
                INTO V_ENAME, V_SALARY; --将获得到的数据复制到我们定义的变量
            -- 退出循环条件
            EXIT WHEN C_EMP%NOTFOUND; --exit when是loop循环跳出语句,C_EMP是游标的名字,										  --%NOTFOUND是游标里面没有数据了返回true,
            		--EXIT WHEN C_EMP%NOTFOUND就是游标没数据了返回为true了,促发退出循环的条件
            DBMS_OUTPUT.PUT_LINE('姓名:' || V_ENAME || '薪资:' || V_SALARY); --输出循环打印
        END LOOP; --循环结束
        -- 关闭游标
        CLOSE C_EMP; 
    END;

带参数的游标:

	DECLARE
    -- 声明游标
    CURSOR C_EMP(V_EDEPNO emp.edepno%type) IS
        SELECT ENAME, ESALARY FROM EMP WHERE EDEPNO=V_EDEPNO;
    -- 声明变量接受游标中的数据
    V_ENAME  EMP.ENAME%TYPE;
    V_SALARY EMP.ESALARY%TYPE;
    BEGIN
        -- 打开游标
        OPEN C_EMP('a'); --传入游标的参数a
        -- 遍历游标
        LOOP
            -- 获取游标中的数据
            FETCH C_EMP
                INTO V_ENAME, V_SALARY;
            -- 退出循环条件
            EXIT WHEN C_EMP%NOTFOUND;
            DBMS_OUTPUT.PUT_LINE('姓名:' || V_ENAME || '薪资:' || V_SALARY);
        END LOOP;
        -- 关闭游标
        CLOSE C_EMP;
    END;

FOR UPDATE NOWAIT语句: 有的时候我们打开一个游标是为了更新或者删除一些记录,这种情况下我们希望

在打开游标的时候即锁定相关记录,应该使用for update nowait语句,倘若锁定失败我们就停止不再继续,以免

出现长时间等待资源的死锁情况。

DECLARE
	CURSOR emp_cursor IS 
		SELECT employee_id, last_name, department_name
		FROM employees,departments
		WHERE employees.department_id = 
			departments.department_id
		AND employees.department_id = 80 
		FOR UPDATE OF salary NOWAIT; --将salary字段锁定

WHERE CURRENT OF cursor : 在循环体内做Update或者 Delete时需要有Where指向游标的当前记录

DECLARE 
CURSOR sal_cursor IS 
	SELECT e.department_id, employee_id, last_name, salary 
	FROM employees e, departments d 
	WHERE d.department_id = e.department_id
		and d.department_id = 60 
	FOR UPDATE OF salary NOWAIT; 
	BEGIN 
	FOR emp_record IN sal_cursor --将sal_cursor的数据放到emp_record结果集中
LOOP 
	IF emp_record.salary < 5000 THEN 
		UPDATE employees 
		SET salary = emp_record.salary * 1.10 
		WHERE CURRENT OF sal_cursor; --Where指向当前游标记录
	END IF; 
END LOOP; 
END;

RAISE_APPLICATION_ERROR() 函数: 对于用户自定义的业务错误,如果觉得先定义再使用很麻烦,那么

也可以简单的使用raise_application_error() 来简化处理。它可以无需预先定义错误,而在需要抛出错误的

地方直接使用此函数抛出例外,例外可以包含用户自定义的错误吗和错误描述;

EXCEPTION
	WHEN NO_DATA_FOUND THEN
		RAISE_APPLICATION_ERROR (-20201,'Manager is not a valid employee.');
	END;

存储过程

一般的sql语句每执行一次就编译一次,而存储过程只在创造时编译,以后每次执行存储过程都不需要再重新编译,所以使用存储过程可提高数据库执行速度。

当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。

存储过程可以重复使用,可减少数据库开发人员的工作量,安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

create or replace procedure   过程名[(参数列表)]  is
        -- 没有使用declare声明变量,但是可以在begin上边直接声明变量
    begin
       -- 执行部分
    end [过程名] ;
-- is可换as

例如:

CREATE OR REPLACE PROCEDURE raise_salary
	(p_id IN employees.employee_id%TYPE)
IS
BEGIN
	UPDATE employees
	SET salary = salary * 1.10
	WHERE employee_id = p_id;
END raise_salary;

调用存储过程:将要调用的存储过程编译之后,重新打开一个test window,在begin中直接输入存储过程名即可。

例子:带输入参数IN和输出参数OUT的存储过程

--输入员工名字,将“HELLO员工名”当作返回值输出,in输入参数,out输出参数
create or replace procedure P_PRINT_HELLO (V_ENAME IN EMP.ENAME%TYPE,V_RETURN out VARCHAR2) is
      --声明变量
    begin
       V_RETURN:='HELLO '||V_ENAME;   -- :=普通变量赋值
    end P_PRINT_HELLO;
参数传递方式 ( 按顺序传递 或者 使用=>符号传递 )
CREATE OR REPLACE PROCEDURE add_dept
	(p_name IN departments.department_name%TYPE DEFAULT 'unknown',
	p_loc IN departments.location_id%TYPE DEFAULT 1700)
IS
BEGIN
	INSERT INTO departments(department_id,department_name, location_id)
	VALUES (departments_seq.NEXTVAL, p_name, p_loc);
END add_dept;

BEGIN
add_dept; --使用默认值
add_dept ('TRAINING', 2500); --按顺序传递
add_dept ( p_loc => 2400, p_name =>'EDUCATION'); --使用=>符号传递,无顺序要求。
add_dept ( p_loc => 1200) ;
END;
--删除存储过程
DROP PROCEDURE procedure_name

存储函数

--定义函数语法
CREATE [OR REPLACE] FUNCTION function_name
	[(parameter1 [mode1] datatype1,
	parameter2 [mode2] datatype2,
	. . .)]
RETURN datatype
IS|AS
PL/SQL Block;

--例子
CREATE OR REPLACE FUNCTION get_sal
	(p_id IN employees.employee_id%TYPE)
	RETURN NUMBER --函数返回值(区别存储过程)
IS
	v_salary employees.salary%TYPE :=0;
BEGIN
	SELECT salary
	INTO v_salary
	FROM employees
	WHERE employee_id = p_id;
	RETURN v_salary; --最后需返回参数
END get_sal;

用户自定义函数必须满足以下条件限制:

  • 必须是个函数(不能是过程-Procedure)
  • 只能用IN 模式的参数(不能有OUT, IN OUT模式的参数)
  • 只能接收SQL数据类型的参数,不能接收PLSQL中特有的参数(比如记录、PLSQL内存表)
  • 函数返回的数据类型也必须是有效的数据类型,而不能是PLSQL特有的数据类型
  • 在SQL中使用的函数,其函数体内部不能有DML语句
  • 在UPDATE/DELETE语句中调用的函数,其函数体内部不能有针对同一张表的查询语句
  • 在SQL中调用的函数,其函数体内部不能有事务结束语句(比如Commit,Rollback)
--删除存储函数
DROP FUNCTION function_name
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初步学习Oracle之PL/SQL 的相关文章

  • 如何使用 SQLalchemy 连接三个表并将所有列保留在其中一个表中?

    所以 我有三张表 类定义 engine create engine sqlite test db echo False SQLSession sessionmaker bind engine Base declarative base cl
  • Windows 批处理文件中的 SQL 语句

    有没有办法让Windows批处理文件直接输入SQL语句而不需要调用脚本 我希望批处理文件登录SQL 然后直接输入语句 EDIT 我正在使用 Oracle v10g 对于单个命令 您可以使用以下技巧 echo select from dual
  • 如何在 BigQuery 中取消透视?

    不确定要调用什么函数 但转置是我能想到的最接近的函数 I have a table in BigQuery that is configured like this 但我想查询一个配置如下的表 创建此表的 SQL 代码是什么样的 Thank
  • SQL Server:是否可以同时插入两个表?

    我的数据库包含三个表 称为Object Table Data Table and Link Table 链接表仅包含两列 对象记录的标识和数据记录的标识 我想从中复制数据DATA TABLE它链接到一个给定的对象标识并将相应的记录插入到Da
  • 按 1.99.10 和 1.99.9 sql server 排序

    抱歉我的错误 我应该提供问题的真实样本 我的 ID 中包含以下字符 示例代码 select ID from student order by ID Expected output from mine but system output JA
  • 使用sql将行转换为列,反之亦然 - oracle

    我有这张表 create table history date check DATE type VARCHAR2 30 id type NUMBER total NUMBER 正在选择 select from history order b
  • 如何使用过程更改列的默认值

    这是我当前的 SQL 的样子 DELIMITER CREATE PROCEDURE updateDefaultUserRole IN rid in INT BEGIN ALTER TABLE users MODIFY rid INT 255
  • 在 Transact SQL 中何时使用 EXCEPT 而不是 NOT EXISTS?

    我最近刚刚通过阅读同事编写的代码了解到 SQL Server 中存在新的 EXCEPT 子句 有点晚了 我知道 真的让我很惊讶 但是我对它的使用有一些疑问 建议什么时候使用它 使用它与使用 AND NOT EXISTS 的相关查询在性能方面
  • SQL Server T-SQL 中的 REGEXP_LIKE 转换

    我在一份需要转换为 SQL Server 的旧报告中遇到了这一行 REGEXP LIKE examCodes learner code examCodes 是源 learner code 是模式 我知道 SQL Server 没有 REGE
  • 非聚合查询内部的聚合情况

    我有一个相当大的查询 其最简单的形式如下所示 select r rep id u user id u signup date pi application date pi management date aum from table1 r
  • 从 Hibernate 生成 SQL 脚本

    我正在为我的 Java Swing 应用程序使用 Hibernate 4 3 5 Final 并且我做了很多工作UDPATE INSERT and DELETE与它 在 HQL 中或与Criteria 现在 我想做的是导出对数据库所做的所有
  • 数据源和数据集的区别

    我目前正在开发一个项目 其主要任务是读取存储在 SQL 数据库中的数据并以用户友好的形式显示它们 使用的编程语言是C 我在 Borland C Builder 6 环境中工作 但我认为标题中提出的问题与编程语言或库无关 当从数据库读取数据时
  • SQL 与 LINQ 性能 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MYSQL中如何获取不带小数的列值

    我的 mysql 表中有两列A and B我正在获取这样的记录 select A B from table 但问题是上面的查询提供了类似这样的值 12 00 3 4 78 9 但我想得到这样的结果 12 3 78 我将使用哪个 MySQL
  • sql 查询查找匹配属性

    我目前正在做一个类似易货系统的系统 情况是这样的 客户 Jasmine 要求输入 NAME 属性 她需要寻找的内容 并输入 SEEK 属性 她需要寻找的内容 为了获得结果 SEEK 属性必须与其他客户的 Name 属性匹配 其他客户的 SE
  • Python,将CSV文件转换为SQL表

    我有一个没有标题的 CSV 文件 并尝试从文件中的某些列创建 SQL 表 我尝试了这里给出的解决方案 使用 Python 将 CSV 文件导入 sqlite3 数据库表 https stackoverflow com questions 2
  • 使用 postgresql DB 存储 NULL 值需要多少磁盘空间?

    假设我的表上有一列定义了以下内容 MyColumn smallint NULL 存储 0 1 或其他值等值应该需要 2 个字节 1 但是如果我将 MyColumn 设置为NULL 需要多少空间 需要0字节吗 出于管理目的或每列 行是否有一些
  • 使用 Oracle 中的 Join 查询进行更新

    查询有什么问题 它无限期地执行 UPDATE table1 t1 SET t1 col t1 Output SELECT t2 col t3 Output t2 col FROM tabl2 t3 LEFT JOIN table1 t2 O
  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • 连接2个表区分大小写

    我有 2 个表 需要获取品牌代码的结果 例如 在数据库中 我有两个不同的品牌 但它们的代码是相同的 只有小写和大写不同 例如 代码名称 关于耐克 和阿迪达斯 如何在代码上内连接 2 个表以分别获取这 2 个表 现在 在内连接之后我得到了这

随机推荐

  • 逆矩阵的性质

    矩阵的逆矩阵具有许多有用的性质 1 如果MM 1 I 则M 1M I 2 M1M2 1 M2 1M1 1 3 M 1 1 M 4 M 1 1 M 1 0 说明 M 1 表示矩阵M的逆 摘自 lt lt 计算机图形学几何工具算法详解 gt g
  • 测试工作内容(一)---需求分析

    当我们要做一个项目时 不管项目是一个大的软件 还是一个小的功能模块 我们在执行之前都要搞清楚 这个项目是做什么的 将会实现哪些功能需求 在时间点范围内需要我们做什么 做哪些工作 所追溯的就是需求 需求分析都需要做哪些事情 怎样做 包括以下四
  • JAVA注释

    单行注释 单行注释 多行注释 多行注释 文档注释 文档注释 放在类定义 方法 field 内部类之前才有效 此行前面这个星号只是为了好看 只有第一行和最后一行的 和 才有效 文档注释可以被javadoc命令抽取出api文档格式 javado
  • 木马编程-手把手带你进入木马的世界之木马编程

    一 基础知识 1 1 木马病毒 木马 Trojan 这个名字来源于古希腊传说 荷马史诗中木马计的故事 Trojan一词的本意是特洛伊的 即代指特洛伊木马 也就是木马计的故事 木马会想尽一切办法隐藏自己 主要途径有 在任务栏中隐藏自己 这是最
  • 希尔排序

    目录 一 原理 二 示例代码 三 算法分析 希尔排序又称为缩小增量排序 是直接插入排序算法的一种更高效的改进版本 希尔排序是基于插入排序的以下两点性质而提出改进方法的 插入排序在对几乎已经排好序的数据操作时 效率高 即可以达到线性排序的效率
  • WebGL加载跨域纹理的解决方法

    本人一直对WebGL很有兴趣 也试着尝试用osgjs写了个DEMO 很成功的出现了效果 可是当自己用ASP net写了个服务端 想用自己写的服务器提供的数据来用做纹理 可是怎么也不出来 还报错 跟了下代码 发现是用作纹理的Image对象的问
  • 华为 5G、阿里检测病毒算法、腾讯 AI 一分钟诊断,国内抗疫科技大阅兵!

    作者 马超 责编 王晓曼 伍杏玲 出品 CSDN ID CSDNnews 近期以来 国际风云不断变换 而在2020年初疫情肆虐期间 也成为我国科技实力的 大检阅 近期人民网官微致敬我们中国科技企业的排头兵 可以说掌握硬核科技成了全民的共识
  • Metasploit(MSF)基础超级详细版

    MSF基础学习看这一篇就够了 Metasploit 常见名词解释 MSF简介 MSF框架结构 MSF配置数据库 内网主机发现 MSF命令查询 常用命令 数据库管理命令 核心命令 模块命令 进程命令 资源脚本命令 后台数据库命令 后端凭证命令
  • 假如“唐僧团队”裁员,你会先裁掉哪一位

    相信很多人看过水煮三国 大话西游 文中去西天取经的4人被影射成一个团队 其中 唐僧是TeamLeader 性格坚韧 目的明确 讲原则 懦弱没主意 孙悟空是团队中那个创意员工 业绩突出却个性极强 屡屡得罪人 猪八戒就好比那为人圆滑 偏偏干活时
  • 【ESP系列】AT指令案例

    前言 ESP系列芯片具有高性价比的联网功能 广受大家的认可 然而 在开发过程中 有时候我们想要使用ESP系列芯片的联网功能 却又不想为此编写繁杂的联网逻辑 串口交互逻辑等等 此时 我们可以运用AT指令来实现简洁的联网控制 本文将介绍这种基于
  • linux命令之查看jvm内存使用情况

    linux命令之查看jvm内存使用情况 1 使用 ps ef grep java 查询java的进程ID 2 使用jstat命令查看堆内存的使用情况 1 垃圾回收统计 jstat gc 进程ID 参数解释 S0C 第一个幸存区的大小 S1C
  • 【vue-treeselect】数据量大的时候懒加载并且可以搜索,树懒加载+搜索

    这两天快被这个懒加载加搜索搞崩溃了 今天小有收获 后面优化了再更新 主要说一下一棵树如何懒加载和搜索 1 ref不解释了 和本次代码无关 2 normalizer格式化内容不重要 3 load options很关键 4 search cha
  • Qt5 C++源码中使用中文的简单步骤

    本文不讲任何道理 当你在Qt5的C 源文件内使用中文时 你只需按顺序简单照做即可 不止是中文 其实你完全可以在代码中使用日韩法俄语等等各国语言 0 通用 源文件保存为带BOM的UTF 8格式 如果你准备跨平台 保存为带BOM的UTF 8是必
  • 计算机迭代步数英语,迭代计算

    迭代法是数值计算中一类典型方法 应用于方程求根 方程组求解 矩阵求特征值等方面 其基本思想是逐次逼近 先取一个粗糙的近似值 然后用同一个递推公式 反复校正此初值 直至达到预定精度要求为止 1 迭代计算次数指允许公式反复计算的次数 在Exce
  • 毕业设计记录(二):基于VUE框架与ECharts和Axios技术结合的Web移动高校实验室管理系统设计与实现

    目录 点击即跳转 参考文献阅读笔记 空间信息与规划系实验室情况统计表 毕业设计进度 前端设计 登陆界面 未美术优化 参考文献 总 参考文献阅读笔记 2 甄翠明 李克 基于Web的高校计算机实验室预约管理系统的研究与设计 J 现代信息科技 2
  • 【速度↑20%模型尺寸↓36%】极简开源人脸检测算法升级

    经过一年的各种尝试 调试 测试以及无数次失败 我们的开源人脸检测算法再次升级 我们团队专注人脸检测优化十几年 一直持续优化 向着最简单的算法努力 新版本提升 计算量更小 速度提升约20 模型尺寸精简36 85K参数降低至54K 准确率有所提
  • so库的反编译,反汇编

    Linux APP SO的反汇编工具 ida Pro 可以反汇编app和SO库 有函数名 但是不能反编译到code这一级别 下载最强的反编译工具 ida Pro 6 4 Plus rar 还有这个反汇编工具 没用过 转自 http bbs
  • protobuf的序列化和反序列化的分析

    一 protobuf的optional 数据类型序列化分析 1 optional 的protobuf的文件 格式 syntax proto2 message test proto optional int32 proto1 1 option
  • thinkphp5.0.24反序列化漏洞分析

    thinkphp5 0 24反序列化漏洞分析 文章目录 thinkphp5 0 24反序列化漏洞分析 具体分析 反序列化起点 toArray getRelationData分析 modelRelation生成 进入 call前的两个if c
  • 初步学习Oracle之PL/SQL

    PL SQL简介 PL SQL Procedure Language SQL 程序语言是 Oracle 对 sql 语言的过程化扩展 指在 SQL 命令语言中增加了过程处理语句 如分支 循环等 使 SQL 语言具有过程处理能力 把SQL 语