Oracle PL/SQL Programming 第9章:Numbers 读书笔记

总的目录和进度,请参见开始读 Oracle PL/SQL Programming 第6版

本章谈3点:

  1. 可使用的数字数据类型
  2. 如何在数字和文本间转换
  3. PL/SQL 内置数值函数

Numeric Datatypes

  • NUMBER:平台无关的实现,适合处理货币金额
  • PLS_INTEGER 和 BINARY_INTEGER:硬件机器指令执行,数据库中无法存储
  • SIMPLE_INTEGER:同BINARY_INTEGER,除了不能存NULL,以及溢出时不会引发异常
  • BINARY_FLOAT 和 BINARY_DOUBLE:单精度和双精度浮点,不适合存金额,但运算速度快
  • SIMPLE_FLOAT 和 SIMPLE_DOUBLE:与 BINARY_FLOAT 和 BINARY_DOUBLE 具有相同的范围,但不允许 NULL,发生溢出则不引发异常

其他如 FLOAT, INTEGER, 和 DECIMAL只是别名而已。

The NUMBER Type

最常用,可以存整数、定点数和浮点数,平台无关的实现,也就是在任何平台计算结果都一样。

number(p, s) /* 定点数 */
number(p, 0) /* 整数 */
number /* 浮点数 */

文档中的描述为:

Number having precision p and scale s. The precision p can range from 1 to 38. The scale s can range from -84 to 127. Both precision and scale are in decimal digits. A NUMBER value requires from 1 to 22 bytes.

精度(p)是数字中有效数字的总数。 标度或小数位数(s)决定了小数点右侧(正数位数)或左侧(负数位数)的位数,并且还会影响舍入发生的点。 精度和标度都必须是字面整数值; 不能在声明中使用变量或常量。

标度通常小于精度,例如NUMBER(5, 2)的数字可能是999.99。

标度大于精度时,例如NUMBER(5, 7)。则形式为.0099999
5表示有5个有效数字(significant digits),从右往左数7,则确定了小数点位置。

以下代码是正确的:

set serveroutput on
declarea number(5,7) := 0.0099999;
beginDBMS_OUTPUT.PUT_LINE(a);
end;
/

但如果将0.0099999改为0.0999999或0.099999。则会报错:

Error report -
ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at line 2
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint erroroccurred. For example, this error occurs if an attempt is made toassign the value NULL to a variable declared NOT NULL, or if anattempt is made to assign an integer larger than 99 to a variabledeclared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared sothat values do not violate constraints.

标度为负数时,则小数点是从最右边的有效数字再往右数。

例如NUMBER(5, -3),则形式为99999000.,但赋值199999000则报与以上相同的错。

标度是可选地,默认值为0。

精度和标度与正负无关。例如NUMBER(3, 0)可表示-999到999。

The PLS_INTEGER Type

这是PL/SQL数据类型,不算数据库内置数据类型。范围-2,147,483,648 到2,147,483,647。

值使用硬件平台的本机整数格式表示,所以运算速度快。

当您使用 PLS_INTEGER 进行整数算术(以及循环计数器)时,如果可以避免与 NUMBER 类型之间的多次转换,您将获得最大的效率。 当此数据类型用于整数算术时,结果值将四舍五入为整数。例如50/100等于1,49/100则等于0。

The BINARY_INTEGER Type

等同于PLS_INTEGER,不建议使用,因和版本相关。

The SIMPLE_INTEGER Type

是PLS_INTEGER的子类型,有NOT NULL约束,并且在溢出语义上与PLS_INTEGER不同。理论上,如果可以保证没有NULL或溢出,则此类型会快于PLS_INTEGER。

看一下原文的例子,其比较了PLS_INTEGER和SIMPLE_INTEGER的运算速度:

/* File on web: simple_integer_demo.sql */
-- First create a compute-intensive procedure using PLS_INTEGER
CREATE OR REPLACE PROCEDURE pls_test (iterations IN PLS_INTEGER)
ASint1      PLS_INTEGER := 1;int2      PLS_INTEGER := 2;begints   timestamp;endts     timestamp;
BEGINbegints := SYSTIMESTAMP;FOR cnt IN 1 .. iterationsLOOPint1 := 0; /* 这句是我加的,否则会溢出 */int1 := int1 + int2 * cnt;END LOOP;endts := SYSTIMESTAMP;DBMS_OUTPUT.put_line(   iterations|| ' iterations had run time of:'|| TO_CHAR (endts - begints));
END;
/CREATE OR REPLACE PROCEDURE simple_test (iterations IN SIMPLE_INTEGER)
ASint1      SIMPLE_INTEGER := 1;int2      SIMPLE_INTEGER := 2;begints   timestamp;endts     timestamp;
BEGINbegints := SYSTIMESTAMP;FOR cnt IN 1 .. iterationsLOOPint1 := 0; /* 这句是我加的,否则会溢出 */int1 := int1 + int2 * cnt;END LOOP;endts := SYSTIMESTAMP;DBMS_OUTPUT.put_line(   iterations|| ' iterations had run time of:'|| TO_CHAR (endts - begints));
END;
/

测试如下:

BEGIN pls_test(123456789); END;
/
BEGIN simple_test(123456789); END;
/

从以上例子中可以学习如何计算运算时间。

另外PL/SQL有两种编译模式,INTERPRETED 和 NATIVE,默认为前者。

第二次运行时,使用NATIVE模式。

ALTER PROCEDURE pls_test COMPILE PLSQL_CODE_TYPE=INTERPRETED;
/ALTER PROCEDURE simple_test COMPILE PLSQL_CODE_TYPE=INTERPRETED
/

两次的运行结果(Windows宿主机上的Linux虚机):

-- INTERPRETED 模式
123456789 iterations had run time of:+000000000 00:00:01.971535000
12345678 iterations had run time of:+000000000 00:00:00.397607000-- NATIVE 模式
123456789 iterations had run time of:+000000000 00:00:00.777152000
12345678 iterations had run time of:+000000000 00:00:00.113956000

结论为:

  • NATIVE模式比INTERPRETED块
  • SIMPLE_INTEGER比PLS_INTEGER快

The BINARY_FLOAT and BINARY_DOUBLE Types

遵从IEEE-754浮点数标准,数据库表定义和PL/SQL均支持。可以加后缀f或d表示。如:

0.9f
0.9d

使用 IEEE-754 浮点类型时还可以使用一些特殊文字。

PL/SQL 和 SQL 都支持的:

  • BINARY_FLOAT_NAN、BINARY_DOUBLE_NAN表示“不是数字”。
  • BINARY_FLOAT_INFINITY、BINARY_DOUBLE_INFINITY表示无穷大。

仅 PL/SQL 支持的:

  • BINARY_FLOAT_MIN_NORMAL、BINARY_FLOAT_MAX_NORMAL定义您应该计划存储在变量中的值的正常范围。
  • BINARY_FLOAT_MIN_SUBNORMAL、BINARY_FLOAT_MAX_SUBNORMAL
    定义所谓的次正常值范围。 次正常值是 IEEE-754 标准的一部分,旨在将下溢引起的问题减少到零。

与数据类型一起使用的谓词:

  • IS NAN, IS NOT NAN 确定值是否为数字。
  • IS INFINITE, IS NOT INFINITE 确定值是否表示无穷大。

特别注意,BINARY类型是二进制表示的,因此其不精确,不适合存放和钱相关的值。涉及到钱的,用NUMBER
例如:

BEGINDBMS_OUTPUT.PUT_LINE(0.95f); -- BINARY_FLOATDBMS_OUTPUT.PUT_LINE(0.95d); -- BINARY_DOUBLEDBMS_OUTPUT.PUT_LINE(0.95);  -- NUMBEREND;

输出为:

9.49999988E-001
9.4999999999999996E-001
.95

此类型用于比较时,要特别注意。
例如0.95f和0.95d是不相等的,0.95d精度要高些。

而以下则是相等的:

declarea number := 0.95f - 0.95d;
BEGINIF ABS(a) < 0.000001dTHENDBMS_OUTPUT.PUT_LINE('TRUE');ELSEDBMS_OUTPUT.PUT_LINE('FALSE');END IF;
END;

原文没有定义变量a,而是将0.95f - 0.95d作为ABS的参数,但总是报错,不知为何:

Error report -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 2
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint erroroccurred. For example, this error occurs if an attempt is made toassign the value NULL to a variable declared NOT NULL, or if anattempt is made to assign an integer larger than 99 to a variabledeclared NUMBER(2).
*Action:   Change the data, how it is manipulated, or how it is declared sothat values do not violate constraints.

使用这些IEEE-754类型,原因可能是为要符合IEEE-754标准(不符合的部分请查看Oracle SQL参考手册),或为了运算速度。

看一下原文中测试的主体:

...-- Compute area 5,000,000 times using binary doublesbd_begin := SYSTIMESTAMP;bd := 1d;LOOPbd_area := bd * bd * pi_bd;bd := bd + 1d;EXIT WHEN bd > 5000000;END LOOP;bd_end := SYSTIMESTAMP;
...

我的结果为:

-- 算圆的面积,500万次
BINARY_DOUBLE area = +00 00:00:00.298879000
NUMBER        area = +00 00:00:01.094699000
-- 算Sin函数,500万次
BINARY_DOUBLE sine = +00 00:00:00.738123000
NUMBER        sine = +00 00:00:58.136234000

数据类型优先级
详见Data Type Precedence。

Oracle 使用数据类型优先级来确定隐式数据类型转换,Oracle 数据类型具有以下优先级(由高到低):

  • Datetime 和interval数据类型
  • BINARY_DOUBLE
  • BINARY_FLOAT
  • NUMBER
  • Character 数据类型
  • 所有其他内置数据类型

如果使用隐式转换,0.95f+0.95d的类型是BINARY_DOUBLE。

如果不想隐式转换,则可以用TO_NUMBER, TO_BINARY_FLOAT或 TO_BINARY_DOUBLE.显式转换,诸如此类。

总之,Oracle不建议隐式转换

Oracle recommends that you specify explicit conversions, rather than rely on implicit or automatic conversions

因为:

  • 使用显式数据类型转换函数时,SQL 语句更容易理解。
  • 隐式数据类型转换可能会对性能产生负面影响。
  • 隐式转换的结果取决于它发生的上下文。 例如,从datetime 到 VARCHAR2 值的隐式转换可能会返回意外的年份,具体取决于 NLS_DATE_FORMAT 设置。
  • 隐式转换的算法可能会因软件版本和 Oracle 产品而异。 显式转换的行为更可预测。
  • 如果索引表达式中发生隐式数据类型转换,则 Oracle 数据库可能不会使用该索引,因为它是为转换前的数据类型定义的。 这可能会对性能产生负面影响。

详见这里

The SIMPLE_FLOAT and SIMPLE_DOUBLE Types

BINARY_FLOAT 和 BINARY_DOUBLE 数据类型的性能增强版,但不支持 NULL 值、特殊 IEEE 文字(BINARY_FLOAT_NAN、BINARY_DOUBLE_INFINITY 等)或特殊 IEEE 谓词(IS NAN、IS INFINITY 等)。 他们也不检查溢出情况。

Numeric Subtypes

大多是基础类型的别名,为了支持ISO SQL, SQL/DS和 DB2 数据类型。例如INT,SMALLINT等。

NATURAL 和 POSITIVE 都是 PLS_INTEGER 的子类型。 这些子类型限制了可以存储在变量中的值,它们的使用可以使程序自我说明。

数字转换

Number Conversions

使用TO_CHAR 和 TO_NUMBER进行转换。

The TO_NUMBER Function

说明见这里。

调用格式为:

TO_NUMBER(string [,format [,nls_params]])

通常只需要指定第一个参数,例如:

  • 字符串仅使用数字和一个小数点表示。
  • 前导符合必须是减号 (–) 或加号 (+)。 如果不存在,则假定该数字为正数。
  • 使用科学记数法
Using TO_NUMBER with a format model

格式详见这里。

例如:

select to_number('$1234', '$9999') from dual;
select to_number('12,34', '99,99') from dual;
Passing NLS settings to TO_NUMBER

数字格式模型元素最终都从 NLS 参数之一得出其含义。具体可查看设置:

SELECT * FROM nls_session_parameters;PARAMETER                      VALUE                                                           
------------------------------ -------------------------------------
NLS_LANGUAGE                   AMERICAN                                                        
NLS_TERRITORY                  AMERICA                                                         
NLS_CURRENCY                   $                                                               
NLS_ISO_CURRENCY               AMERICA                                                         
NLS_NUMERIC_CHARACTERS         .,                                                              
NLS_CALENDAR                   GREGORIAN                                                       
NLS_DATE_FORMAT                DD-MON-RR                                                       
NLS_DATE_LANGUAGE              AMERICAN                                                        
NLS_SORT                       BINARY                                                          
NLS_TIME_FORMAT                HH.MI.SSXFF AM                                                  
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM                                        
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR                                              
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR                                    
NLS_DUAL_CURRENCY              $                                                               
NLS_COMP                       BINARY                                                          
NLS_LENGTH_SEMANTICS           BYTE                                                            
NLS_NCHAR_CONV_EXCP            FALSE                                                           17 rows selected. 

其中只能指定NLS_NUMERIC_CHARACTERS, NLS_CURRENCY 和 NLS_ISO_CURRENCY。例如:

select TO_NUMBER('F123.456,78','L999G999D99','NLS_NUMERIC_CHARACTERS='',.'''|| ' NLS_CURRENCY=''F'''|| ' NLS_ISO_CURRENCY=FRANCE') as result from dual;RESULT
----------123456.78

说明:

  • NLS_NUMERIC_CHARACTERS控制G,即组分隔符
  • NLS_CURRENCY控制L,即本地货币符号
  • NLS_ISO_CURRENCY控制D,即小数字符

这些最好通过会话设置来控制,而不是像上面例子,硬编码到代码中。

The TO_CHAR Function

是TO_NUMBER的逆函数。调用格式类似:

TO_CHAR(number [,format [,nls_params]])
Using TO_CHAR with no format

较少使用,一般都需要格式化使其更具可读性。

Using TO_CHAR with a format model
select TO_CHAR(123456789.01,'L999G999G999D99') from dual;TO_CHAR(123456789.01,'L99
-------------------------$123,456,789.01

The V format element
V 格式元素比较特殊,允许您缩放值。

以股市为例,股票的标准交易单位是 100 股。因此,销售数字 123 实际上代表 123 个 100 股,即 12,300 股。
例如:

select TO_CHAR(123.45,'999V99') from dual;
TO_CHA
------12345select TO_CHAR(123.45,'999V9999') from dual;
TO_CHAR(
--------1234500

Rounding when converting numbers to character strings
将字符串转换为数字时,只要小数点左侧或右侧的数字多于格式模型允许的数字,您就会收到错误。 但是,将数字转换为字符时,仅当数字需要的小数点左侧位数多于格式模型允许的位数时,您才会收到错误。 如果您在格式模型中指定的小数位数(即小数点右侧的位数)少于数字所需的数字,则该数字将被四舍五入,以便小数部分适合您的模型。

例如:

-- 错误
select TO_CHAR(123.4567,'99.99') from dual;
TO_CHA
------
######-- 舍入
select TO_CHAR(123.4567,'999.99') from dual;
TO_CHAR
-------123.46select TO_NUMBER('123.45', '999.9') from dual;
ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.select TO_NUMBER('123.45', '99.99') from dual;
Error report -
SQL Error: ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

Dealing with spaces when converting numbers to character strings

注意以下输出的区别:

select TO_CHAR(-123.4), LENGTH(TO_CHAR(-123.4)) from dual;
select TO_CHAR(123.4), LENGTH(TO_CHAR(123.4)) from dual;select TO_CHAR(-123.4, '999.9'), LENGTH(TO_CHAR(-123.4, '999.9')) from dual;
select TO_CHAR(123.4, '999.9'), LENGTH(TO_CHAR(123.4, '999.9')) from dual;TO_CHA LENGTH(TO_CHAR(-123.4))
------ -----------------------
-123.4                       6TO_CH LENGTH(TO_CHAR(123.4))
----- ----------------------
123.4                      5TO_CHA LENGTH(TO_CHAR(-123.4,'999.9'))
------ -------------------------------
-123.4                               6TO_CHA LENGTH(TO_CHAR(123.4,'999.9'))
------ ------------------------------123.4                              6

注意最后2个SQL,当指定了格式模型时,TO_CHAR 总是为正负号留出空间。

如果你不需要前导空格,可以指定其他的格式模型,如TM,或使用LTRIM函数。

Passing NLS settings to TO_CHAR
和TO_NUMBER一样,也是只能指定NLS_NUMERIC_CHARACTERS, NLS_CURRENCY 和 NLS_ISO_CURRENCY。

The CAST Function

CAST 函数用于将数字转换为字符串,或反之。

手册见这里。

调用格式为:

CAST (expression AS datatype)

例如:

select cast(999.99 as varchar2(12)) from dual;
select cast('999.99' as number) from dual;

在SQL中写成如下会报错:

select cast(999.99 as varchar2) from dual;

但PL/SQL中不会:

DECLAREa NUMBER := -123.45;a1 VARCHAR2(30);
BEGINa1 := CAST (a AS VARCHAR2);
END;

CAST 的缺点是不支持使用数字格式模型。 CAST 的优点是它是 ISO SQL 标准的一部分,而 TO_CHAR 和 TO_NUMBER 函数则不是。 如果编写 100% 符合 ANSI 的代码对您很重要,那么应该用CAST。
不过,PL/SQL本身就不是 ISO 标准的一部分,因此根据定义不可能编写 100% 符合 ISO 的 PL/SQL 代码。

Implicit Conversions

如果你想控制代码的行为,知道转换何时发生,最好使用显式转换。

总之,不要使用隐式转换,坏处前面都说过了。

例如:

-- 不好
select '123.400' || 999 from dual;-- 好
select to_number('123.400' || to_char(999)) from dual;

作者也给出了一个例子,就是前面了个性能比较的例子:

DECLAREbd BINARY_DOUBLE;...
BEGIN...FOR bd IN 1..1000000 LOOPbd_area := bd**2 * pi_bd;END LOOP;...

其中有两个问题:

  • FOR循环中的bd,实际上是隐式新声明了一个变量,他的类型是PLS_INTEGER。从而导致FOR循环体中使用PLS_INTEGER进行运算
  • bd**2,由于2原因,是结果隐式转换为NUMBER。此处2应写成2d。

Numeric Operators

注意:PL/SQL和SQL的运算符优先级(Operator Precedence)是不一样的。前者参考这里,后者参考这里。

以下是PL/SQL的,优先级从高到低,高优先级的先算:
在这里插入图片描述
例如:

DECLAREa INTEGER := 1+2**2;b INTEGER := (1+2)**2;
BEGINDBMS_OUTPUT.PUT_LINE('a = ' || TO_CHAR(a));DBMS_OUTPUT.PUT_LINE('b = ' || TO_CHAR(b));
END;
/

Numeric Functions

前面介绍过TO_CHAR, TO_NUMBER。

Rounding and Truncation Functions

函数概述
CEILCEIL 返回大于或等于 n 的最小整数
FLOOR返回等于或小于 n 的最大整数
ROUNDROUND 返回 n 四舍五入到小数点右侧的整数位
TRUNC返回 n1 截断至 n2 位小数。 如果省略 n2,则 n1 被截断为 0 位。 n2 可以为负数,以截断小数点左侧的 n2 位(使其为零)

TRUNC函数将数字截断至指定的小数位数。 TRUNC 简单地丢弃超出调用中提供的小数位数的所有值。

作者设计这个练习挺好的:

1.751.355.5655.5610
小数位数001-12
ROUND2155.66010
TRUNC1155.55010
FLOOR11555510
CEIL22565610

Trigonometric Functions

PL/SQL 中提供了许多三角函数。 使用它们时,请注意所有角度均以弧度表示,而不是度数。你可以进行转换:

radians = pi * degrees / 180 -- 从度数到弧度
degrees = radians * 180 / pi -- 从弧度到度数

PL/SQL 本身没有实现 π (pi) 函数。 但是,您可以通过以下调用获取 π 的值:

select ACOS(-1) from dual;ACOS(-1)
----------
3.14159265

Numeric Function Quick Reference

下面的列表简要描述了 PL/SQL 的每个内置数值函数。 在适用的情况下,函数会针对不同的数字类型进行重载。

ABS:对于 BINARY_DOUBLE、BINARY_FLOAT、NUMBER、SIMPLE_INTEGER、SIMPLE_FLOAT、SIMPLE_DOUBLE 和 PLS_INTEGER 进行重载,因为您可以获取浮点值和整数值的绝对值

BITAND:对于 PLS_INTEGER 和 INTEGER(NUMBER 的子类型)重载,因为该函数被设计为仅对整数值进行 AND 运算

CEIL:对于 BINARY_DOUBLE、BINARY_FLOAT 和 NUMBER 重载,因为 CEIL 是一个并不真正适用于整数的函数

查看重载可以:

DESCRIBE SYS.STANDARD...

列表详见这里:

  • ABS
  • ACOS
  • ASIN
  • ATAN
  • ATAN2
  • BIN_TO_NUM
  • BITAND
  • CEIL
  • COS
  • COSH
  • EXP
  • FLOOR
  • GREATEST
  • LEAST
  • LN
  • LOG
  • MOD
  • NANVL
  • POWER
  • REMAINDER
  • ROUND
  • SIGN
  • SIN
  • SINH
  • SQRT
  • TAN
  • TANH
  • TRUNC (number)
  • WIDTH_BUCKET
-- BIN_TO_NUM 将位向量转换为其等效数字
SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL; BIN_TO_NUM(1,0,1,0)
-------------------10-- BITAND将其输入和输出视为位向量; 输出是输入的按位与。
-- 0110 & 0011 = 0010 
SELECT BITAND(6,3) FROM DUAL;BITAND(6,3)
-----------2-- GREATEST 返回一个或多个表达式列表中最大的一个
-- LEAST 返回一个或多个表达式列表中的最小值。
SELECT GREATEST (1, '3.925', '2.4') "Greatest"FROM DUAL;Greatest
--------3.925SELECT LEAST (1, '3.925', '2.4') "Least"FROM DUAL;Least
----------1-- REMAINDER 返回 n2 除以 n1 的余数。
SELECT remainder(10, 2.4) FROM DUAL;REMAINDER(10,2.4)
-----------------.4-- SIGN 返回 n 的符号。表示正,负或0
SELECT sign(3-10) FROM DUAL;SIGN(3-10)
-----------1-- 

WIDTH_BUCKET 允许您构建等宽直方图,其中直方图范围分为具有相同大小的间隔。 (将此函数与 NTILE 进行比较,NTILE 创建等高直方图。)理想情况下,每个桶都是实数轴的闭开区间。 例如,可以将一个桶分配给 10.00 到 19.999 之间的分数…以指示该区间中包含 10,并且排除 20。 有时这被表示为 [10, 20)。

对于给定的表达式,WIDTH_BUCKET 返回该表达式的值在计算后将落入的桶号。

SELECT customer_id, cust_last_name, credit_limit, WIDTH_BUCKET(credit_limit, 100, 5000, 10) "Credit Group"FROM customers WHERE nls_territory = 'SWITZERLAND'ORDER BY "Credit Group", customer_id, cust_last_name, credit_limit;CUSTOMER_ID CUST_LAST_NAME       CREDIT_LIMIT Credit Group
----------- -------------------- ------------ ------------825 Dreyfuss                      500            1826 Barkin                        500            1827 Siegel                        500            1853 Palin                         400            1843 Oates                         700            2844 Julius                        700            2835 Eastwood                     1200            3836 Berenger                     1200            3837 Stanton                      1200            3840 Elliott                      1400            3841 Boyer                        1400            3842 Stern                        1400            3848 Olmos                        1800            4849 Kaurusmdki                   1800            4828 Minnelli                     2300            5829 Hunter                       2300            5850 Finney                       2300            5851 Brown                        2300            5852 Tanner                       2300            5830 Dutt                         3500            7831 Bel Geddes                   3500            7832 Spacek                       3500            7833 Moranis                      3500            7834 Idle                         3500            7838 Nicholson                    3500            7839 Johnson                      3500            7845 Fawcett                      5000           11846 Brando                       5000           11847 Streep                       5000           11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面试题汇总

基础面试题 1.new 操作符做了那些事 function Fun(name){this.name name } Fun.prototype.sayHi funtion(){console.log(this.name) }function mockCreate(fn, ...args){let obj Object.create({}) // 创建一个空对象Object.setPrototypeOf(obj, fn.prototype) // 空对象…

day02vue学习

day02 一、今日学习目标 1.指令补充 指令修饰符v-bind对样式增强的操作v-model应用于其他表单元素 2.computed计算属性 基础语法计算属性vs方法计算属性的完整写法成绩案例 3.watch侦听器 基础写法完整写法 4.综合案例 &#xff08;演示&#xff09; 渲染 / 删除 / 修…

速卖通批量注册买家号安全吗?怎么弄?

在速卖通等跨境电商平台上&#xff0c;买家号的注册与养号过程繁琐而复杂。传统的手动注册方式效率低下&#xff0c;难以满足大规模的需求。而跨境智星系统凭借其全自动化的功能&#xff0c;能够轻松实现买家号的批量注册与养号&#xff0c;大大提高了效率。 使用跨境智星系统进…

200W年薪的大佬 随手丢给我“Spring速成宝典”看完这些知识点直接定级P7

面试官&#xff1a;答的很好&#xff0c;最后一个问题&#xff1a;如果没有Spring&#xff0c;你打算怎么开展工作&#xff1f; 这个思考了几分钟后&#xff0c;程序员小建是这么回答的&#xff1a;Spring的核心源码&#xff0c;比如&#xff1a;IOC、AOP、Spring事务、MVC原理…

Explain详解与索引优化最佳实践

Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在select语句之前增加explain关键字,MySQL会在查询前设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL 注意: 如果from中包含子查询,仍会执行该子查询,将结果…

DAY by DAY 史上最全的Linux常用命令汇总----man

man是按照手册的章节号的顺序进行搜索的。 man设置了如下的功能键&#xff1a; 功能键 功能 空格键 显示手册页的下一屏 Enter键 一次滚动手册页的一行 b 回滚一屏 f 前滚一屏 q 退出man命令 h 列出所有功能键 /word 搜索word字符串 注意&#xff1a…

【文献阅读】A Fourier-based Framework for Domain Generalization(基于傅立叶的领域泛化框架)

原文地址&#xff1a;https://arxiv.org/abs/2105.11120 摘要 现代深度神经网络在测试数据和训练数据的不同分布下进行评估时&#xff0c;存在性能下降的问题。领域泛化旨在通过从多个源领域学习可转移的知识&#xff0c;从而泛化到未知的目标领域&#xff0c;从而解决这一问…

03-自媒体文章发布-黑马头条

自媒体文章发布 1)自媒体前后端搭建 1.1)后台搭建 ①&#xff1a;资料中找到heima-leadnews-wemedia.zip解压 拷贝到heima-leadnews-service工程下&#xff0c;并指定子模块 执行leadnews-wemedia.sql脚本 添加对应的nacos配置 spring:datasource:driver-class-name: com…

图解Diffusion扩散模型+代码

0、项目视频详解 视频教程见B站https://www.bilibili.com/video/BV1e8411a7mz 1、diffusion模型理论&#xff08;推导出损失函数&#xff09; 1.1、背景 随着人工智能在图像生成&#xff0c;文本生成以及多模态生成等领域的技术不断累积&#xff0c;如&#xff1a;生成对抗网…

SD-WAN技术如何保障网络的持续连接和稳定性

在当今数字化时代&#xff0c;企业对于网络的稳定性和持续连接性需求日益增加。SD-WAN作为一种新兴的网络解决方案&#xff0c;为企业提供了有效的方式来实现网络的持续连接和稳定性。本文将探讨SD-WAN技术如何保障网络的持续连接和稳定性。 1、多路径冗余技术 SD-WAN采用了多…

初识Python语言-课堂练习【pyhton123题库】

初识Python语言-课堂练习【pyhton123题库】 一、单项选择题 1、Guido van Rossum正式对外发布Python版本的年份是&#xff1a; A 2008B 1998C 1991D 2002 【答案】C 【解析】暂无解析2、下面不是Python语言特点的是&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪…

移动端App、小程序、公众号该怎么选择,你真得知道吗?

当下移动App,小程序泛滥&#xff0c;如何选择&#xff0c;你真的知道吗&#xff1f; 今天我们就聊聊App、小程序、公众号、微应用具体是什么&#xff1f;怎么样开发&#xff1f;适合在什么情况下使用&#xff1f; 1.App、小程序、公众号、微应用之初识 App App本质来说就是手…

机试:蛇形矩阵

问题描述: 代码示例: //蛇形矩阵 #include <bits/stdc.h> using namespace std;int main(){int n;cout << "输入样例" << endl; cin >> n;int k 1; for(int i 0; i < n; i){if( i %2 0){//单数行for(int j 0; j < n; j){ cout &…

安装包逆向1

1.找到程序的入口点 在IDA中我们看到函数非常多&#xff0c;但是一般都是有主要的入口的&#xff0c;所以找一下有没有主函数 可以直接 CtrF直接查找 CNsInstaller::CNsInstaller 这里搞半天在获取文件路径 CNsInstaller::StartInstall CNsInstaller::InstallFunc char…

springboot268码头船只货柜管理系统

码头船只出行和货柜管理系统的设计与实现 摘要 针对于码头船只货柜信息管理方面的不规范&#xff0c;容错率低&#xff0c;管理人员处理数据费工费时&#xff0c;采用新开发的码头船只货柜管理系统可以从根源上规范整个数据处理流程。 码头船只货柜管理系统能够实现货柜管理…

Spring 面试题及答案整理,最新面试题

Spring框架中的Bean生命周期是什么&#xff1f; Spring框架中的Bean生命周期包含以下关键步骤&#xff1a; 1、实例化Bean&#xff1a; 首先创建Bean的实例。 2、设置属性值&#xff1a; Spring框架通过反射机制注入属性。 3、调用BeanNameAware的setBeanName()&#xff1a…

某电信公司组织结构优化咨询项目成功案例纪实

——构建前后端组织结构&#xff0c;提升组织运营效率 随着企业的不断发展&#xff0c;行业的竞争也越来越激烈&#xff0c;企业只能不断调整自身的战略才能更好的适应这样的大环境。在战略调整的过程中&#xff0c;企业往往会面临这样的问题&#xff1a;管理层的经营理念各不…

哪些订单预计会亏?一张报表告诉你

各位数据的朋友&#xff0c;大家好&#xff0c;我是老周道数据&#xff0c;和你一起&#xff0c;用常人思维数据分析&#xff0c;通过数据讲故事。 销售订单一般是企业在销售活动中重要的单据&#xff0c;当我们接到一个客户的订单时&#xff0c;就需要在系统中录入一个销售订…

STM32 | STM32F407ZE中断、按键、灯(续第三天)

上节回顾 STM32 | 库函数与寄存器开发区别及LED等和按键源码(第三天)一、 中断 中断概念 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行(面试题)。 STM32外部中断…

智慧城市大模型来啦!港大百度推出UrbanGPT

论文作者解读链接&#xff1a;https://blog.csdn.net/qq_42715656/article/details/136681839 项目链接&#xff1a;https://urban-gpt.github.io/ 代码链接&#xff1a;https://github.com/HKUDS/UrbanGPT 论文链接&#xff1a;https://arxiv.org/abs/2403.00813 研究实验室链…