小编APC*_*APC的帖子

简单的oracle触发器

简单的一个.我有点像PLSql的新手,oracle的错误信息永远不会太有帮助.

我想做一个简单的触发器来更新具有当前日期的列,即表的"修改日期"列.虽然得到一个奇怪的错误.

这个想法很简单

create table test1 (tcol varchar2(255), tcol2 varchar2(255))

CREATE OR REPLACE TRIGGER testTRG
AFTER INSERT OR UPDATE ON test1
FOR EACH ROW
BEGIN 
     update test1
     set tcol2 =  to_char(sysdate)
     where tcol = :OLD.tcol;
END;

insert into test1 (tcol) values ('test1');
Run Code Online (Sandbox Code Playgroud)

这会弹出错误:

ORA-04091: table RAIDBIDAT_OWN.TEST1 is mutating, trigger/function may not see it
ORA-06512: at "RAIDBIDAT_OWN.TESTTRG", line 2
ORA-04088: error during execution of trigger 'RAIDBIDAT_OWN.TESTTRG'
Run Code Online (Sandbox Code Playgroud)

有人可以快速解决这个问题吗?

干杯,

F.

oracle triggers plsql ora-04091 mutating-table

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

如何在PL/SQL中进行总结

鉴于我有一个包含用户数据的表,如下所示:

userID     calltime     result 
1         10:20         1
1         11:00         2
1         11:30         1
2         9:30          1
2         11:00         1
3         10:00         1
3         10:30         2
3         11:00         1
3         11:30         2
Run Code Online (Sandbox Code Playgroud)

现在我想这样总结一下:

userID     result1    result2
1             2         1
2             2         0
3             2         2
(total)       6         3
Run Code Online (Sandbox Code Playgroud)

对我来说,总结用户数据很好,但是如何在查询中添加总行?UNION不适用于此.

非常感谢你做的这些.

编辑:这是我当前的查询,当然,它不起作用:

  PROCEDURE P_SUMMARIZE_CALL
  (
    pStartDate IN DATE,
    pEndDate IN DATE,
    SummaryCur  OUT MEGAGREEN_CUR    
  )
  IS
  BEGIN
    OPEN SUMMARYCUR FOR
    SELECT USERID, TOTALCALLS,CONNECTEDCALLS,RATE,NOANSWER FROM
    (((SELECT USERID,
            count(CALLID) AS TOTALCALLS, 
            sum(CONNECTED) as CONNECTEDCALLS, …
Run Code Online (Sandbox Code Playgroud)

database oracle plsql aggregate

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

使用alter命令在oracle中分区表

我必须从用户输入为JAVA程序中的oracle表动态创建分区.如果用户输入3,我必须制作3个分区.以前有一个包含大约100列的表格.但我的问题是,当我在Sql Developer中执行以下查询时,它给出了错误,如下所示.

是否可以使用alter命令一次添加三个或更多分区,或者我必须为三个分区更改表三次?

我正在使用'Oracle 9i',建议一些事情

提前致谢

Sql查询

ALTER TABLE table_01  add 
partition p2 values less than(20),
partition p3 values less than(30),
partition p4 values less than(40);
Run Code Online (Sandbox Code Playgroud)

错误

Error report -
SQL Error: ORA-14043: only one partition may be added
14043. 00000 -  "only one partition may be added"
*Cause:    ALTER TABLE ADD PARTITION contained descriptions of more than  one
       partition to be added
*Action:   Ensure that the statement contains exactly one partition
       definition and that it does not contain any …
Run Code Online (Sandbox Code Playgroud)

sql oracle

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

Oracle SQL - 如何在一行中显示一对多关系?

我有一个名为MY_MOVIES的表,有两列:MOVIES和GENRES就像这样(关系是一部电影到很多类型):

GENRE         MOVIE
----------    --------------           
ACTION        MOVIE1
DRAMA         MOVIE1
CRIME         MOVIE2
DRAMA         MOVIE2
CRIME         MOVIE3
DRAMA         MOVIE3
ACTION        MOVIE4
ADVENTURE     MOVIE4
FANTASY       MOVIE4
ANIMATION     MOVIE5
ADVENTURE     MOVIE5
COMEDY        MOVIE5
Run Code Online (Sandbox Code Playgroud)

该表有超过100000行.

我想要得到这样的输出:

MOVIES        GENRES
----------    -------------- 
MOVIE1        ACTION, DRAMA
MOVIE2        CRIME, DRAMA
MOVIE3        CRIME, DRAMA
MOVIE4        ACTION, ADVENTURE, FANTASY
MOVIE5        ANIMATION, ADVENTURE, COMEDY
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用像这样的PIVOT(有了将0和1替换为类型的想法):

SELECT * FROM MY_MOVIES 
PIVOT (COUNT(MOVIE) FOR GENRE in (SELECT DISTINCT(GENRE) FROM MY_MOVIES) as MOVIE_GENRES
Run Code Online (Sandbox Code Playgroud)

我一直以为我做错了.

sql oracle pivot string-concatenation

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

没有存储过程/函数的分隔符的Oracle SQL拆分

我想在oracle db中通过分隔符(|)拆分列.我怎样才能做到这一点?

在db中,值将存储为:

领域

AP1|Apple Juice|100
Run Code Online (Sandbox Code Playgroud)

我想分开它成为:

Field1 | Field2 | Field3

AP1 Apple Juice 100    
Run Code Online (Sandbox Code Playgroud)

我不知道确切的查询,但基本上下面是我想要的.

select split(Field) as Field1, split(Field) as Field2, split(Field) as Field3
Run Code Online (Sandbox Code Playgroud)

我想只使用SQL(不创建任何存储过程或函数).

sql oracle string-split

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

Node.js:从 MongoDB 流式传输到文件

我对 javascript/node.js 还很陌生,我正在尝试让一个非常基本的场景工作:连接到 MongoDB,将 JSON 响应转换为 CSV,将其写入文件。我试过如下

fs = require('fs');
var MongoClient = require('mongodb').MongoClient;
var Db = require('mongodb').Db;
var Server = require('mongodb').Server;
var Json2csvStream = require('json2csv-stream');
var Stream = require('stream');
var JSONStream = require('JSONStream');
var es = require('event-stream');
var csv = require('csv');

var fields = ['execAmendTime', 'execTime', 'execType', 'lastMkt', 'manualExecFlag', 'orderId', 'riskTrade', 'rootOrdId', 'salesCommissionRate', 'salesCommissionType', 'theoPov20Px',
'theoPov20BL', 'tradeFlags', 'tradeNotes', 'transactTime', 'version', 'book.bookName', 'businessUnit', 'commissionRate', 'commissionSource', 'commissionType', 'counterBook.bookName', 
'counterParty.name', 'createTime', 'currency', 'direction', 'execQuantity', 'fxRate','orderQuantity', 'positionTrader.name', 'price', 'primaryTrader.name','rootSystem', 'source',
'sectorGicsLevel1', 'salesTrader.name', 'tradedPrice', …
Run Code Online (Sandbox Code Playgroud)

javascript csv streaming mongodb node.js

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

PL / SQL:数字或值错误

我遇到错误,不知道为什么:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.STANDARD", line 394
ORA-06512: at "DOMINOS.DISTANCE", line 10
ORA-06512: at "DOMINOS.ZOEKWINKELVOORADRES", line 19
ORA-06512: at line 5
Run Code Online (Sandbox Code Playgroud)

光标应包含145行。当我执行该过程时,我在54行之后收到上面的错误消息。

create or replace procedure zoekWinkelVoorAdres
    (v_postcode in postcode.postcode%type,
      v_huisnr in WINKEL.HUISNR%type,
      v_id out WINKEL.ID%type,
      v_afstand out number)
is
    type lat_array is varray(100000) of POSTCODE.LAT%type;
    type lon_array is varray(100000) of POSTCODE.LON%type;
    type id_array is varray(100000) of winkel.id%type;
    a_lat lat_array;
    a_lon lon_array;
    a_id id_array;
    latwin postcode.lat%type;
    lonwin postcode.lon%type;
    latklant postcode.lat%type;
    lonklant postcode.lon%type;
    vafstand number(38);
    cursor …
Run Code Online (Sandbox Code Playgroud)

oracle plsql ora-06502

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

ORA-04021: 等待锁定对象时发生超时

我有这个匿名 PL/SQL 块,它计算并打印从表中返回的值。

DECLARE
    U_ID NUMBER :=39;
    RETAIL BINARY_FLOAT:=1;
    FLAG NUMBER;
BEGIN
    SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID INTO RETAIL, FLAG FROM UNITS WHERE UNIT_ID=U_ID;
    LOOP
    SELECT NVL(MAX(UNIT_ID),U_ID) INTO FLAG FROM  UNITS WHERE FATHER_ID=FLAG;
    IF FLAG=U_ID THEN EXIT; END IF;
    SELECT RETAIL* RETAIL_AMOUNT INTO RETAIL FROM UNITS WHERE UNIT_ID=FLAG;
    EXIT WHEN FLAG=U_ID;
    END LOOP;
DBMS_OUTPUT.PUT_LINE( RETAIL);
END;
Run Code Online (Sandbox Code Playgroud)

这个块工作正常,但我想使用 PL/SQL 函数做同样的事情

我写的函数如下:

CREATE OR REPLACE FUNCTION GET_UNIT_RETAIL(U_ID NUMBER)
     RETURN NUMBER
IS
    RETAIL BINARY_FLOAT:=1;
    FLAG NUMBER;
BEGIN
    SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID 
    INTO RETAIL, FLAG 
    FROM UNITS 
    WHERE UNIT_ID=U_ID; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql sqlplus

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

Oracle DB,为多个列创建唯一约束以进行插入,性能如何

朋友们,

我是DB的新手,我需要一些帮助/信息.我们的项目中有一个表"record_table",其中的值是使用C++代码插入的.

该表有多列,其中三列表示例如."serialNo,type,sub_type"C++代码为这些列的组合插入重复值(这些列不是该表的唯一或主要列).但是3列的组合应该是唯一的.

现在我们要确保不应插入此组合的重复项.我正在考虑为这些列添加唯一约束,以便在插入具有这些重复值的新记录时,它将不允许.

我认为这应该可行,但我怀疑它是否会达到性能,C++二进制文件每天运行并且它会插入大约200万条记录.将创建独特的约束命中性能.(意味着运行时间会减慢,或者因为表有数百万条记录将创建唯一约束,因为它必须对这些列进行哈希等)

如果可以,请建议.

database oracle performance

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

如何在Oracle中将动态参数传递给喜欢的运算符?

我需要根据数据之间的任何单词进行搜索。如何在存储过程中为此传递参数?

where like employeename concat(empname,'%')
Run Code Online (Sandbox Code Playgroud)

不起作用

它只会得到开始的emp名称...

oracle

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