小编Jaa*_*nna的帖子

LISTAGG功能有两列

我有这样一张桌子(报告)

--------------------------------------------------
|  user_id |  Department | Position  | Record_id |
--------------------------------------------------
|  1       |  Science    | Professor |  1001     |
|  1       |  Maths      |           |  1002     |
|  1       |  History    | Teacher   |  1003     |
|  2       |  Science    | Professor |  1004     |
|  2       |  Chemistry  | Assistant |  1005     |
--------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想得到以下结果

   ---------------------------------------------------------
   | user_id  |  Department+Position                       |
   ---------------------------------------------------------
   |  1       | Science,Professor;Maths, ; History,Teacher |
   |  2       | Science, Professor; Chemistry, Assistant   | …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g plsqldeveloper

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

使用两列旋转数据

我有透视格式的数据.它看起来像这样:

-----------------------------------------
| user_id |  org  |   position  | lang  |
-----------------------------------------
|   1001  |   USE |   Boss      | EN    |
|   1001  |   USD |   Bossa     | FI    |
|   1002  |   GWR |   Dim       | SV    |
|   1003  |   GGA |   DCS       | FI    |
|   1003  |   GCA |   DDD       | SV    |
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想将数据表示为:

-------------------------------------------------------------------------------------
| user_id | org_fi |  position_fi |   org_en | position_en  | org_sv  | position_sv |
-------------------------------------------------------------------------------------
|  1001   |   USD …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g

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

NLS_NUMERIC_CHARACTERS设置为十进制

我在测试机器中有一个数据库设置,在生产机器中有第二个.当我跑:

select to_number('100,12') from dual 
Run Code Online (Sandbox Code Playgroud)

然后它在测试机器中出错.但是,这种说法在生产机器中运行得很好.

现在,当我检查NLS_NUMERIC_CHARACTERS时,我在两台机器上都看到','(逗号).还有其他地方我应该寻找小数设置吗?

干杯!

oracle oracle11g oracle-sqldeveloper

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

仅触发更改的值

假设我们在表中有3条记录:orig_tab

---------------------------------------------
|  PK  |  Name  |  Address  |  Postal Code  |
---------------------------------------------
|   1  |  AA    |  Street1  |   11111       |
|   2  |  BB    |  Street2  |   22222       |
|   3  |  CC    |  Street3  |   33333       |
---------------------------------------------
Run Code Online (Sandbox Code Playgroud)

现在数据发生了变化:

---------------------------------------------
|  PK  |  Name  |  Address  |  Postal Code  |
---------------------------------------------
|   1  |  AA    |  Street1  |   11111       |
|   2  |  BB    |  Street2  |   44444       |
|   3  |  CC    |  Dtreet7  |   33333 …
Run Code Online (Sandbox Code Playgroud)

oracle triggers plsql oracle11g

11
推荐指数
2
解决办法
3万
查看次数

listunagg函数?

像listunagg函数那样在oracle中有这样的东西吗?例如,如果我有这样的数据:

------------------------------------------------------------
| user_id | degree_fi    | degree_en       | degree_sv       |
--------------------------------------------------------------
| 3601464 | 3700         |  1600           |  2200           |
|  1020   | 100          |  0              |   0             |
| 3600520 | 100,3200,400 | 1300, 800, 3000 | 1400, 600, 1500 |
| 3600882 |  0           |   100           |  200            |
--------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想显示这样的数据:

-----------------------------------------------
| user_id | degree_fi | degree_en | degree_sv |
-----------------------------------------------
| 3601464 | 3700      |  1600     |  2200     |
|  1020   | 100       |  0 …
Run Code Online (Sandbox Code Playgroud)

csv string oracle tokenize oracle11g

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

使用LOOP和SELECT进行INSERT

我试图使用INSERT/SELECT组合从其他表插入数据.我还需要通过特定计算插入增量.但是,我无法弄清楚它为什么不起作用.

我有这样的表(temp_business_area):

 ----------
 | bname  |
 ----------
 | London |
 | Sydney |
 | Kiev   |
 ----------
Run Code Online (Sandbox Code Playgroud)

我想在枚举表中有这个:

 -----------------------------------------------------------------
 | identifier    | language_id |   code | data   | company_limit |
 ----------------------------------------------------------------|
 | BUSINESS_UNIT |    0        |   100  | London | 126           |
 | BUSINESS_UNIT |    0        |   200  | Sydney | 126           |
 | BUSINESS_UNIT |    0        |   300  | Kiev   | 126           |
 -----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

-----------------------------------------------------------------
 | identifier    | language_id |   code | data   | company_limit |
 ----------------------------------------------------------------|
 | …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g

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

触发器中的pragma autonomous_transaction

我在一个表上写了一个触发器,在某个条件下从其他表中删除数据.触发器具有pragma autonomous_transaction,触发器按预期工作.但是,我确实想知道将来是否会出现任何问题,比如说多个用户/来源同时插入数据等等......有什么建议吗?

源表t1:

--------------------------------------------
| user_id | auth_name1 | auth_name2 | data |
--------------------------------------------
|  1      |  Name1     |  Name2      | d1  |
|  2      |  Name3     |  Name4      | d2  |
|  3      |  Name5     |  Name1      | d3  |
--------------------------------------------
Run Code Online (Sandbox Code Playgroud)

目标表t2:

   ------------------------------------------------
   | record_id |  identifier | status |   data1   |
   ------------------------------------------------
   |  100      |  Broken     |  11    |   Name1   |
   |  101      |  Reminder   |  99    |   Name1   |
   |  102      |  Broken     |  99    |   Name2 …
Run Code Online (Sandbox Code Playgroud)

oracle triggers plsql oracle11g plsqldeveloper

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

一列中的所有行值

我想在一列中显示所有值.我该怎么办?

数据如下所示:

-----------------------------------------------
| user_id | degree_fi | degree_en | degree_sv |
-----------------------------------------------
| 3601464 | 3700      |  1600     |  2200     |
|  1020   | 100       |  0        |   0       |
| 3600520 |  100      | 1300      |  1400     |
| 3600882 |  0        |   100     |  200      |
| 3600520 |  3200     |   800     |  600      |
| 3600520 |  400      | 3000      |  1500     |
-----------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我想拥有的是:

-------------------------------------------------------------
| user_id | degree_fi    | degree_en       | degree_sv       |
-------------------------------------------------------------- …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g plsqldeveloper

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

在记录列表之间插入新记录

我想在已经在表中的记录之间插入记录.有超过40000条记录,我想把这个新记录放在第19位.我该怎么办?

让我们考虑一个有5条记录的例子:

表数据:

CREATE TABLE enum
  (identifier  VARCHAR2(64),
   code VARCHAR2(512),
   data VARCHAR2(4000))
/
INSERT ALL 
INTO enum VALUES ('HR_B_A', 'Halli, L6', 'Halli, L6')
INTO enum VALUES ('HR_B_A', 'Halli, L7', 'Halli, L7')
INTO enum VALUES ('HR_B_A', 'Halli, L8', 'Halli, L8')
INTO enum VALUES ('HR_B_A', 'Halli, L9', 'Halli, L9')
INTO enum VALUES ('HR_B_A', 'Halli, P6', 'Halli, P6')
INTO enum VALUES ('HR_B_A', 'Halli, P7', 'Halli, P7')
select * from dual
/
Run Code Online (Sandbox Code Playgroud)

所以当我们查看表格时,我们得到:

SELECT * FROM enum

IDENTIFIER     CODE         DATA
----------   ---------    ---------
HR_B_A …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g

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

每天工作安排几个小时

我需要安排从0600到1800的工作.工作应该每两个小时后运行一次.例如0800,1000,1200,1400,1600,1800.

这是我到目前为止设法完成的代码:

DECLARE
     l_id binary_integer;
     begin
       sys.dbms_job.submit(job => l_id, what => 'integration_export;', interval => 'TRUNC(SYSDATE,''hh24'')+0/24/60');
       sys.dbms_output.put_line(l_id);    
end; 
Run Code Online (Sandbox Code Playgroud)

当然,这将在每2小时后运行一次,而不是在1801 - 0759停止.我怎么能添加这个限制?我要做的一件事是创建另一个计划程序,该程序在1801处唤醒并在此时间点更改为此作业.但是,我想知道这是不是一个好主意.

有什么建议?

提前致谢 :-)

oracle jobs plsql scheduling oracle11g

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

选择字段中具有最高字段值的数据

我有一个表,我想选择具有最高值的行.例如:

----------------
| user | index |
----------------
|  1   |   1   |
|  2   |   1   |
|  2   |   2   |
|  3   |   4   |
|  3   |   7   |
|  4   |   1   |
|  5   |   1   |
----------------
Run Code Online (Sandbox Code Playgroud)

预期结果:

----------------
| user | index |
----------------
|  1   |   1   |
|  2   |   2   |
|  3   |   7   |
|  4   |   1   |
|  5   |   1   |
----------------
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我假设它可以通过一些我不知道的oracle函数来完成?

提前致谢 …

sql oracle oracle11g

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

从2050年到1950年的神秘变化

有一些不寻常的事情发生.虽然移民,我有2050年之后一些时间(例如,二○五○年五月二十○日,21.11,2051),但由于某些原因,他们的Oracle更改为1950年,1951年等.如果你问我,它是由客户报告很烦人.这些是退休日期,所以很明显他们不能在20世纪50年代和60年代

原始表中的日期类似于YYYYMMDD格式,即20500130.所以这是我的合并声明

MERGE INTO employment_data emp                                                     
   USING   temp_02 src
   ON      (TO_NUMBER(src.id) = emp.id)
   WHEN MATCHED THEN UPDATE SET 
       emp.retirement_day = DECODE(TO_NUMBER(src.retirement), 0, NULL, TO_DATE(src.retirement, 'YYYY.MM.DD'));
Run Code Online (Sandbox Code Playgroud)

其他日期还可以(例如20301204),但是2050年之后的任何日期都是疯狂的.知道我怎么能解决这个烦恼?

Thx提前:-)

oracle plsql oracle11g plsqldeveloper

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