小编Ron*_*nis的帖子

使用子查询加入消除不在Oracle中的工作

我能够将连接消除工作用于简单的情况,例如一对一的关系,但不能用于稍微复杂的场景.最后我想尝试锚建模,但首先我需要找到解决这个问题的方法.我正在使用Oracle 12c企业版第12.1.0.2.0版.

我的测试用例的DDL:

drop view product_5nf;
drop table product_color cascade constraints;
drop table product_price cascade constraints;
drop table product       cascade constraints;

create table product(
   product_id number not null
  ,constraint product_pk primary key(product_id)
);

create table product_color(
   product_id  number         not null references product
  ,color       varchar2(10)   not null
  ,constraint product_color_pk primary key(product_id)
);

create table product_price(
   product_id  number   not null references product
  ,from_date   date     not null
  ,price       number   not null
  ,constraint product_price_pk primary key(product_id, from_date)
);
Run Code Online (Sandbox Code Playgroud)

一些示例数据:

insert into product values(1);
insert …
Run Code Online (Sandbox Code Playgroud)

sql database oracle cost-based-optimizer anchor-modeling

9
推荐指数
1
解决办法
715
查看次数

如何以UTC和本地时区存储日期时间

什么是存储日期时间的实用方法,以便我可以让用户查看/查询自己当地时间的数据,同时保留有关原始日期时间的信息.

基本上,用户希望能够查询(从他们自己的本地时间)从各个时区的系统收集的数据.但偶尔,他们想知道数据是在原始系统中的18:00创建的.当来自世界不同地区的用户就同一事件进行通信时,它会有所帮助.

User1: What? We don't have any data for 20:00
User2: Dude, it says 20:00 right there on my screen.
User1: Wait, what timezone are you? What's the UTC-time?
User2: What is UTC? Is that something with computers?
User1: OMFG! *click*
Run Code Online (Sandbox Code Playgroud)

我正在寻找有关如何存储数据的建议.

我正在考虑以UTC格式存储所有日期时间,并添加一个包含原始时区名称的附加列,其形式允许我使用mysql CONVERT_TZ或Java中的对应物.然后,应用程序将用户输入的日期转换为UTC,我可以轻松查询数据库.所有日期也可以轻松转换为应用程序中的用户本地时间.使用原始时区列我也可以显示原始日期时间.

但是,这意味着对于我所拥有的每个日期时间,我需要一个额外的列...

start_time_utc datetime
start_time_tz  varchar(64)
end_time_utc   datetime
end_time_tz    varchar(64)
Run Code Online (Sandbox Code Playgroud)

我在这里走在正确的轨道上吗?

是否有人使用这些数据分享他们的经验?

(我将使用MySQL 5.5 CE)

更新1

数据将以xml文件的形式提供,其中每个条目在某个本地时区具有日期时间.因此,只有一个插入过程,在一个地方运行.

一旦加载到数据库中,它将在一些Web应用程序中呈现给不同时区的用户.对于大多数用例,感兴趣的数据也来自与查看数据的用户相同的时区.对于一些更复杂的用例,一系列事件是互连的并跨越多个时区.因此,用户希望能够谈论事件,以便在另一个时间调查可能的原因/后果.不是UTC,不是他们当地的时间.

mysql timezone datetime database-design convert-tz

7
推荐指数
2
解决办法
9484
查看次数

计算除以2的次数

问候.

我有一个我觉得很贵的java方法,我试图用数学表达式替换它的一些调用.问题是,我吮吸数学.我的意思是真的很糟糕.

以下应该解释我试图利用的模式.

f(x)   -> y
f(x*2) -> f(x)+1
Run Code Online (Sandbox Code Playgroud)

也就是说,每当我将x的值加倍时,y的值将比x/2的值大1.以下是一些示例输出:

f(5)   -> 6
f(10)  -> 7
f(20)  -> 8
f(40)  -> 9
f(80)  -> 10
f(160) -> 11
f(320) -> 12
Run Code Online (Sandbox Code Playgroud)

我目前的做法是蛮力.我循环遍历X并测试在我达到5之前我可以将它减半的次数,最后我添加6.这样做并且比调用原始方法更快.但我一直在寻找一种更"优雅"或更便宜的解决方案.

接受的答案是那个设法帮助我但没有指出我是多么愚蠢的人:)

(标题可能很糟糕,因为我不知道我在找什么)

java language-agnostic math

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

有关MoM和大型消息的建议

我正在设计一个系统,它将使用jms和一些消息传递软件(我倾向于使用ActiveMQ)作为中间件.将有少于100个代理,每个代理每天最多推送5000条消息.

每条消息的有效负载大约为100字节.我希望大约有一半(2500)的消息聚集在午夜左右,而另一半则在白天有些均匀分布.上面给出的数字都是我所期望的更高端.(是的,我可能会在不久的将来吃掉那个声明).

有一种类型的消息,其中有效载荷将相当大,例如在5-50mb的范围内.这些消息每天只会从每个代理发送几次.

我的问题是: 这会以任何方式引起我的问​​题,还是通过消息队列发送大量数据是完全正常的?

例如,它会在处理较大的消息时减少吞吐量(较小的消息排队)吗?

或者消息队列会阻塞更大的消息?

或者我应该以不同的方式处理这个问题,比如通过jms发送数据的位置,让终端接收器在其他地方获取数据?(我希望不会因为耦合,安全问题和额外配置而导致特殊情况).

我对jms的实用细节完全不了解,所以请告诉我是否需要提供更多详细信息.

编辑: 我接受了Andres真正棒极了的回答.继续发布建议和意见,我会保持一切有用的东西.

java jms message-queue

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

如何在Oracle SQL Developer中执行超过100万个插入查询?

我有超过100万个插入查询要在Oracle SQL Developer中执行,这需要花费很多时间.有没有办法优化这个.

sql oracle sql-scripts oracle-sqldeveloper

3
推荐指数
1
解决办法
3198
查看次数

从带有时区的时间戳中提取本地小时

我试图从中提取本地时间timestamp with time zone,但是由于我不熟悉这种数据类型,因此得到了意外的结果。

我期望22作为下面每一行的输出。

with my_data as(
   select to_timestamp_tz(ts, 'yyyy-mm-dd hh24:mi:ss tzh:tzm') as tsz
     from (select '2017-12-07 22:23:24 +' || lpad(level, 2, '0') || ':00' as ts  
             from dual connect by level <= 10
          )       
)
select dbtimezone
      ,sessiontimezone
      ,tsz
      ,extract(hour from tsz)
  from my_data;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

为什么会发生这种情况,我该怎么做才能从带有时区的时间戳中提取本地时间?

oracle timestamp-with-timezone oracle12c

2
推荐指数
1
解决办法
1116
查看次数

从当前sysdate中检索最近两年的数据

嗨我被困在一个oracle查询,其中我想根据当前年份检索前两年的数据,就像这是2013年所以我想要检索2011年和2012年的所有记录我已经完成了以下查询但是我被困在日期格式我是oracle的新手,这里是查询

Select 
to_date(stage_end_date,'yy') Years,SUBPRODUCT Product,sum(OFFER_COUNT) SumCount
    ,sum(offer_amount)SumAmount
from stage_amt  
and 
Offer_amount !=0 
and 
to_date(stage_end_date,'yy')
between to_char( sysdate, -2 ) and to_char( sysdate)
group by to_date(stage_end_date,'yy'),SUBPRODUCT
order by Years asc;
Run Code Online (Sandbox Code Playgroud)

得到此错误ORA-00932:不一致的数据类型:预期DATE得到NUMBER 00932. 00000 - "不一致的数据类型:预期%s得到%s"任何人都可以帮我做什么

问候

sql oracle

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