小编Wil*_*son的帖子

Oracle相当于SQL Server DATEPART

我们需要从DATETIME列中获取HOUR(期望返回0到23之间的值).

是否有Oracle等效的SQL Server DATEPART功能?

sql oracle date datepart

18
推荐指数
2
解决办法
6万
查看次数

获取较小数字的数字溢出错误,但较大数字成功

以下是我的测试功能:

create or replace FUNCTION test
RETURN NUMBER
AS
  v_count   number(15);
  v_msisdn  number(15);
BEGIN
  v_msisdn:= 225952 * 10000;
  -- v_msisdn:=50510060853 * 10000;

  return v_msisdn;
END;
Run Code Online (Sandbox Code Playgroud)

当我执行函数时

select test() from dual;
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

1426. 00000 -  "numeric overflow"
*Cause:    Evaluation of an value expression causes an overflow/underflow.
Run Code Online (Sandbox Code Playgroud)

但是,如果我更新

v_msisdn:=50510060853 * 10000;
Run Code Online (Sandbox Code Playgroud)

我没有得到错误.

有人可以解释这个行为,因为第二个查询是一个更大的数字?

oracle plsql

8
推荐指数
1
解决办法
87
查看次数

运行总计 - 日期差异

这就是表格的样子:

create table IncomeTest (SubjectId int, Date_Value date, debit number, credit number);

insert into IncomeTest values (1, '7-SEP-2017', 11000, 0);
insert into IncomeTest values (1, '7-DEC-2017', 6000, 0);
insert into IncomeTest values (1, '9-JAN-2018', 0, 16110);
insert into IncomeTest values (1, '9-JUL-2018', 0, 619.6);
insert into IncomeTest values (1, '23-JUL-2018', 0, 270.4);

commit;
Run Code Online (Sandbox Code Playgroud)

借方代表现金,贷方代表现金.插入表后,您将获得以下数据:

SubjectID | Date_value | Debit |  Credit 
    1       9/7/2017     11000         0
    1       12/7/2017     6000         0
    1       1/9/2018         0   16110.0
    1       7/9/2018         0     619.6
    1       7/23/2018        0 …
Run Code Online (Sandbox Code Playgroud)

sql oracle running-total

6
推荐指数
1
解决办法
109
查看次数

Vim语法高亮 - 从模式中排除特定文本

我已经定义sqlVariablesqlString在我的语法文件中

syn match   sqlVariable ":[a-z][a-z0-9_#$]*"
syn region  sqlString   start=+'+ end=+'+ contains=sqlVariable
Run Code Online (Sandbox Code Playgroud)

(加上一些其他的引用变体.)字符串可以包含sqlVariable,以突出动态代码中的绑定,如:b1in 'select a from b where c = :b1'.(这适用于Oracle顺便说一句.)

这一切都很好 - 除了包含冒号的日期格式掩码的特定烦人情况,例如

to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')
Run Code Online (Sandbox Code Playgroud)

:MI和:SS被突出显示为变量,因为它们当然与我的模式匹配.

有没有办法:MI和:SS sqlVariable在引用的字符串中不匹配?(我认为只有这两种情况才会这样做.)

regex vim vim-syntax-highlighting

5
推荐指数
1
解决办法
484
查看次数

如何动态获取记录中的字段名称和值

我有一个过程,它接收170列的记录作为输入参数(它基于表的结构).

在该过程中,我想调用一个调试过程,其中一个参数是一个包含该记录的所有字段名称和值的文本字符串.

例如:

CREATE OR REPLACE PROCEDURE xxx (pi_record IN table_name%ROWTYPE) as
    text VARCHAR2(10000) := NULL;
BEGIN
    ...
    text := 'pi_record.column1 = ' || pi_record.column1 || CHR(13) ||
            'pi_record.column2 = ' || pi_record.column2 || CHR(13) ||
            ...
            'pi_record.column170 = ' || pi_record.column170;
    logging_procedure (text);
    ...
END;
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法以动态方式实现这一点(循环记录字段名称和值)而不枚举所有这些?

也许是这样的:

CREATE OR REPLACE PROCEDURE xxx (pi_record IN table_name%ROWTYPE) as
    text VARCHAR2(10000) := NULL;
BEGIN
    ...      
    LOOP in pi_record.columns
        text := text || CHR(13) || pi_record.column.name || ' : ' || pi_record.column.value
    END …
Run Code Online (Sandbox Code Playgroud)

oracle plsql record

5
推荐指数
1
解决办法
1525
查看次数

OpenShift 中的 Spring 批处理 JDBCPagingItemReader、ThreadPoolTask​​Executor 和多个 pod

我们有一个带有块处理功能的 Spring 批处理应用程序,它作为编写器的一部分从数据库读取记录,处理它们并调用服务/执行一些插入/更新数据库中的一些表。

JDBCPagingItemReader已被使用,因为当 saveState 为 false 时它是线程安全的。已设置排序键,因此线程不会相互交叉。Oracle 数据源和Spring 批处理的配置也ISOLATION_READ_COMMITTED使用了隔离级别。JobRepository

ThreadPoolTaskExecutor目前,在单个实例中使用多线程效果很好。

我们最终应该在 OpenShift 中部署这个 Spring Boot 应用程序,该应用程序将在多个 PODS 中运行,即应用程序的多个实例,它们都从同一个表中读取。

有相关知识的人可以告诉我在多个 Pod(实例)中使用上述组合是否会出现任何问题,或者是否存在必须处理的并发问题。

这种情况下的任何最佳实践都受到高度赞赏。

谢谢你的时间。

java oracle spring-batch openshift spring-boot

5
推荐指数
1
解决办法
584
查看次数

通配符搜索数字范围

我正在尝试过滤掉包含客户互联网计划的列 (plan_name)。例如(200GB 快速无限、免费附加邮箱、无限 VDSL...)。我特别想过滤掉没有任何数字的计划。该列的类型为 varchar2,我正在查询 Oracle 数据库。我编写了以下代码:

SELECT *
FROM   plans
WHERE  plan_name NOT LIKE '%[0-9]%'
Run Code Online (Sandbox Code Playgroud)

但是,此代码仍会快速返回 200GB 之类的计划,其中包含数字?谁能解释这是为什么?

regex sql oracle where-clause sql-like

5
推荐指数
1
解决办法
93
查看次数

为什么Oracle的DECODE给我的价值与NVL不同?

这个查询:

select nvl(0.75,0) from dual
Run Code Online (Sandbox Code Playgroud)

给我0.75(数字),但这个查询:

select decode(1,0,null,0.75) from dual 
Run Code Online (Sandbox Code Playgroud)

给我'.75'(字符串).

为什么?

我试图通过将第二个查询更改为:

select decode(1,0,null,to_char(0.75,'0.99')) from dual
Run Code Online (Sandbox Code Playgroud)

但在我的实际代码中,0.75将是一个字段(NUMBER),可能有不同的小数位数,我不想添加/删除该值的任何内容.

有关如何修复缺失零问题但仍支持所有可能的小数长度的任何想法?

java sql oracle decode to-char

4
推荐指数
1
解决办法
2213
查看次数

Oracle中软件包中当前正在执行的过程名称

有没有办法获取Oracle包中当前正在执行的过程名称?

create or replace package test_pkg
as
    procedure proc1;
end test_pkg;

create or replace package body test_pkg
as
    procedure proc1 
    is
        -- // Get the Procedure Name here?? //
    end proc1;
end test_pkg;
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g

4
推荐指数
2
解决办法
3621
查看次数

LEFT JOIN 从左表中获取所有行,无论连接条件如何

我正在尝试执行左连接,以便从左表中获取所有行,即使这些行的连接条件不成立。

示例:下面的 Aid = Bid 但表 B 只有 3 个 id

在此输入图像描述

我正在使用的查询仅给出连接条件为真的行。即使连接条件不成立,有没有办法从左表中获取所有行?

我的查询:

SELECT Table1.Aid,
       Table2.Bid,
       Table2.Issueid
  FROM Table1
       LEFT JOIN Table2 ON Table1.Aid = Table2.Bid;

 WHERE Table2.Issueid IN (
    'a',
    'b'
)
Run Code Online (Sandbox Code Playgroud)

sql oracle join oracle-sqldeveloper

4
推荐指数
1
解决办法
8765
查看次数